2011-06-08 133 views
4

我只有一個關於XSS攻擊的簡單問題。我知道你可以通過清理表單輸入來阻止它們,但我的問題是,如何搜索輸入(例如在網站上進行一般搜索)?我們是否應該對搜索輸入進行清理?我的意思是,這只是一個搜索輸入,用戶應該能夠在網站上搜索他/她想要的任何內容。請向我提供一些關於此的澄清。跨站點腳本攻擊(xss)攻擊

謝謝

回答

7

我知道,你可以阻止他們通過消毒的形式輸入

不,你應該消毒輸出阻止他們。因此,在數據庫(或地方),你需要傳遞的數據原樣,並處理它,你把它給用戶權限之前

+2

怎麼樣的SQL注入? – 2011-06-08 02:19:18

+1

@勞倫斯Cherone:那是另一個討論。歐普特意詢問了XSS。 – zerkms 2011-06-08 02:24:11

+0

除了我想在網站上正確顯示html(或其他客戶端字符)這一事實,爲什麼我必須爲XSS攻擊(而不是輸入)清理OUTPUT?惡意代碼的來源不是INPUT嗎?我的意思是,用戶輸入客戶端代碼,我認爲這是我應該清理(使用htmlentities())。我錯過了別的嗎? – user765368 2011-06-08 18:47:06

3

芹苴這已經被zerkms

做消毒從任何SQL注入回答觸及數據庫用戶輸入需要mysql_real_escape_string($_REQUEST['search'])

在輸出,如果你的表現是什麼用戶搜索,如「您搜索的是:」用htmlentities(strip_tags($_REQUEST['search']), ENT_QUOTES);

那麼你的安全,從傳入和傳出

+0

除了正確顯示用戶搜索的內容,爲了保護網站免受xss攻擊,不是INPUT需要清理的內容嗎?是否有其他目的來消毒輸出? – user765368 2011-06-08 18:48:31

1

我只想在這裏添加一點。你說:

我的意思是,它只是一個搜索輸入,用戶應該能夠搜索任何他/她想在網站上。

下面是一個問題:經常會將搜索詞打印到搜索後呈現的文檔中。即,「您搜索了:<什麼是>」。如果您沒有對這些東西進行消毒,那麼您將會遇到XSS漏洞。

如果你想「但我們不這樣做」,記住,你可能不這樣做現在,但你可能在未來這麼做。如果你現在沒有封鎖這個漏洞,你很可能會在後面忘記這麼做 - 所以最好只是把這個漏洞扼殺在萌芽狀態。

1

SQL注入XSS是兩個不同的(但有點關係)的攻擊。它們之間的相關性在於,本質上它歸結爲不可信的數據從放入它的上下文中逃逸並隨後執行不可預見的操作。

對於以下建立防禦的最佳實踐,我建議您通過OWASP的SQL Injection Prevention Cheat Sheet及其XSS Prevention Cheat Sheet

OWASP提出的這ESAPI Project其包括工具用於編碼用於不同的上下文中不可信數據可被用於:

  • encodeForSQL
  • encodeForHTML
  • encodeForHTMLAttribute
  • encodeForJavaScript
  • encodeForCSS
  • encodeForURL

該庫可用於許多語言,如Java,.NET,PHP ,經典ASP,冷聚變,Python和哈斯克爾。它也能夠在需要時執行輸入驗證。

一些使用ESAPI的組織包括美國運通,Apache Foundation,Booz Allen Hamilton,Aspect Security,Foundstone(McAfee),哈特福德,無限校園,洛克希德馬丁,MITRE,美國海軍 - SPAWAR,世界銀行,SANS研究所。

最後 - 編碼將在解釋之前執行(越接近越好)。例如:就在您向UI組件提供不可信數據以呈現其編碼之前。 UI組件不能信任服務器 - 它必須進行編碼。