
跨站点脚本(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