資料整理

           

          防范腳本攻擊

          一. 防范腳本攻擊

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

             以下是過濾函數

           ?。?/span> %

             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

             %

          ?

          ?


             以下是應用實例

            < %=CHK(Username)%

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

            使用 Include 把函數寫在公有頁面上,這樣效率是最好的。

            程序體( 1

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

             以下是過濾函數

             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 " 朋友,你的提交用戶名含有非法字符,請更改,謝謝合作 a href='****:window.history.go(-1);' >返回< /a "
             response.end
             end if

            程序體( 2

            為了提供工作效率我們再將過濾內容程序化,這樣對多個參數的過濾效率將有很大程度上的提高:如

            程序體( 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

             以下是應用實例部分

             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

            有了上面的過濾函數您可以在任何需要過濾的地方應用過濾函數直接使用就可以了。這就使我們的修復工作大大的簡化了。

            另外,我想在這里再次多提醒一下,一些站點的 UBB 在進行小的表情圖標轉化時也會出現過濾問題,由于很隱蔽所以不容易發現:

            如:

            我們標簽內的文字進行修改,

            不知道各位看懂沒,前一個單引號用來中和程序提供的左引號,第二個單引號用來中和閉合的右引號,這樣程序輸出就為:

           ?。?/span> img src=’img/0001.gif’ onerror=****:alert(); alt=’’

            如果圖片不存在,那么將激活 onerror 標簽執行腳本程序。對于已經過濾了單引號的站點在這里用雙引號一樣可以完成。對于過濾了 **** 字段的,只用 alert() 也完全可以。所以說要過濾就要過濾完全,別給攻擊者留下一絲機會。

          posted on 2006-07-17 16:54 謝瑋 閱讀(237) 評論(0)  編輯  收藏 所屬分類: java應用程序Web操作系統與網絡

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 永宁县| 武城县| 探索| 马公市| 鄂托克前旗| 泌阳县| 安福县| 铜陵市| 马关县| 高安市| 鞍山市| 民权县| 林西县| 佛山市| 青冈县| 保康县| 广元市| 台湾省| 衡水市| 永春县| 漳浦县| 西华县| 新郑市| 夏津县| 延寿县| 遂川县| 永嘉县| 铁岭县| 广灵县| 财经| 那坡县| 京山县| 扶余县| 荔波县| 金溪县| 革吉县| 讷河市| 卫辉市| 富平县| 铅山县| 张家界市|