با سلام.
برای دفع حملات Xss در Asp.net راه های خیلی زیادی وجود داره که بعضی از اونها خیلی پیچیده و بعضی دیگه خیلی آسونه . امروز یه روش خیلی ساده رو آموزش می دم و امیدوارم بدردتون بخوره البته این روش چندان پیشرفته و حرفه ای نیست ولی تا حدود زیادی می تونه به شما در دفع حملات Xss که با استفاده از تزریق کدهای Html انجام می شه رو بگیرید . ابتدا تابع زیر را تعریف کنید :
Public Shared Function RemoveHTML(ByVal strText As String) As String Dim TAGLIST As String TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" & "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" & "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;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;LISTING;MAP;MARQUEE;" & "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" & "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;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;OBJECT;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
استفاده از این کلاس بسیار ساده می باشد. همان طور که در کد زیر می بینید ابتدا با استفاده از تابع HtmlEncode تمام کدهای html را فقط نمایش دادنی می کنیم (در صورت اجرا هیچ اثری روی صفحه نمی گذارند) و بعد کدهای html را توسط RemoveHTMLAllTage حذف می کنیم.
Email =RemoveHTMLAllTage(Server.HtmlEncode(Emailtxt1.Text), False)
شاید این سوال پیش بیاید که چرا باید از این تابع استفاده شود در صورتی که HtmlEncode قبلا کدها را بی اثر می کند ؟ که باید بگم این تابع صرفا برای حذف element های html در داده های رشته ای می باشد ولی در بعضی موارد می تواند کمک شایانی در دفع حملات کند.
نه بابا این سرورت خیلی توپه حتی یه time out هم نداد جالبه
سلام محمد عزیز
دقیقا ، سرور ما تا اینجا خیلی خوب بوده.ازشون ممنونیم
در ضمن این مطلب هم بدرد بخور بود،ممنون 😉
موفقیت
من نمی دونم چرا سایت برام هر چند وقت دو سه روز برام بالا نمیاد مشکل از کجاست ؟ علی جان شاید سرور چندان قوی نباشه در هر صورت الان یه پینگ می گیرم بهت می گم