带你了解CSRF和XSS(二)
什么是CSRF?
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。
CSRF攻击的本质原因:
CSRF攻击是源于Web的隐式身份验证机制!Web的身份验证机制大致就是说为了防止用户每次发送请求的时候都需要登录,在进行一次登录验证通过后,之后发向该域名的请求都会自动带上cookie。虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。CSRF攻击的一般是由服务端解决,而XSS主要是由客户端解决。
CSRF攻击的原理:
1. 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A。
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器。
3. 用户在未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B。
4. 网站B接收到用户请求后,发出一个访问网站A的请求。
5. 浏览器根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户的Cookie信息处理该请求,达到模拟用户操作的目的。
tips:Session Cookie(在浏览器关闭后,就会失效,保存到内存)
Third-party Cookie(关闭浏览器后,不会失效,保存到本地)
常见的CSRF攻击:
Get请求,操作数据库内容
比如网站A的修改密码接口是GET方式,通过调用api/ChangePassword?psw=123就可以进行密码的修改,所以在开发的过程中如果涉及到数据改动都建议采用POST请求隐藏表单提交POST请求
单纯的POST当然也是能伪造的,JS利用form表单可以跨域请求的特性的提交POST请求仍然能够产生CSRF攻击。如果网站A有使用Flash,并将跨域策略文件中的allow-access-from domain设置为素有,也是有可能产生CSRF攻击的。
XSRF
通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF,用XSS的方式实现伪造请求,比如网站A存在XSS漏洞,被注入恶意代码后,当有用户访问到有恶意代码的网页的时候,就会发送一条类似转账,关注啊之类的请求,做到XSRF攻击。
看完这几种攻击方式,大概应该能辨别什么时候是CSRF攻击了,简单说就是只要发起了冒牌请求那么就算是CSRF(XSRF)
顺便再总结下XSS和CSRF的其他区别,面试官可能会问到哦~
区别一,发生位置
XSS:发生在客户端
CSRF:发生在服务端
区别二,原理
XSS:注入代码,执行代码,篡改内容
CSRF:携带Cookie模拟请求
区别三,根源
XSS:同源策略机制
CSRF:Web隐式身份验证机制
区别四,就Cookie而言
XSS:盗取Cookie来干坏事
CSRF:借用Cookie来干坏事
最后还是要说下如何防范CSRF攻击
一、Referer(记录 HTTP 请求的来源地址) Check
好处是只需要增加一个拦截器来检查 Referer ,用于过滤非该服务器域名的地址,不需要改变当前系统的任何已有代码和逻辑,非常快捷。
但是,Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,不是很靠谱,并且一些低版本的浏览器像IE6等有方法对Referer 进行篡改。还有重要的一点是,用户可以设置浏览器不携带 Referer字段。
二、验证码
强制用户必须与应用进行交互,才能完成最终请求。在通常情况下,验证码能很好遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。
三、Token
在 HTTP 请求中以参数的形式添加一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,假设请求中没有 token 或者 token 内容不对,则觉得可能是 CSRF 攻击而拒绝该请求。并且涉及数据库操作的接口使用POST,因为GET不好加Token,会暴露Token的保密性。
关于Token
Token 应该保存到 local / session stograge(不会跨域工作) 或者 cookies
Tokens 除了像 cookie 一样有有效期,还要提供过期重新获取、强制刷新、撤回等操作
有需要的话,要加密并且签名 token
将 JSON Web Tokens(JWT) 应用到 OAuth 2
四、HTTP 头中自定义属性并验证
类似方法三,只不过不是以参数形式,而是请求头字段携带Token信息。但是要把所有请求都改为 XMLHttpRequest 请求。
至此,有关XSS和CSRF的内容都讲解完毕了,感谢大家抽空阅读。
带你了解CSRF和XSS(二)的更多相关文章
- 带你了解CSRF和XSS(一)
浏览器的同源策略限制了一些跨域行为,但仍有些特例(img.iframe.script标签)不受跨域限制,这就给XSS攻击创造了机会(这完全不是同源策略的锅,一定是程序员的锅). 在讲下面的内容前,还是 ...
- 面试 07-安全问题:CSRF和XSS
07-安全问题:CSRF和XSS #前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念.攻击方式.防御措施 XSS:基本概念.攻击方式.防御措施 这两个问题,一般不会问太难. 有人问: ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- 前端安全问题之CSRF和XSS
一.CSRF 1.什么是 CSRF CSRF(全称 Cross-site request forgery),即跨站请求伪造 2.攻击原理 用户登录A网站,并生成 Cookie,在不登出的情况下访问危险 ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- CSRF和XSS
XSS(跨站脚本攻击): 攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击 XSS是什么?它的全名是:Cross-site scriptin ...
- 【转】带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
原文网址:http://blog.csdn.net/harvic880925/article/details/40475367 前言:前一篇文章给大家展示了传统的Listview的写法,但有的时候我们 ...
- 常见的 CSRF、XSS、sql注入、DDOS流量攻击
CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性 攻击者一般会使用吸引人的图片去引导用户点击进 ...
- web安全CSRF和XSS
web端的安全攻击有CSRF和XSS两种,将通过以下三个方面介绍这两种安全攻击: 1.基本概念和缩写 2.攻击原理 3.防御措施 CSRF 1.基本概念和缩写 CSRF(Cross-site req ...
随机推荐
- openresty + lua 3、openresty http 调用
http 的话,openresty 已经集成,ng 的话,自己引入即可. github 地址:https://github.com/pintsized/lua-resty-http github 里提 ...
- 11.DataGrid分页
前台页面: 后台程序:
- spfa负环判断
正常spfa中加入time数组,循环判断一个点是否入队并更新了n次以上注意是 > n!!其余的没有什么问题 扩展的还有,寻找所有负环上的点,这个可以在spfa中time 发现负环的时候,对那个点 ...
- [au3]复制选择性粘贴文本到excel
案例:在一张网页上有许多你要复制的内容,但是你必须一个一个找到他们,然后一个一个复制出来粘贴到excel表格里.时间一长你的眼睛容易花,而且复制多了容易出错. 方法:当然有许多方法可以自动化的做这一件 ...
- bootstrap 图片切换
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- [php-cookie] cookie 请求跨域,如何共享
cookie 请求跨域的问题, 假设我有两个域名,一个 m.example.com,另一个是 www.example.com . 那么我需要如何设置 cookie 才可以在这两个域名都实现共享呢? / ...
- UvaOJ 10167
暴力搜索 #include<cstdio> struct node { int x; int y; }s[]; int main() { //freopen("input.txt ...
- SQL关闭自增长列标识:SET IDENTITY_INSERT
关闭自增长列添加记录,然后再恢复自增长功能 SET IDENTITY_INSERT 表名 ON; inert ,); SET IDENTITY_INSERT 表名 OFF
- mongdb window 服务安装批处理
安装mongodb 3.x 安装完毕后 将以下代码保存为批处理 然后用管理员权限执行就可以成功安装服务了 cd C:\Program Files\MongoDB\Server\3.0\binmongo ...
- 浏览器环境下Javascript脚本加载与执行探析之DOMContentLoaded
在”浏览器环境下Javascript脚本加载与执行探析“系列文章的前几篇,分别针对浏览器环境下JavaScript加载与执行相关的知识点或者属性进行了探究,感兴趣的同学可以先行阅读前几篇文章,了解相关 ...