1.CSRF(cross-site request forgery),跨站请求伪装
顾名思义,用户角度,访问成功并且登录成功我们的网站,没有推出情况下,又访问了病毒网站,于是病毒网站通过用户端,拿着用户的缓存请求我们的网站(尤其是些增删改查的致命操作),于是乎,成功影响了我们的网站,web-died。

登录成功(未退出)
User(A)----------------------->WEB(B)
| | -------------------->
| | 反向通过用户A,请求B网站
| <----------------------------
| |
| |
| 访问 |
-------------------------->WEB(C)病毒网站
确认的一点为:用户能发送请求,携带用户A的cookie数据,但是获取不到。
解决方式:
1.通过生成token值
在用户登录成功网站,会缓存token值存在cookie中,用户下一次的请求,需要携带token值与本地cookie中token值进行比对,如果不通过,则认为是攻击。
2.隐藏令牌
生成的token值,存入http的请求中。
3.Referer认证
Referer是指页面请求验证的意思,如果不是从该页面请求而来,则拒绝访问。

Java代码实现方式:
public class CSRFInterceptor implements Interceptor {

public static final String CSRF_ATTR_KEY = "CSRF_TOKEN";
public static final String CSRF_KEY = "csrf_token";

@Override
public void intercept(Invocation inv) {

//不是 do 开头的,让其通过
//在JPress里有一个共识:只要是 增、删、改的操作,都会用do开头对方法进行命名
if (inv.getMethodName().startsWith("do") == false) {
renderNormal(inv);
return;
}

//从cookie中读取token,因为 第三方网站 无法修改 和 获得 cookie
//所以从cookie获取存储的token是安全的
String cookieToken = inv.getController().getCookie(CSRF_KEY);
if (StrUtil.isBlank(cookieToken)) {
renderBad(inv);
return;
}

//url参数里的csrf_token
String paraToken = inv.getController().getPara(CSRF_KEY);
if (StrUtil.isBlank(paraToken)) {
renderBad(inv);
return;
}

if (cookieToken.equals(paraToken) == false) {
renderBad(inv);
return;
}

renderNormal(inv);
}

private void renderNormal(Invocation inv) {
// 不是 ajax 请求,才需要重置本地 的token
// ajax 请求,需要保证之前的token可以继续使用
if (RequestUtil.isAjaxRequest(inv.getController().getRequest()) == false) {
String uuid = StrUtil.uuid();
inv.getController().setCookie(CSRF_KEY, uuid, -1);
inv.getController().setAttr(CSRF_ATTR_KEY, uuid);
}

inv.invoke();
}

private void renderBad(Invocation inv) {
if (RequestUtil.isAjaxRequest(inv.getController().getRequest())) {
inv.getController().renderJson(Ret.fail().set("message", "bad or mission token!"));
} else {
inv.getController().renderError(403, new TextRender("bad or missing token!"));
}
}

}

CSRF(cross-site request forgery),跨站请求伪装的更多相关文章

  1. CSRF(Cross Site Request Forgery, 跨站请求伪造)

    一.CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患, ...

  2. 转: CSRF(Cross Site Request Forgery 跨站域请求伪造) 背景与介绍

    from:  https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/   在 IBM Bluemix 云平台上开发并部署您的下一个应用 ...

  3. CSRF(Cross Site Request Forgery, 跨站域请求伪造)

    CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...

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

    CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 ...

  5. Cross-site request forgery 跨站请求伪造

    Cross-site request forgery 跨站请求伪造 简称为CSRF或者XSRF,通过伪装来自受信任用户的请求来利用受信任的网站 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来 ...

  6. 浅谈CSRF(Cross-site request forgery)跨站请求伪造

    本文目录 CSRF是什么 CSRF攻击原理 CSRF攻击防范 CSRF是什么 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack” ...

  7. CSRF Cross-site request forgery 跨站请求伪造

    跨站请求伪造目标站---无知用户---恶意站 http://fallensnow-jack.blogspot.com/2011/08/webgoat-csrf.html https://wiki.ca ...

  8. CSRF Laravel Cross Site Request Forgery protection¶

    Laravel 使得防止应用 遭到跨站请求伪造攻击变得简单. Laravel 自动为每一个被应用管理的有效用户会话生成一个 CSRF "令牌",该令牌用于验证授权用 户和发起请求者 ...

  9. Django:CSRF(Cross-request forgery)跨站请求伪造

    一.CSRF是什么 二.CSRF攻击原理 三.CSRF攻击防范 一.CSRF是什么 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Atta ...

  10. WebGoat学习——跨站请求伪造(Cross Site Request Forgery (CSRF))

    跨站请求伪造(Cross Site Request Forgery (CSRF)) 跨站请求伪造(Cross Site Request Forgery (CSRF))也被称为:one click at ...

随机推荐

  1. linux crash工具安装配置

    crash简介 crash是redhat的工程师开发的,主要用来离线分析linux内核转存文件,它整合了gdb工具,功能非常强大.可以查看堆栈,dmesg日志,内核数据结构,反汇编等等.crash支持 ...

  2. P 1016 部分A+B

    转跳点:

  3. jQuery琐碎

    函数(以click事件为例)在jsp页面和js中的不同写法 onclick="getInfo(this);" function getInfo(obj){ var $this=$( ...

  4. BZOJ:2243: [SDOI2011]染色

    题解: 树剖,线段树维护区间颜色段数 记录两端点的颜色,做到O(1)合并 问题: 非递归建树实现 #include<iostream> #include<cstdio> #in ...

  5. 剑指offer_1.19_Day_3

    替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. Javascript_V8 f ...

  6. javascript面向对象编程的3种常见封装形式解析

    javascript如何才能脱离函数式编程,拥抱面向对象编程呢,常见的有3种形式,其它形式可以说都是这3种的变种.   1.直接定义对象直接量的形式   var Util={     getType: ...

  7. 用UICollectionView实现上下轮播的案例

    // //  RecommendNewsCell.swift //  XMLYFM // //  Created by Domo on 2018/8/2. //  Copyright © 2018年 ...

  8. Swift - UISplitViewController

    https://blog.csdn.net/weixin_43704791/article/details/86424080 2019年01月13日 AppDelegate中: func applic ...

  9. part8 vue内置标签keep-alive对网页性能优化

    我们网页请求时候 我们点击路由切换 可以看network中数据请求 因为每次路由切换都会执行mounted钩子函数 我们这个函数中数据请求 //每次切换路由,页面都会重新渲染 在根组件中使用 路由切换 ...

  10. POJ 1006:Biorhythms 中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 121194   Accepted: 38157 Des ...