日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XSS跨站脚本(web应用)——XSS跨站脚本防御(三)

發布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XSS跨站脚本(web应用)——XSS跨站脚本防御(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本章目的

普及xss攻擊常見防御方法與web安全編碼規范

XSS Filter

什么是XSSFilter
XSSFilter的作用是通過正則的方式對用戶(客戶端)請求的參數做腳本的過濾,從而達到防范XSS攻擊的效果。
XSSFilter作為防御跨站攻擊的主要手段之一,已經廣泛應用在各類Web系統之中,包括現今的許多應用軟件,例如Chrome瀏覽器,通過加入XSSFilter功能可以有效防范所有非持久型的XSS攻擊攻擊。

過濾方法

兩種過濾
防御跨站腳本攻擊的方式一般有兩種:Input Filtering和Output Filtering,分別在輸入端(Input)和輸出端(Output)進行過濾,即輸入驗證和輸出過濾。

輸入驗證是對輸入的所有數據都須經過驗證,驗證所有輸入數據的長度、類型、語法以及業務規則,被確認安全后才會存入數據庫中;輸出過濾在數據輸出前,確保用戶提交的數據被正確編碼,建議對所有字符進行編碼而不僅局限于某個子集。應用安全國際組織OWASP建議,防護XSS最佳的方法是結合輸入驗證和輸出過濾。

輸入過濾
“永遠不要相信用戶的輸入”是對設計人員和編碼人員說的,是進行安全設計和安全編
碼的重要準則。換句話說,任何輸入數據在證明其無害之前,都是有害的。許多危險的
漏洞就是因為過于相信用戶的輸入是善意的而導致的。
對輸入數據的過濾,具體可以從兩方面著手:輸入驗證和數據凈化。

輸入驗證
輸入驗證是對輸入數據使用強類型檢查,驗證數據的類型、長度、格式、范圍等
數據凈化
數據凈化是為了使有潛在危害的數據變得安全。如果所允許的輸入范圍不能保證輸入數據的安全性,數據凈化就非常有用。數據凈化包括從刪除用戶輸入字符串后面的空格到去除值等一切行為。在Web應用程序中,常見的數據凈化示例是使用URL編碼或HTML編碼來包裝數據,并將其作為文本而不是可執行腳本來處理。

輸入驗證要根據實際情況來設計,下面是一些常見的檢測和過濾
1、輸入是否僅僅包含合法的字符;
2、輸入字符串是否超過最大長度限制;
3、輸入如果為數字,數字是否在指定的范圍;
4、輸入是否符合特殊的格式要求,如E-mail地址、IP地址等。而對于重要敏感的信息,如折扣、價格等,應放到服務器端進行傳參與校驗等操作

數據凈化
除了在客戶端驗證數據的合法性,輸入過濾中還需要凈化有害的輸入,例如以下常見的敏感字符:
< > ' "&#javascript
但是,僅過濾以上敏感字符是遠遠不夠的。為了能夠提供兩層防御和確保Web應用程序的安全,對Web應用的輸出也要進行過濾和編碼。

當需要將一個字符串輸出到Web網頁時,同時又不確定這個字符串中是否包括XSS特殊字符(如>& ' "等),為了確保輸出內容的完整性和正確性,可以使用編碼(HTMLEncode)進行處理。

HTML編碼在防止XSS攻擊上起到很大的作用,它主要是用對應的HTML標記換為實體,這樣做可確保瀏覽器顯示實體,但不運行他們,將其當作HTML文檔的內容而非結構加以處理。一些常見的可能造成問題的字符的HTML編碼:

顯示實體名稱實體編號
<&lt;&#60;
>&gt;&#62;
&&amp;&#38;
"&quot;&#34;

輸出編碼
htmlspecialcharsO函數可以將以下五種HTML特殊字符轉成字符實體編碼:
<轉成&lt;
>轉成&gt;
&轉成&amp;
"轉成&quot;
'轉成&#39
如果說對輸入數據的過濾是針對可疑的信息進行防范,那么針對輸出數據進行編碼,
就是讓可能造成危害的信息變成無害。

輸入過濾
在數據存儲數據庫之前便對特殊的字符進行轉義,方便簡潔,順便可以把SQL注入等其他漏洞一并檢驗。而缺點就是無法處理之前已經存在于數據庫中的惡意代碼。
輸出過濾
在數據輸出之前先對部分敏感字符進行轉義,這是一個很安全的方法,能有效保持數據的完整性。缺點是必須對每一個細節的輸出仔細過濾,因此會帶來額外的工作量。

結合使用輸入過濾和輸出編碼能夠提供兩層防御,即使攻擊者發現其中一種過濾存在缺陷,另一種
過濾仍然能夠在很大程度上阻止其實施攻擊。

Web安全編碼規范

在輸出數據前對潛在威脅的字符進行編碼、轉義,是防御XSS攻擊的有效措施。這些輸出一般是動態內容。對Web應用而言,其動態內容可能來源于用戶輸入、URL、HTTP頭、POST數據、Cookies的值、查詢關鍵字等,所以,在應對不同背景下的動態內容的XSS攻擊時,要部署不同的解決方案。

body文本
假設有如下HTML片段:
<b>錯誤:你的查詢<?=$query?>沒有返回任何結果</b>
攻擊者可能將動態內容$query替換成惡意的XSS輸入:
<script>evil_script()</script>
返回的HTML代碼為:
<b>錯誤:你的查詢<script>evil_script()</script>沒有返回任何結果</b>
把下列能觸發XSS的字符用相應的HTML實體代替(和PHP的htmlspecialchars()
功能一致):
<(小于號)轉成&lt;
>(大于號)轉成&gt;
&(和號)轉成&amp;
”(雙引號)轉成&quot;
”(單引號)轉成&#39;

HTML標簽中的內容

一些HTML標簽如<input>、<style>、<color>等的屬性值可能為動態內容,該情況下常存在XSS威脅。

<div>查詢值:$query</div>或<input name="name"value="<?=$query?>">

攻擊者試圖輸入<、>等字符產生一個新的<script>標記:

xss"><script>evil_script()</script>

然后,返回HTML代碼如下:

<input name="name"value="xss"><script>evil_script()</script>">>

HTML標簽中的內容

假設有以下的HTML代碼片段:

<input name="name"value=<?=$query?>>

惡意輸入為:

xss οnmοuseοver=evil_script()

渲染后的HTML代碼如下:

<input name="name"value=xss οnmοuseοver=alert(/xss/)>

當受害者移動光標到input輸入欄時,腳本就會被執行。

<img onmouseover-"bigImg(this)"src="smiley.gif'alt="Smiley">

<script></script>中的內容
<script>
var msg='<?=$query?>';
</script>
惡意輸入為:
xss';evil_script()://
最終結果為
<script>
var msg='xss';evil script();//
</script>>

<script:></script>中的內容

解決方案:

盡量避免或減少在Javascript上下文中使用動態內容,稍不謹慎就會導致跨站腳本攻擊。另外,在JavaScript中會出現</script>關鍵字與前面的<script>標簽閉合,還有/**/等JavaScript注釋也會被惡意利用,所以對這些字符要進行編碼過濾。

?' ??????? 轉換????????????? \'

"?????????????????????????????? \"

\ ? ? ?????????????????????????? \\

/???????????????????????????????? \/

\n ????????????????????????????? \n

\r????????????????????????????? \r

JavaScript事件

考慮如下情況:

<input type=button name=smt value='確定'

οnclick='GotoUrl("<?=$targetUrl>");'>

惡意輸入為:

foo");evil script("

返回的HTML代碼為:

<input type=button name=smt value='確定'

οnclick='GotoUrl("foo");evil_script("");'>

JavaScript事件
這種情況下,動態內容既處于HTML上下文中,又處于JavaScript上下文中,從瀏覽器解析順序來看,應該先對字符進行HTML轉義,再進行JavaScript轉義。

(小于號)轉成81t;
(大于號)轉成&gt;
(和號)轉成&amp;
(雙引號)轉成&quot;
(單引號)轉成&#39;
(反斜杠)轉成\;
(正斜杠)轉成\/;
(換行符)轉成\n;
(回車符)轉成\r

總體來說,上述的編碼規則實際上表達是同一個概念,即:將未信任數據嵌入到任何輸出之前都應按照上下文的轉義規則對其進行編碼。

總結

以上是生活随笔為你收集整理的XSS跨站脚本(web应用)——XSS跨站脚本防御(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。