一、XSS(跨站脚本攻击)
xss:跨站脚本攻击(Cross Site Scripting)是最常见和基本的攻击 WEB 网站方法,指浏览器中执行恶意脚本, 然后拿到用户的信息进行操作。
1、常见的攻击方式
- 在输入框输入恶意代码(例如评论)
- 劫持用户的cookie
2、防御方式
- httpOnly: 在 cookie 中设置 HttpOnly 属性后,js脚本将无法读取到 cookie 信息。
- 输入检查,一般是用于对于输入格式的检查,例如:邮箱,电话号码,用户名,密码……等,按照规定的格式输入。
- 将(<、>)这些字符进行编码转换。
二、CSRF(跨站点请求伪造)
csrf:跨站点请求伪造(Cross-Site Request Forgeries),也被称为 one-click attack 或者 session riding。
指的是黑客诱导用户点击链接,打开黑客的网站,然后黑客利用用户目前的登录状态发起跨站请求, 完成一些违背用户意愿的事情(如修改用户信息,删初评论等)。
1、常见的攻击方式
- 利用已通过认证的用户权限更新设定信息等;
- 利用已通过认证的用户权限购买商品;
- 利用已通过的用户权限在留言板上发表言论。
2、防御方式
- 验证码;强制用户必须与应用进行交互,才能完成最终请求。此种方式能很好的遏制 csrf,但是用户体验比较差。
- 利用 Cookie 的 SameSite 属性。
- Referer check;请求来源限制,此种方法成本最低,但是并不能保证 100% 有效,因为服务器并不是什么时候都能取到 Referer,而且低版本的浏览器存在伪造 Referer 的风险。
- token;token 验证的 CSRF 防御机制是公认最合适的方案。
三、XSS与CSRF的区别
- 通常来说 CSRF 是由 XSS 实现的,CSRF 时常也被称为 XSRF(CSRF 实现的方式还可以是直接通过命令行发起请求等)。
- 本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题。XSS 是内容没有过滤导致浏览器将攻击者的输入当代码执行。CSRF 则是因为浏览器在发送 HTTP 请求时候自动带上 cookie,而一般网站的 session 都存在 cookie里面。