2017-07-19 32 views
0

我的Javascript代碼旨在獲取一些不受信任的字符串變量並將其呈現在DOM中。它將插入格式良好的HTML中的已知點。如果且僅當字符串不可能包含HTML元素時纔會插入。腳本執行是主要的擔心,但任何可能被用於攻擊的注入都是令人擔憂的。什麼是最簡單的檢查可能的HTML/JS注入攻擊?

如果字符串看起來不安全,我可以簡單地不在DOM中呈現它。沒有要求對發現可能不安全的字符串進行消毒或做任何事情。事實上,我想避免圖書館,並喜歡一個無需維護的簡單檢查。我也看到了向DOM添加文本節點的解決方案,但我只是說這對我所做的事不起作用。

我想測試也許是因爲「確實字符串包含<」那樣簡單:

function isItSafe(text) { return text.indexOf('<') === -1; }

但也許這是幼稚的。尤其是,當某些漏洞利用依賴於某個瀏覽器響應無效HTML的行爲時。可以在不使用「<」的情況下創建注入漏洞?如果是這樣,你認爲最低限額的支票需要做些什麼?

+1

使用正則表達式!我認爲這個答案https://stackoverflow.com/a/20855840/6826071是你需要的。 – DrunkDevKek

+0

我需要一些方法來知道方法是否安全。我試圖設定我的問題,探索確定安全所需的具體內容。 –

回答

2

簡短的回答是:總是在用戶的輸入中使用正則表達式。 我不認爲有沒有方法來執行沒有尖括號的XSS攻擊。

可能有庫,在那裏,使用更復雜的正則表達式,但這裏有一個很好的開始與:

這將添加一個方法爲String的原型:

String.prototype.applyXSSprotection = function(){ 
    return this.replace(/</g, "&lt;").replace(/>/g, "&gt;"); 
}; 

任何時候你將整合用戶的輸入到DOM中,你應該使用:

/*let's suppose the user input is stored in the variable user_input as a string*/ 
user_input = user_input.applyXSSprotection(); 
/*now use it*/