XSS(跨站脚本攻击)
原理:恶意攻击者往web页面里插入恶意的Script代码,当用户浏览该页面时,嵌入web里面的恶意Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。
XSS分为:存储型、反射型和DOM型
- 反射型XSS。又称非持久型XSS。之所以称为反射型XSS,是因为这种攻击方式的注入代码是从目标服务器通过错误的信息、搜索结果等等方式”反射”回来的:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。而称为非持久型XSS,则是因为这种攻击方式具有一次性,由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用。
- 存储型XSS。存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
- DOM型。客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、location.hash、location.search、document.referrer 等。DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
XSS的防御:
- 对用户的输入(和URL参数)进行过滤,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。
- CSP(Content Security Policy)内容安全策略,以限制页面上可以加载的资源和内容,从而防止跨站脚本攻击。在 HTTP 响应头中设置 CSP 策略,告知浏览器允许加载哪些内容,哪些不允许加载。
CSRF(Cross-site request forgery)跨站请求伪造

从上图能够看出,要完毕一次CSRF攻击,受害者必须依次完毕两个步骤:
- 登录受信任站点A,并在本地生成Cookie(目标站点一定要有 CSRF 漏洞;)
- 在不登出A的情况下,访问危险站点B
常见的攻击类型:
- GET类型的CSRF
- POST类型的CSRF,通常使用的是一个自动提交的表单。
- 未进行token校验
防御CSRF:
- 提交验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
- 验证请求的来源站点,origin、referer
- token验证,可以在表单内/请求头内。
csrf-token的理解:
- 第一步、在浏览器向服务器发起请求时,服务器生成一个 CSRF Token,前端保存起来。
- 第二步,在浏览器端如果要发起请求,那么需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法。如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求,服务器也会因为 CSRF Token 不正确而拒绝请求。