2016-07-25 72 views
0

如果我想防止XSS,將限制輸入特殊字符,如<和>在所有文本輸入形式是防止它的最好方法?跨站點腳本:限制使用< and >標記是減少跨站腳本的有效方法?

我的意思是,這將阻止html標記的輸入,如<script>,<img>等,並有效地阻止XSS。

你同意嗎?

+0

不,全部取決於數據插入頁面的位置。 – epascarello

+0

@epascarello,你願意詳細說明嗎? – user3002318

+2

如果正在將內容插入爲刪除<>的任何屬性,則不執行任何操作。 – epascarello

回答

1

之一以防止XSS的最大問題是,單個的網頁上具有許多不同的編碼上下文,其中一些可能會或可能不會重疊。雙編碼被認爲是固有的危險。

我們來看一個例子。您禁止<>,所以我不能再在頁面中輸入HTML元素了,對吧?好吧,不是。例如,如果你把我裝到一個屬性的文本,將不同的解釋:

onload="document.write('&lt;script&gt;window.alert(&quot;Gotcha!&quot;)&lt;/script&gt;')" 

有很多這樣的機會,而每個需要自己正確的編碼的變種。即使將輸入作爲正確的HTML文本進行編碼(例如,將<轉換爲&lt;),如果文本以javascript形式呈現,並且在例如innerHTML之類的內容中使用,也可能是漏洞。

任何類型的URL(img src="javascript:alert('I can't let you do that, Dave')")或將用戶輸入嵌入到任何類型的腳本(\x3C)中都會出現同樣的問題。 URL是特別危險的,因爲它確實編碼了三倍編碼 - URL編碼,(X)HTML編碼和可能的JavaScript編碼。我不確定是否有可能在這些條件下有安全的用戶輸入:D

理想情況下,您希望儘可能地限制曝光區域。除非您信任用戶(例如管理員),否則不要讀取生成的文檔。避免多重編碼,並且始終確保您確切知道每個潛在的不安全編碼的具體位置。在XHTML中,您在CDATA部分中有一個很好的選擇,這使得編碼潛在危險的代碼變得容易,但是那些不支持XHTML的瀏覽器可能會錯誤地解釋這些代碼。否則,使用適當的文檔編碼方法 - 在JS中,這將是innerText。當然,您需要確保您的JS腳本不會因用戶數據而受到影響。