跨站Script攻擊(3)

來源:互聯網
上載者:User
攻擊 第二部分:跨站Script攻擊的防犯

一、如何避免伺服器受到跨站Script的攻擊

  值得慶幸的是,防止跨站Script攻擊的技術正趨於完善。目前可採取這幾種方式來防止跨站Script的攻擊:

1.對動態產生的頁面的字元進行編碼

2.對輸入進行過濾和限制

3.使用HTML和URL編碼

1.對動態產生的頁面的字元進行編碼

  你們首先要採用的就是對動態產生頁面的字元進行編碼,你必須這樣做,不然駭客很有可能更改你的字元設定而輕易地通過你的防線。如果我們的網站是個英語網站,這樣只要我們把字元編碼設成拉丁字元ISO-8859-1就行了,具體情況如下:

<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">

2.過濾和限制所有輸入的資料

  這是防止跨站Script的攻擊的第二種方法,在進行登入的時侯,不要讓那些特殊的字元也輸入進去。因此我們可在ONSUBMIT方法中加入JAVASCRIPT程式來完成這個功能。在本例中我們限制最多隻能輸入15個字元。這樣可以阻止那些較長的script的輸入。

  在<<Knowledge Base Article QA252985>>這本書中微軟提供了一個簡短的Javascript程式來完成對輸入資料的過濾。我們也根據具體情況引進了這段代碼用於我們的例子中,如:

function checkForm() {

document.forms[0].userName.value = _

RemoveBad(document.forms[0].userName.value);

return true;

}

// MICROSOFT'S CODE

function RemoveBad(strTemp) {

strTemp = strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g,"");

return strTemp;

}

用這個辦法,可以過濾在輸入中含有的這些字元:

% < > [ ] { } ; & + - " '( )

3.使用HTML和URL編碼

  儘管使用上面所說的過濾和限制輸入的辦法是一種非常重要用防禦手段,但它對我的這種採用郵件方式的攻擊還是無能為力。因為我把URL的參數直接放在郵件中。針對這種情況我們不得不採取一種更有力的安全措施。如果我們用的ASP,解決起來相對說來要容易得多。只要對動態產生的網頁總進行HTML和URL編碼就行了。針對我們例子中的情況,在第一輸入頁中我們對redirect URL作了如下改動:

strRedirectUrl = strRedirectUrl & _

server.URLEncode(Response.Cookies("userName"))


在執行頁中我們加入:

strUserName =server.HTMLEncode(Request.QueryString("userName"))



strUserName =server.HTMLEncode(Request.Form("userName"))

  微軟推薦對所有動態網頁面的輸入和輸出都應進行編碼。甚至在對資料庫資料的存入和取出也應如此。這樣你就能在很大程度上避免跨站script的攻擊。


要做到這些還要在Page1.asp中加入:


<%@ Language=VBScript %>


<% If Request.Cookies("userName") <> "" Then


'redirect if detect the cookie

Dim strRedirectUrl

strRedirectUrl = "page2.asp?userName="

strRedirectUrl = strRedirectUrl & _

server.URLEncode(Request.Cookies("userName"))

Response.Redirect(strRedirectUrl)


Else %>

<HTML>

<HEAD>

<META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">

<TITLE>MyNiceSite.com Home Page</TITLE>

</HEAD>

<SCRIPT LANGUAGE="javascript">

<!--

function checkForm() {

document.forms[0].userName.value =

RemoveBad(document.forms[0].userName.value);

return true;

}


//******************************************************

//Programmer: NOT ORIGINAL CODE - COMES FROM MICROSOFT

//Code Source: Microsoft Knowledge Base Article Q25z985

//Description: Removes bad characters.

//******************************************************


function RemoveBad(strTemp) {

strTemp =strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g, "");

return strTemp;

}

//-->

</SCRIPT>

<BODY>

<BR>

<H2>MyNiceSite.com</H2>

<BR>

<FORM method="post"action="page2.asp" onsubmit="return checkForm();">

Enter your MyNiceSite.com username:

<INPUT type="text"name="userName" width="10" maxwidth="10">

<INPUT type="submit"name="submit" value="submit">

</FORM>

</BODY>

</HTML>

<% end if %>

Page2.asp中加如:


<%@ Language=VBScript %>

<% Dim strUserName

If Request.QueryString("userName")<>"" Then

strUserName =server.HTMLEncode(Request.QueryString("userName"))

Else

Response.Cookies("userName") =Request.Form("userName")

strUserName = server.HTMLEncode(Request.Form("userName"))

End If %>

<HTML>

<HEAD>

<META http-equiv="C



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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