XSS攻击与CSRF攻击比较

XSS:Cross Site Scripting,跨站脚本攻击

原理:

网站webA的授信用户userA,利用网站合法接口输入或提交非法数据,而影响网站其他用户。
比如网站webA有允许用户评论的入口,正常用户发布的评论可能是“我是评论!”,而userA发的评论是“点我进入大保健”。
网页显示评论的代码可能是这样的"

用户的评论

",网页在加载userA的评论时就会是“

点我进入大保健

”,相当于在评论中插入了一个非法链接,网站其他用户加载评论时都将看到这个非法链接。
除了插入非法链接之外,userA甚至还可以插入script脚本,脚本可做的事情就更多了,修改dom、自动跳转页面、非法提交表单等等。

预防:

要预防跨站脚本攻击其实比较简单,就是不信任任何用户的输入,对用户输入进行过滤转义等。
比如对上面例子中的“点我进入大保健”进行转义之后就变成了“点我进入大保健”,这样其他用户看到的就不再是一个跳转链接了。

CSRF:Cross Site Request Forgery, 跨站域请求伪造

原理:

通过伪装来自受信任用户的请求来利用受信任的网站。
通俗的说就是攻击者利用了你的身份,发送了恶意请求。就好比黑客盗用了你的qq然后假装是你,骗你朋友要钱。


如上图所示,用户先登录网站A,然后访问恶意站点B,用户在恶意站点B中点击了一个链接,这个链接跳转回A网站的同时发送了一个恶意get请求,类似“http://weba.com/comment?comment=这个评论是webB伪造的”。除了get请求外,webB也可以伪造post请求。

预防:

验证Referer

webB伪造webA的请求时,Referer是webB,webA发现referer非法的时候就可以拒绝这个请求。

token校验

比如用户在访问webA时,会生成一个随机的token,以后每次访问webA时都带上token,服务端校验token是否合法。因为token具有随机性,所以webB就不能用普适的方法来伪造webA的请求。
token有各种实现方式,可以放在请求参数中也可以放在请求头中。

你可能感兴趣的:(XSS攻击与CSRF攻击比较)