我有兩個html檔案,比如說page1.html和page2.html. 在這兩個檔案中我都有一個article元素。現在,page1.html我想用 JavaScript 替換article元素的內容page2.html(我不想使用 jQuery)。
目前,我的解決方案如下:page1.html加載時,我使用fetch方法來獲取page2.html'sarticle元素的內容。然后,當用戶單擊按鈕時,我呼叫
article.innerHTML = newContent;
到目前為止,這確實作業得很好,但最近我讀到innerHTML不應該用它來防止 XSS 攻擊。顯然,我無法設定該屬性article.textContent,因為我的文章中有“真實”html的代碼,我想這樣解釋。我能想到的另一個解決方案是html將腳本檔案中的代碼作為字串包含在內。這種方法的缺點是,每當我想更改文章時,我都必須同時更改腳本檔案page2.html 。
有沒有推薦的方法來實作我想做的事情?此外,我讀過的所有 XSS 攻擊示例似乎都表明我的特定用途innerHTML不允許 XSS 攻擊(因為我從我自己控制的站點獲取代碼),但我不只是想就像“我想不出 XSS 攻擊,所以永遠不會有”。在這種情況下,任何有關 XSS 攻擊危險的見解也將不勝感激。
先感謝您!
uj5u.com熱心網友回復:
如果您可以控制其中的內容,page2.html即您擁有不是由訪問您的網頁的訪問者生成的靜態或動態資料,那么就不會有任何 XSS 攻擊問題。在這種情況下,您可以自信地使用innerHtml方法。
但是,如果內容中page2.html包含來自訪問者的資料(如評論、帖子等),則只有 XSS 攻擊的可能性。XSS 攻擊只不過是當您的用戶為了他們的利益而放置一些 JavaScript 代碼時。
例如,如果您的 page2.html 包含評論,我可以發表評論,例如Hello world! <script> alert("You have been hacked, transfer money to this bank to save your computer") </script>. 或者我可以將鏈接附加到另一個易受攻擊的腳本,該腳本會竊取您的用戶資料,例如 cookie 資料。
對于此類用例,請不要innerHtml 直接使用. 安全的解決方案是使用textContent或清理訪問者的資料(如上面提到的評論)(參考:https ://remarkablemark.org/blog/2019/11/29/javascript-sanitize-html/ )
uj5u.com熱心網友回復:
在此處嘗試以下代碼,您必須在獲取回應中呼叫.text()方法以獲取實際的 HTML 并使用Element.innerHTML
fetch('DataPage.html') .then((res) => res.text()) //here you have to change the response into html text .then(res => {document.querySelector("#target").innerHTML = res;})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450041.html
標籤:javascript html xss
