資料整理

           

          防范腳本攻擊

          一. 防范腳本攻擊

             JS 腳本 HTML 腳本攻擊的防范其實(shí)很簡(jiǎn)單: server.HTMLEncode Str )完事。當(dāng)然你還不要大叫,怎么可能?你讓我把全站類似< %=uid% >都加過(guò)濾我還不累死?為了方便的過(guò)濾,我們只需要將 HTML 腳本和 JS 腳本中的幾個(gè)關(guān)鍵字符過(guò)濾掉就可以了:程序體( 1 )如下:

             以下是過(guò)濾函數(shù)

            < %

             function CHK(fqyString)

             fqyString = replace(fqyString, " ", " ")

             fqyString = replace(fqyString, " ", " ")

             fqyString = replace(fqyString, "&#", "&")

             fqyString = Replace(fqyString, CHR(32), " ")

             fqyString = Replace(fqyString, CHR(9), " ")

             fqyString = Replace(fqyString, CHR(34), """)

             fqyString = Replace(fqyString, CHR(39), "'")

             fqyString = Replace(fqyString, CHR(13), "")

             fqyString = Replace(fqyString, CHR(10) & CHR(10), " /P >< P ")

             fqyString = Replace(fqyString, CHR(10), " BR ")

             CHK = fqyString

             end function

             %

          ?

          ?


             以下是應(yīng)用實(shí)例

            < %=CHK(Username)%

             Username=CHK(replace(request(“username”),”’”,””))

            使用 Include 把函數(shù)寫在公有頁(yè)面上,這樣效率是最好的。

            程序體( 1

            另外,值得我們注意的是,很多站點(diǎn)在用戶注冊(cè),或者是用戶資料修改的頁(yè)面上也缺少腳本的過(guò)濾,或者是只在其中之一進(jìn)行過(guò)濾,注冊(cè)進(jìn)入后修改資料仍然可以進(jìn)行腳本攻擊。對(duì)用戶提交的數(shù)據(jù)進(jìn)行檢測(cè)和過(guò)濾,程序體( 2 如下:

             以下是過(guò)濾函數(shù)

             If Instr(request("username"),"=") 0 or
             Instr(request("username"),"%") 0 or
             Instr(request("username"),chr(32)) 0 or
             Instr(request("username"),"?") 0 or
             Instr(request("username"),"&") 0 or
             Instr(request("username"),";") 0 or
             Instr(request("username"),",") 0 or
             Instr(request("username"),"'") 0 or
             Instr(request("username"),"?") 0 or
             Instr(request("username"),chr(34)) 0 or
             Instr(request("username"),chr(9)) 0 or
             Instr(request("username"),"") 0 or
             Instr(request("username"),"$") 0 or
             Instr(request("username")," ") 0 or
             Instr(request("username")," ") 0 or
             Instr(request("username"),"""") 0 then
             response.write " 朋友,你的提交用戶名含有非法字符,請(qǐng)更改,謝謝合作 a href='****:window.history.go(-1);' >返回< /a "
             response.end
             end if

            程序體( 2

            為了提供工作效率我們?cè)賹⑦^(guò)濾內(nèi)容程序化,這樣對(duì)多個(gè)參數(shù)的過(guò)濾效率將有很大程度上的提高:如

            程序體( 3

             以下為程序主體

             dim Bword(18)
             Bword(0)="?"
             Bword(1)=";"
             Bword(2)=" "
             Bword(3)=" "
             Bword(4)="-"
             Bword(5)="’"
             Bword(6)="””"
             Bword(7)="&"
             Bword(8)="%"
             Bword(9)="$"
             Bword(10)="'"
             Bword(11)=":"
             Bword(12)="   "
             Bword(13)="("
             Bword(14)=")"
             Bword(15)="--"
             Bword(16)=" chr(9)"
             Bword(17)=" chr(34)"
             Bword(18)=" chr(32)"
             errc=false

             以下是應(yīng)用實(shí)例部分

             for i= 0 to ubound(Bword)
             if instr(FQYs,Bword(i)) <> 0 then
             errc=true
             end if
             next
             if errc then
             response.write " script language=""****"" "
             response.write "parent.alert(' 很抱歉 ! 您的操作違法了 );"
             response.write "history,back();"
             response.write " /script "
             response.end
             end if

            程序體( 3

            有了上面的過(guò)濾函數(shù)您可以在任何需要過(guò)濾的地方應(yīng)用過(guò)濾函數(shù)直接使用就可以了。這就使我們的修復(fù)工作大大的簡(jiǎn)化了。

            另外,我想在這里再次多提醒一下,一些站點(diǎn)的 UBB 在進(jìn)行小的表情圖標(biāo)轉(zhuǎn)化時(shí)也會(huì)出現(xiàn)過(guò)濾問(wèn)題,由于很隱蔽所以不容易發(fā)現(xiàn):

            如:

            我們標(biāo)簽內(nèi)的文字進(jìn)行修改,

            不知道各位看懂沒,前一個(gè)單引號(hào)用來(lái)中和程序提供的左引號(hào),第二個(gè)單引號(hào)用來(lái)中和閉合的右引號(hào),這樣程序輸出就為:

            < img src=’img/0001.gif’ onerror=****:alert(); alt=’’

            如果圖片不存在,那么將激活 onerror 標(biāo)簽執(zhí)行腳本程序。對(duì)于已經(jīng)過(guò)濾了單引號(hào)的站點(diǎn)在這里用雙引號(hào)一樣可以完成。對(duì)于過(guò)濾了 **** 字段的,只用 alert() 也完全可以。所以說(shuō)要過(guò)濾就要過(guò)濾完全,別給攻擊者留下一絲機(jī)會(huì)。

          posted on 2006-07-17 16:54 謝瑋 閱讀(237) 評(píng)論(0)  編輯  收藏 所屬分類: java應(yīng)用程序Web操作系統(tǒng)與網(wǎng)絡(luò)

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 孙吴县| 仲巴县| 云阳县| 西贡区| 阿坝| 宁国市| 兰坪| 姜堰市| 成安县| 朔州市| 兰考县| 灵川县| 渝中区| 平罗县| 聂拉木县| 高台县| 仁怀市| 沙坪坝区| 九龙坡区| 广东省| 黑山县| 临猗县| 福泉市| 孙吴县| 紫阳县| 西乡县| 日照市| 湟源县| 通榆县| 湾仔区| 齐河县| 扶绥县| 安国市| 安阳市| 临洮县| 库车县| 喀喇| 通道| 吉木萨尔县| 绿春县| 弥勒县|