..
Web安全问题
XSS攻击与防御
Cross Site Scripting,跨站脚本攻击。简单点讲就是让目标网站在渲染的时候执行你注入的JS脚本。目标网站需要你(用户)提供提供的一段内容——可以通过提交数据、URL参数两种方式,然后根据这段内容进行渲染、或执行一定的逻辑,顺带把你的恶意代码给执行了。
应对的方式是那句万变不离的老话:不要相信“用户”的输入!具体的措施挺繁琐的,见此文章。
我觉得构建XSS防御体系的关键在于如何“无痕”处理,即防御XSS的逻辑不要混入到业务逻辑当中,我觉得可以采用拦截器、装饰器之类的手段来处理。
CSRF攻击与防御
Cross Site Request Forgery,跨站请求伪造。必须说明的是,这种攻击是针对浏览器环境下的,而不是API环境。简而言之,它是利用浏览器可以通过 src属性
、form 表单发起跨域的 GET、POST 请求,这类跨域请求会直接带上目标域下的Cookie信息,这意味着攻击者伪造出来的请求将带有用户的验证信息。
比如,你在某个网站只是点了一下"播放"按钮,但是实际却触发了你网银的转账请求。把钱转到了攻击者账号下。
如何防御?大概有两个思路
- 尽可能的甄别出这是一个伪造的跨站请求;
- 对于重要的操作,需要用户进行验证。最简单就是验证码、严格一点的是输入密码、两步验证等措施。
对于前一种,主要思路是根据 src
发起的 GET 请求,以及 表单发起的 GET/POST 请求的特点,进行防御:
- 因为 CSRF 的请求无法自定义 header,所以通过加一个自定义 header,没带这个 header 的请求视为CSRF攻击请求。不过这个方法已经失效了,见这篇文章
- 服务端渲染页面的时候下发一个 token,让发送请求的时候,带上这个 token。放在哪里都可以。