CSRF
(Cross-site request forgery
):跨站请求伪造。
方法一、Token 验证:(用的最多)
-
服务器发送给客户端一个
token
; -
客户端提交的表单中带着这个
token
。 -
如果这个
token
不合法,那么服务器拒绝这个请求。
方法二:隐藏令牌:
把 token
隐藏在 http
的 head
头中。
方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别。
方法三、Referer 验证:
Referer
指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截
XSS(Cross Site Scripting)``:跨域脚本攻击。
1. 编码:
对用户输入的数据进行HTML Entity
编码。
如上图所示,把字符转换成 转义字符。
Encode的作用是将
$var`等一些字符进行转化,使得浏览器在最终输出结果上是一样的。
比如说这段代码:
<script>alert(1)</script>
若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入。进行编码处理之后,L在浏览器中的显示结果就是
<script>alert(1)</script>
,实现了将`$var
作为纯文本进行输出,且不引起JavaScript
的执行。
2、过滤:
-
移除用户输入的和事件相关的属性。如
onerror
可以自动触发攻击,还有onclick
等。(总而言是,过滤掉一些不安全的内容) -
移除用户输入的
Style
节点、Script
节点、Iframe
节点。(尤其是Script
节点,它可是支持跨域的呀,一定要移除)。
3、校正
-
避免直接对
HTML Entity
进行解码。 -
使用
DOM Parse
转换,校正不配对的DOM
标签。
备注:我们应该去了解一下DOM Parse
这个概念,它的作用是把文本解析成DOM
结构。
比较常用的做法是,通过第一步的编码转成文本,然后第三步转成DOM
对象,然后经过第二步的过滤。