關於ASP編程中安全性問題的解決方案

來源:互聯網
上載者:User
1、問題描述
標準的HTML語句或者javascript語句會改變輸出結果
例如:
在留言板中,我們在留言內容中打入:
<font size=10 color=red>你好</font>
如果你的ASP程式中沒有屏蔽html語句,那麼就會改變"你好"字型的大小。
又比如:
在輸入框中寫個 javascript 的死迴圈:
<a herf=http://someurl >特大新聞</a>
 那麼其他查看該留言的客人只要移動滑鼠到"特大新聞",上就會使使用者的瀏覽器因死迴圈而死掉。

解決方案和建議:
編寫類似程式時應該做好對此類操作的防範,譬如可以寫一段程式判斷用戶端的輸入,並屏蔽掉所有的 HTML、 javascript 語句。利用下面函數HtmlEnCode()處理:
Function HtmlEnCode(str)
'替換空格符號
str=Replace(str," "," ")
'替換字元"<",">"
str=Replace(str,"<","<")
str=Replace(str,">",">")
'替換行
str=Replace(str,chr(13),"
")
HtmlEnCode=Str
End Function

2、問題描述
使用者COPY下表單後,修改ACTION到指定的URL
例如:
建立一個發佈頁面,未加入用戶端的資料合法性檢查代碼,若指定表單ACTION到提交頁面,則通過你的程式入口,可向資料庫輸入不合法的資料,或導致資料庫出錯。

解決方案和建議:
通過下面的過程可以解決:
Sub CheckSubmit(Dir)
Dim ParentURL,ChildURL
'讀取上一個跳轉頁面的地址,並且轉換為小寫字元竄
ParentURL=lcase(Request.ServerVariables("HTTP_REFERER"))
ChildURL=lcase("http://www.kupage.com/"&Dir)
If Instr(ParentURL,ChildURL)=0 Then
StrTemp="
<li>您的提交檔案不合法!"
Call ShowErrMsg(StrTemp) ‘ShowErrMsg()出錯提示過程
End If
End Sub
備忘:
1)使用此過程時,預先要在ChildURL中輸入本站網域名稱,注意不能輸入IP地址,應為HTTP_REFFERER返回的參數為網域名稱。
2)傳遞的參數Dir是當前的檔案所在的相對目錄路徑。
3)如果這個網站有2個或2個以上的網域名稱指向,可以在條件陳述式上並列一個條件,如果網域名稱www.51hu.com也指向這個IP地址(更多如法炮製),條件陳述式頭可以一下判斷:
If Instr(ParentURL,ChildURL)=0 and Instr(ParentURL,lcase(“www.51hu.com”&Dir)) Then

3.問題描述
用輸入框修改SQL語句
解決方案和建議:
屏蔽掉’ “ & +等符號,注意當禁止鍵盤輸’”&+等非法符號時,使用者還可能用COPY的方法輸入;還有一種方法就是用一個轉換函式,把非法字元轉換為合法,從資料庫中取出時再轉換回來。
可借鑒如下函數:(在執行SQL命令前對特殊字元進行轉換)
Function AdjustedForSQL(adj_str)
Dim AdjustedStr,I
Adj_str=Trim(adj_str)
AdjustedStr=””
If Len(adj_str)>0 Then
For I=1 To Len(adj_str)
Select Case Mid(adj_str,I,1)
Case”[”:
AdjustedStr=AdjustedStr & “[]”
Case “|”:
AdjustedStr=AdjustedStr & “[{-}]”
Case “’”:
AdjustedStr=AdjustedStr & “[&-()”
Case Else:
AdjustedStr=AdjustedStr & Mid(adj_str,I,1)
End Select
Next
End If
AdjustedForSQL=AdjustedStr
End Function

4.問題描述
點擊後退反覆重新整理資料庫
例如:
發佈頁面中,發布完一條資訊後點擊後退,繼續發布,反覆操作,會導致係數據庫多餘無效資料。
解決方案和建議:
可在時間上對下一次資料庫操作進行控制:
Session("PutInfo")=Now()
在進行資料庫操作時,最好是讀取表單變數之前加下一句
If DateAdd("s",30,Session("PutInfo"))>Now() Then
Response.Write "<script language=javascript>alert(""您發布資訊的間隔時間不能低於30秒!"");history.back();</script>"
Response.End
End If

5.問題描述
ASP程式密碼驗證問題
例如:
在使用者名稱框中輸入任意值,密碼框中輸入ben' or '1'='1 ,這樣就繞過了密碼驗證,將以資料庫中第一個使用者的身份登陸。

解決方案和建議:
1)屏蔽輸入框中的符號” ’ ”
2)在使用者登入頁面對於使用者名稱和密碼不要同時加以判斷,只對使用者名稱進行判斷,根據使用者名稱在資料庫中尋找是否有與之匹配的密碼,再將資料庫中的密碼與輸入框中的內容進行比較

6.問題描述
直接修改瀏覽器中URL傳遞的參數值

解決方案和建議:
1)盡量不要在連結中帶重要的參數,在接受參數時應對請求人進行許可權判斷。
2)若傳遞的參數為數字,應對傳遞的參數做合法性判斷。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.