تبليغات

برای دفع حملات Xss در Asp.net راه های خیلی زیادی وجود داره که بعضی از اونها خیلی پیچیده و بعضی دیگه خیلی آسونه . امروز یه روش خیلی ساده رو آموزش می دم و امیدوارم بدردتون بخوره البته این روش چندان پیشرفته و حرفه ای نیست ولی تا حدود زیادی می تونه به شما در دفع حملات Xss که با استفاده از تزریق کدهای Html انجام می شه رو بگیرید . ابتدا تابع زیر را تعریف کنید :

<code>

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

</code>

استفاده از این کلاس بسیار ساده می باشد. همان طور که در کد زیر می بینید ابتدا با استفاده از تابع HtmlEncode تمام کدهای html را فقط نمایش دادنی می کنیم (در صورت اجرا هیچ اثری روی صفحه نمی گذارند) و بعد کدهای html را توسط RemoveHTMLAllTage حذف می کنیم.

1
Email =RemoveHTMLAllTage(Server.HtmlEncode(Emailtxt1.Text), False)

 

شاید این سوال پیش بیاید که چرا باید از این تابع استفاده شود در صورتی که HtmlEncode قبلا کدها را بی اثر می کند ؟ که باید بگم این تابع صرفا برای حذف element های html در داده های رشته ای می باشد ولی در بعضی موارد می تواند کمک شایانی در دفع حملات کند.

 

منبع: fotolia.ir

مقالات - متفرقه

تبلیغات

مقالات

تبلیغات

ورود و خروج