2010-06-03 6 views
3

J'ai une URL www.site adresse/site pages/page1.aspx? = Nom d'utilisateur Deepu & password = Deepu Comment puis-je changer l'URL www.site- adresse/page-site/page1.aspx? nom d'utilisateur = 232322323232 & mot de passe = 2323232322323 par exemple je veux crypter les champs que je traverse l'URL s'il vous plaît aidez-moi à crypter et décrypter l'URL en C# en utilisant. net, maintenant j'utilise la réponse .redirect et passez ces valeurs comme chaîne de requête .... pls help ....Comment crypter/décrypter l'url en C#

+9

et respirez .... la ponctuation est votre ami. –

+0

J'aimerais aussi savoir. Pas que je le fasse comme ça, mais comment fonctionne exactement la "session"? –

+3

Levez la main si, en tant qu'utilisateur, vous vous sentez à l'aise de voir votre nom d'utilisateur et votre mot de passe dans l'URL? Même supposé "crypté"? N'importe qui? –

Répondre

5

Votre approche est défectueuse et le chiffrement n'aidera pas vraiment le problème sous-jacent. Si vous sortez sur le réseau, vous verrez rarement (ne devriez jamais) voir un schéma comme celui que vous décrivez, même s'il est crypté. A la place, vous devez stocker les informations d'identification de l'utilisateur aussi sûrement que possible sur le serveur et transmettre un jeton de session unique de courte durée dans la chaîne de requête que vous pouvez utiliser pour rechercher les informations d'identification. En ce qui concerne le stockage sécurisé sur le serveur, une fois que vous avez reçu le mot de passe de l'utilisateur la première fois, vous devez utiliser un hachage unidirectionnel, comme SHA256, avec du sel. Vous pouvez passer cette valeur n'importe où, la stocker, et valider la comparaison entre le has d'un mot de passe potentiel et le hash que vous avez stocké. Traitez le mot de passe d'un utilisateur comme un déchet toxique - jetez-le aussi vite que possible. Vous voulez être dans l'entreprise de stockage de mot de passe à peu près aussi mal que vous voulez être dans l'entreprise de stockage de déchets toxiques.

(Answered de mon iPhone, des liens à venir ou si quelqu'un veut me aider! :))

+0

merci de répondre ,,, je dois passer des données à une autre page .. si im passer par l'URL, je ne veux pas que le client voit les valeurs déposées ..une forme cryptée est possible ..je ne voulais pas dire que je veux ce formulaire ... – deepu

+1

@deepu la réponse est "ne fais pas ça". C'est extrêmement dangereux. –

+0

okz..then comment puis-je passer certaines valeurs à une autre page ... autre que la méthode server.transfer .. – deepu

4

Voulez-vous vraiment faire ça? Si vous vous souciez des noms d'utilisateur et des mots de passe, il est probable que l'information ou la fonctionnalité que vous fournissez a de la valeur. Avec le passage de paramètres d'URL, vous laissez un certain nombre de surfaces d'attaque ouverts (non moins attaques replay où tout le monde peut usurper l'identité de vos utilisateurs.

Qu'est-ce que vous essayez vraiment faire, et pourquoi ne pouvez-vous utiliser what's provided in ASP.NET?

+0

Je suis d'accord. Il est très mauvais de stocker les informations d'identification dans la chaîne de requête, même si elle est cryptée. Il serait très facile pour quelqu'un d'intercepter la chaîne de requête et d'usurper l'identité de l'utilisateur. –

+0

yh ... j'ai besoin de transmettre des données à une autre page .. si im passant par url, je ne veux pas que le client voit les valeurs classées .. tout ce que je pensais abt chiffrer les valeurs et le passage est possible. ..toutes les méthodes simples ... – deepu

+1

Vous n'avez pas besoin de passer le nom d'utilisateur/mot de passe! Entendu parler de sessions? Ceci est géré automatiquement pour vous si vous regardez juste ce que MSFT recommande. Jetez un oeil aux mécanismes d'authentification ASP.NET standard, je vous en prie! –

1

Pourquoi ne pas publier les valeurs au lieu d'utiliser la chaîne de requête? Avec SSL au moins personne ne verrait le mot de passe crypté ou autrement.Les mots de passe supplémentaires dans l'URL ne fournissent pas de sécurité.C'est comme éparpiller les clés de votre maison partout quartier et en espérant que personne ne va les essayer pour ouvrir votre maison

Fondamentalement, c'est une prémisse erronée. Urls sont mis en cache de plusieurs façons, il est donc logique de ne pas mettre passwo rds en eux.

Cependant, vous n'êtes pas seul à mettre des mots de passe dans une URL. Check this out

http://support.microsoft.com/kb/135975

+0

Oui, bien sûr, vous devriez utiliser la méthode post quand vous devez envoyer des mots de passe d'une page à une autre, elle peut être utilisée dans le cas où vous utilisez des valeurs dans la page en fonction de la chaîne de requête. –

7

Il ne fonctionnera pas dans la façon dont vous voulez, mais oui le cryptage est possible par des moyens mentionnés ci-dessous

page Chiffrement:

string id1 = "id1"; 

Response.Redirect("decryptionPage.aspx?id1=" + HttpUtility.UrlEncode(Encrypt(id1))); 

private string Encrypt(string stringToEncrypt) 
{ 
     byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt); 
     byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; 
     byte[] key = { }; 
     try 
     { 
      key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); 
      DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
      MemoryStream ms = new MemoryStream(); 
      CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write); 
      cs.Write(inputByteArray, 0, inputByteArray.Length); 
      cs.FlushFinalBlock(); 
      return Convert.ToBase64String(ms.ToArray()); 
     } 
     catch (Exception e) 
     { 
      return e.Message; 
     } 
} 

page Decryption :

string getId1 = Convert.ToString(Request.QueryString["id1"]); 
var qs = Decrypt(HttpUtility.UrlDecode(getId1)); 
private string Decrypt(string EncryptedText) 
{ 
     byte[] inputByteArray = new byte[EncryptedText.Length + 1]; 
     byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; 
     byte[] key = { }; 

     try 
     { 
      key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); 
      DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
      inputByteArray = Convert.FromBase64String(EncryptedText); 
      MemoryStream ms = new MemoryStream(); 
      CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write); 
      cs.Write(inputByteArray, 0, inputByteArray.Length); 
      cs.FlushFinalBlock(); 
      System.Text.Encoding encoding = System.Text.Encoding.UTF8; 
      return encoding.GetString(ms.ToArray()); 
     } 
     catch (Exception e) 
     { 
      return e.Message; 
     } 
} 
+0

Je cherchais une question similaire et suis tombé sur votre code. Cela fonctionne parfaitement bien, mais la méthode 'Encrypt' génère des caractères qui sont remplacés par un espace lorsqu'ils sont ajoutés à l'URL (par exemple' + '). Ainsi, la méthode 'Decrypt' ne fonctionnera pas comme prévu. Des idées pour le résoudre ?? – Yalda

+0

Cela fonctionne parfaitement bien. – Monika