2011-01-06 38 views
4

什麼是可用於確定字符串是否爲XSS(跨站點腳本)安全風險的正則表達式?XSS正則表達式

+0

上下文是我需要確定代碼生成的字符串是否包含符合Xss的文本。我在網上看到了一些例子,但我想知道是否有人有我可以借用的久經考驗的正式快遞? – Phil 2011-01-07 03:18:55

回答

5

這取決於正在使用該字符串的上下文。

例如,如果正在打印出字符串作爲一個HTML頁面的一部分,則該特殊的HTML字符<>",和'可能潛在地XSS風險。

如果它通過JSON傳遞,那麼'"可能是XSS風險。

如果它被包含在SQL語句中(它確實不應該,至少不是直接使用參數化查詢),那麼像;和反引號之類的東西可能會成爲問題。

Et cetera。

0

在用戶數據生成的html中查找任何未編碼的<字符。沒有任何<字符,就不會有注入您網站的惡意html。

如果您想允許用戶生成的格式,然後將允許的html限制爲子集。用正則表達式來檢查這是不可能的,所以我推薦一個好的html解析器。

+0

啓用用戶生成格式的標準方法是禁用所有標籤(通過html編碼所有尖括號),然後「添加」您希望允許的標籤。 @marcog認爲,可能有框架已經這樣做了,因爲這是一項比原先看起來更困難的任務。 – Andrew 2011-01-06 23:46:33

+0

更好的選擇是簡單地使用不是HTML的格式化標記 - 像Markdown(StackOverflow使用什麼)或BBCode(如果您更喜歡基於標記的系統),可以讓您不必擔心不安全的HTML標記。 – Amber 2011-01-06 23:59:22

3

永遠不可能有防彈功能來阻止所有的xss,並且正則表達式不是最佳選擇。 XSS高度依賴於頁面上的何處以及限制文件的內容,如"'<>是一個好的開始,但決不是一個全面的解決方案。即使停止這些字符,也有MANY other ways of exploiting XSS.僅舉幾例,有惡意的href的:javascript:alert(/xss/)和注入事件處理程序:onload=alert(/xss/),如果您篩選列出的4個字符,將會停止其中的任何一個。

HTMLPurifier由幾千個正則表達式構成,它一直被繞過。