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
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.