PDA

View Full Version : مقاله: encryption query string



hamid_200611
جمعه 08 خرداد 1388, 21:50 عصر
سلام همونطور که میدونیم برای جلوگیری از حملات Sql Injection نباید به طور مستقیم از Query String تو دستورات دیتابیس استفاده کرد.به همین منظور یکی از راه حل های این مشکل encryption کردن query string است.برای این کار ما دو مرحله داریم:
1- رمز نگاری query string
2- از حالت رمز خارج کردن برای استفاده مجدد.
برای اینکار من یه کلاس گذاشتم که دو تا کلاس داره یکی برای Encrypt و دیگری برای Decrypt :


public class EncryptDecryptQueryString
{
private byte[] key = { };
private byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };

public string Decrypt(string stringToDecrypt, string sEncryptionKey)
{
byte[] inputByteArray = new byte[stringToDecrypt.Length + 1];
try
{
key = System.Text.Encoding.UTF8.GetBytes(sEncryptionKey) ;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(stringToDecrypt);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), 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;
}
}

public string Encrypt(string stringToEncrypt, string SEncryptionKey)
{
try
{
key = System.Text.Encoding.UTF8.GetBytes(SEncryptionKey) ;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception e)
{
return e.Message;
}
}
}

hamid_200611
جمعه 08 خرداد 1388, 22:19 عصر
خوب حالا باید قسمت query string در آدرس خود را به تابع Encrypt بدید به این صورت:


string strURL = "Page2.aspx?";
string strURLWithData = strURL + EncryptQueryString(string.Format("Name={0}&Age={1}&Phone={2}", strName, strAge, strPhone));

hamid_200611
جمعه 08 خرداد 1388, 22:22 عصر
و برای Decrypt کردن باید از تابع Decrypt استفاده کنید.در اینجا یه نمونه کد گذاشتم:

milade
شنبه 09 خرداد 1388, 12:59 عصر
ملت زورش میاد برا فشار به سرور از کلید عمومی و خصوصی برا پسورد استفاده کنه اون وقت Url ؟!

abasfar
شنبه 30 مرداد 1389, 18:16 عصر
سلام
کد شما به نظر من به سرور زیاد فشار وارد میکنه

Ali_M.Eghbaldar
شنبه 30 مرداد 1389, 19:09 عصر
سلام
تلاشت قابل تحسینه :لبخندساده: