دفع حملات XSS در Asp.net

تبلیغات
کانال تلگرام فتولیا

با سلام.

برای دفع حملات 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 در داده های رشته ای می باشد ولی در بعضی موارد می تواند کمک شایانی در دفع حملات کند.

در همین رابطه :   نمودار سازماني در مايكروسافت

3 Comments

  1. من نمی دونم چرا سایت برام هر چند وقت دو سه روز برام بالا نمیاد مشکل از کجاست ؟ علی جان شاید سرور چندان قوی نباشه در هر صورت الان یه پینگ می گیرم بهت می گم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

More in HTML 5
دانلود رایگان ۱۰ قالب واکنش گرای Bootstrap

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

Close