一、概述
1、XSS
跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为 XSS。
XSS 是一种在 Web 应用中的计算机安全漏洞,它允许恶意的 web 用户将代码植入到提供给其他用户使用的页面中。
能够被 XSS 攻击,需要满足以下条件:
- 需要向web页面注入恶意代码;
- 这些恶意代码能够被浏览器成功执行。
比如:“留言”功能——将通过表单输入的内容提交给服务器,服务器将输入的内容存储在数据库并返回到页面中——
恶意者就可以通过带有 href、src 属性的标签来添加一些恶意的JavaScript脚本——这个脚本会自动执行或者点击触发,这样当前用户的cookie信息就被发送到指定的服务器中,cookie就会被窃取泄露。
如何防御呢?
前端处理:可以在submit提交事件中针对表单中所有input的value值判断是否有script或者JavaScript这样的字符串(转换为小写字母后判断),如果有就要替换这个文本,然后再发送数据。
服务器处理:获取表单中所有input的value值判断是否有script或者JavaScript这样的字符串(转换为小写字母后判断),如果有就要替换这个文本,然后再返回数据。
目前,Chrome 浏览器实现了自动屏蔽 XSS 攻击。
2、CSRF
跨站请求伪造(CSRF)是一种冒充受信任用户,向服务器发送非预期请求的攻击方式。
例如,这些非预期请求可能是通过在跳转链接后的 URL 中加入恶意参数来完成:
<img src="https://www.example.com/index.php?action=delete&id=123">
对于在权限的 https://www.example.com 用户,这个 <img> 标签会在他们根本注意不到的情况下对 https://www.example.com 执行这个操作,即使这个标签根本不在 https://www.example.com 内亦可。
如何防御呢?
前端处理:
- 验证 HTTP Referer 字段;
- 在请求地址中添加 token 并验证;
- 在 HTTP 头中自定义属性并验证。
无论使用何种方法,在服务器端的拦截器必不可少,它将负责检查到来的请求是否符合要求,然后视结果而决定是否继续请求或者丢弃。
3、XSS 和 CSRF 的区别
- XSS:用户过分信任网站,放任来自浏览器地址栏代表的那个网站代码在自己本地任意执行。如果没有浏览器的安全机制限制,XSS 代码可以在用户浏览器为所欲为。
- CSRF:网站过分信任用户,放任来自所谓通过访问控制机制的代表合法用户的请求执行网站的某个特定功能。
二、学习资源
浅谈XSS攻击的那些事(附常用绕过姿势):浅谈XSS攻击的那些事(附常用绕过姿势) - 知乎
XSS攻击进阶篇——那些年我们看不懂的XSS:【干货分享】XSS攻击进阶篇——那些年我们看不懂的XSS – 绿盟科技技术博客
CSRF 攻击的应对之道:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/index.html