跨站點腳本(XSS)攻擊
例如:
//HTML<form><input id="query-input" type='TEXT' name="query"><button type="submit">Click me</button></form><div id="query-output"></div>//JavaScriptif (document.readyState == 'loading') { document.addEventListener('DOMContentLoaded', ready)} else { ready()}function ready() { var query = new URL(window.location).searchParams.get('query') document.getElementById('query-input').value = query document.getElementById('query-output').innerHTML = query}
<img src onerror =「 console.log(document.cookie)」>
http:// localhost / page?query = <img src onerror =「 console.log(document.cookie)」>
預防
-
到達時過濾輸入-每當你從用戶那裏獲得輸入時,都應根據預期或有效輸入儘量嚴格地過濾輸入。 -
使用適當的響應標頭-爲了防止HTTP響應中不包含任何HTML或JavaScript的XSS,可使用Content-Type和X-Content-Type-Options標頭來確保瀏覽器按照您指望的方式解釋響應。 -
輸出時對數據進行編碼-當在HTTP響應中輸出用戶輸入的數據時,請對輸出進行編碼,以防止將其識別爲活動內容。 -
內容安全策略(CSP)-若是實施正確的CSP規則集,則能夠阻止瀏覽器執行嵌入式 JavaScript,eval(),setTimeout()或來自不受信任URL的任何JavaScript之類的操做。
跨站請求僞造(CSRF)攻擊
例如:
GET http://www.bank.com/transfer.php?acct=PersonB&amount=100¤cy=USD
-
登陸銀行帳戶 -
輸入詳細信息,而後單擊轉移
當黑客進入現場時,黑客會建立一個看起來很是有用但有隱藏議程的網站。假設它是一個博客網站。當用戶添加新博客帖子時,惡意應用程序將執行隱藏代碼,該代碼會將GET請求發送到銀行網站。爲了使這種黑客成功,用戶應該登陸到他的銀行賬戶-會話令牌應該就位。
GET http://www.bank.com/transfer.php?acct=Hacker&amount=100¤cy=USD
<body onload="document.forms[0].submit()"> <form action="http://www.bank.com/transfer.php" method="POST"> <input type="hidden" name="acct" value="Hacker"/> <input type="hidden" name="amount" value="100"/> <input type="hidden" name="currency" value="USD"/> <input type="submit" value="View my pictures!"/> </form></body>
預防
-
始終對會話cookie使用SameSite Cookie屬性 -
引薦來源標頭或來源必須通過驗證 -
考慮爲高度敏感的操做實施基於用戶交互的保護-基於用戶交互的保護包括從新認證(密碼或更強),一次性令牌,CAPTCHA。若是正確實施,這些能夠充當強大的CSRF防護。
OWASP CheatSheet
OWASP Web Goat
博客,做者Rachit Agarwal
本文分享自微信公衆號 - web前端開發(web_qdkf)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。javascript