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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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;CEN TER;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;H R;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;STRO NG;STYLE;SUB;SUP;" &

"TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;T T;U;UL;VAR;WBR;XMP;"

Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJ ECT;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 حذف می کنیم.


1
Email =RemoveHTMLAllTage(Server.HtmlEncode(Emailtxt1.Tex t), False)
شاید این سوال پیش بیاید که چرا باید از این تابع استفاده شود در صورتی که HtmlEncode قبلا کدها را بی اثر می کند ؟ که باید بگم این تابع صرفا برای حذف element های html در داده های رشته ای می باشد ولی در بعضی موارد می تواند کمک شایانی در دفع حملات کند.




یا سپاس فراوان
نقل قول از محمد مردانی