PDA

View Full Version : سوال: چک کردن ورودی های کاربر



minajasmi
شنبه 24 دی 1390, 16:40 عصر
دوستان با چه تابعی میتونم ورودی های کاربر را کنترل کنم. این تابع را برای مقابله با حملات sql injection میخام استفاده کنم .خیلی نیازدارم ممنون میشم در این مورد راهنماییم کنید.

crazy_1892
شنبه 24 دی 1390, 18:16 عصر
select ها را به صورت پارامتری بنویس،
جستجو میکردی راحتر بودی
http://www.irandevelopers.com/programming/sqlinjectionaspnet8712071306-1527/

hakan648
شنبه 24 دی 1390, 18:17 عصر
سلام
فکر کنم این لینک (http://how2learnasp.net/article.aspx?code=e26dc330-7150-44a2-aa28-01cfb8dd38f2) مفید باشه براتون .

موفق باشید ...

boysilent
شنبه 24 دی 1390, 18:43 عصر
اینجوری فک کنم منظورشونه

newcom.CommandText = "SELECT * FROM wlogin WHERE uname=@uname AND pword=@pword";
newcom.Parameters.AddWithValue("@uname", TextBox1.Text);
newcom.Parameters.AddWithValue("@pword", TextBox2.Text);

minajasmi
شنبه 24 دی 1390, 18:44 عصر
سلام
فکر کنم این لینک (http://how2learnasp.net/article.aspx?code=e26dc330-7150-44a2-aa28-01cfb8dd38f2) مفید باشه براتون .

موفق باشید ...



ممنون از لینک خوبتون
دوست عزیز یسری تابع در این لینک بود ولی من طریقه استفادشونمیدونم. میشه لطف کنید را هنماییم کنید

minajasmi
شنبه 24 دی 1390, 18:46 عصر
اینجوری فک کنم منظورشونه

newcom.CommandText = "SELECT * FROM wlogin WHERE uname=@uname AND pword=@pword";
newcom.Parameters.AddWithValue("@uname", TextBox1.Text);
newcom.Parameters.AddWithValue("@pword", TextBox2.Text);





من جستجوهامو با پارامتر انجام دادم. ولی برای اطمینان بیشتر میخام ورودی ها داده خطرناک نداشته باشه

EnKamran
شنبه 24 دی 1390, 18:49 عصر
شما وقتی با پارامتر کار می کنی دیگه مشکلی با SQL Injection نخواهی داشت، اگر مشکل شما امنیت در برابر SQL Injection هست که خوب از پارامتر ها استفاده کن مشکل حله اگر چیز دیگه ای هست بگید تا براتون روشن کنیم.

minajasmi
شنبه 24 دی 1390, 19:02 عصر
شما وقتی با پارامتر کار می کنی دیگه مشکلی با SQL Injection نخواهی داشت، اگر مشکل شما امنیت در برابر SQL Injection هست که خوب از پارامتر ها استفاده کن مشکل حله اگر چیز دیگه ای هست بگید تا براتون روشن کنیم.

من میخام امنیت سایتم بالا بره حالا یا در مقابل sql injection یا هر حمله دیگه ای که ممکنه پیش بیاد.البته همه خطا ها را مدیریت کردم وتا جایی هم که میشده از validation ها استفاده کردم وتو یکی از پست ها خوندم که میشه ورودی ها را فیلتر کرد ولی کدی نذاشته بودن.میخام از اون تابع استفاده کنم که احتمال مشکل خیلی پایین بیاد.ممنون میشم اگه در مورد امنیت بیشتر راهنماببم کنبد.
البنه زیاد سرچ کردم و مطلب زیاد خوندم وتا جایی که بلد بودم سعی کردم اونا را پیاده کنم تو سایتم ..ممنون

EnKamran
شنبه 24 دی 1390, 19:24 عصر
خوب شما همین مقاله (http://how2learnasp.net/article.aspx?code=e26dc330-7150-44a2-aa28-01cfb8dd38f2) که دوستمون دادن رو مطالعه کنید کفایت می کنه.

minajasmi
شنبه 24 دی 1390, 19:26 عصر
خوب شما همین مقاله (http://how2learnasp.net/article.aspx?code=e26dc330-7150-44a2-aa28-01cfb8dd38f2) که دوستمون دادن رو مطالعه کنید کفایت می کنه.
خوندمش قبلا یعنی کفایت میکنه برای امنیت سایت

smm2006sh
شنبه 24 دی 1390, 19:49 عصر
سلام
توی این پست هم یه سری چیز هست که شاید با اونا اشنا باشی اما ممکن هست مطلبی هم باشه که هنوز نخونده باشی .
خوندنش ضرر نداره !!!
http://barnamenevis.org/showthread.php?309954-%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A7%D9%85%DB%8C%D9%86-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C%D9%85%D8%A7%D9%86-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%DA%A9%D9%86%DB%8C%D9%85

minajasmi
شنبه 24 دی 1390, 19:57 عصر
سلام
توی این پست هم یه سری چیز هست که شاید با اونا اشنا باشی اما ممکن هست مطلبی هم باشه که هنوز نخونده باشی .
خوندنش ضرر نداره !!!
http://barnamenevis.org/showthread.php?309954-%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A7%D9%85%DB%8C%D9%86-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C%D9%85%D8%A7%D9%86-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%DA%A9%D9%86%DB%8C%D9%85

ممنون خونده بودم. من دنبال به تابع واسه فیلتر ورودی ها میخام اگه کسی استفاده کرده از این تابع کمکم کنه لطفا

maysam09
شنبه 24 دی 1390, 21:47 عصر
ممنون خونده بودم. من دنبال به تابع واسه فیلتر ورودی ها میخام اگه کسی استفاده کرده از این تابع کمکم کنه لطفا

برای این کار از تابع ()HtmlEncode استفاده کن HttpUtility.HtmlEncode(input string);

maysam09
شنبه 24 دی 1390, 21:59 عصر
میشه لطف کنید بیشتر در موردش توضیح بدید و نحوه استفادش

این کار برای حملات XSS که از طریق اسکریپت های خطرناک هست پیشنهاد میشهhttp://www.veracode.com/security/xss

این تابع ورودی های مخرب رو چک میکنه و کلمات مخرب رو از بین میبره http://www.dotnetperls.com/httputility

minajasmi
شنبه 24 دی 1390, 22:16 عصر
این کار برای حملات XSS که از طریق اسکریپت های خطرناک هست پیشنهاد میشهhttp://www.veracode.com/security/xss

این تابع ورودی های مخرب رو چک میکنه و کلمات مخرب رو از بین میبره http://www.dotnetperls.com/httputility


اگه تعدادی تکس داشته باشم که مقدارشون درج میشه تو جدول باید وارد این تابع بشن وخروجیشو درج کنم؟

maysam09
شنبه 24 دی 1390, 22:27 عصر
اگه تعدادی تکس داشته باشم که مقدارشون درج میشه تو جدول باید وارد این تابع بشن وخروجیشو درج کنم؟

بله باید قبل وارد کردن encode کنین ورودیهاتون رو ...موفق باشین

hakan648
جمعه 05 اسفند 1390, 04:17 صبح
سلام
این مقاله رو مطالعه بفرمایید .

مقابله با XSS ؛ يكبار براي هميشه! (http://www.dotnettips.info/2011/05/xss.html)

mmnoody2006
جمعه 05 اسفند 1390, 08:46 صبح
شما وقتی با پارامتر کار می کنی دیگه مشکلی با SQL Injection نخواهی داشت، اگر مشکل شما امنیت در برابر SQL Injection هست که خوب از پارامتر ها استفاده کن مشکل حله اگر چیز دیگه ای هست بگید تا براتون روشن کنیم.

نخیر دوست عزیز کافی نیست


Public Shared Function RemoveHTMLAllTage(ByVal html As String, ByVal allowHarmlessTags As Boolean) As String
If html Is Nothing OrElse html = String.Empty Then
Return String.Empty
End If

If allowHarmlessTags Then
Return System.Text.RegularExpressions.Regex.Replace(html, "", String.Empty)
End If

Return System.Text.RegularExpressions.Regex.Replace(html, "<[^>]*>", String.Empty)
End Function

این تمام تگهای html بهمراه محتویاتش رو پاک می کنه

Public Shared Function RemoveHTML(ByVal strText As String) As String
Dim TAGLIST As String
TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BAS EFONT;" &
"BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENT ER;CITE;CODE;" &
"COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;E MBED;FIELDSET;" &
"FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR ;HTML;I;IFRAME;IMG;" &
"INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;L ISTING;MAP;MARQUEE;" &
"MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION; P;PARAM;PLAINTEXT;" &
"PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRON G;STYLE;SUB;SUP;" &
"TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT ;U;UL;VAR;WBR;XMP;"

Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJE CT;SCRIPT;STYLE;"

Dim nPos1 As Integer
Dim nPos2 As Integer
Dim nPos3 As Integer
Dim strResult As String
Dim strTagName As String
Dim bRemove As Boolean
Dim bSearchForBlock As Boolean

nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")

nPos3 = InStr(strTagName, " ")
If nPos3 > 0 Then
strTagName = Left(strTagName, nPos3 - 1)
End If

If Left(strTagName, 1) = "/" Then
strTagName = Mid(strTagName, 2)
bSearchForBlock = False
Else
bSearchForBlock = True
End If

If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
bRemove = True
If bSearchForBlock Then
If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
nPos2 = Len(strText)
nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
If nPos3 > 0 Then
nPos3 = InStr(nPos3 + 1, strText, ">")
End If

If nPos3 > 0 Then
nPos2 = nPos3
End If
End If
End If
Else
bRemove = False
End If

If bRemove Then
strResult = strResult & Left(strText, nPos1 - 1)
strText = Mid(strText, nPos2 + 1)
Else
strResult = strResult & Left(strText, nPos1)
strText = Mid(strText, nPos1 + 1)
End If
Else
strResult = strResult & strText
strText = ""
End If

nPos1 = InStr(strText, "<")
Loop
strResult = strResult & strText

RemoveHTML = strResult
End Function

اینم هر کدوم از تگ هایی که مشخص کنید رو حذف می کنه :بوس:

البته بازم کافی نیست بصورت دقیق همه ورودی های کاربر رو چک کنید و تا جایی که امکان داره محدودش کنید

مثلا وقتی نیاز دارید سال میلادی رو دریافت کنید نزارید کمتر از 1900 و 2500 وارد بشه که اینطوری با یه شرط معمولی می تونید جلوی تزریق حروف رو هم بگیرید

فقط روی sql injection کار نکنید

از تصاویر امنتی هم استفاده کنید که هر تازه کاری براتون اسپمر نسازه بیچاره شید :گیج:

سه تا تابع می زارم امیدوارم مفید باشه براتون:


Public Shared Function IsValidEmail(ByVal email As String) As Boolean
Return Regex.IsMatch(email, "^([0-9a-z]+[-._+&])*[0-9a-z]+@([-0-9a-z]+[.])+[a-z]{2,6}$", RegexOptions.IgnoreCase)
End Function

Public Shared Function IsValidURL(ByVal url As String) As Boolean
Return Regex.IsMatch(url, "^(http\:\/\/(?:www\.)?[a-zA-Z0-9]+(?:(?:\-|_)[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:(?:\-|_)[a-zA-Z0-9]+)*)*\.[a-zA-Z]{2,4}(?:\/)?)$")
End Function

Public Shared Function IsValidInt(ByVal val As String) As Boolean
Return Regex.IsMatch(val, "^[1-9]\d*\.?[0]*$")
End Function

اولی ایمیل بودن دومی آدرس وب بودن و سومی عدد بودن ورودی رو چک می کنه

برای امنیت بیشتر اطلاعات حساس رو در سمت client امن کنید (SSL)

اینم یه pdf کامل که می تونه بدردتون بخوره :

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=055FF772-97FE-41B8-A58C-BF9C6593F25E&displaylang=en

یه مرجع مفید برای امنیت در دات نت 2

http://msdn.microsoft.com/en-us/library/ms998258.aspx