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. spring boot集成mybatis(1)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. POJ 2346:Lucky tickets

    Lucky tickets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3247   Accepted: 2136 Des ...

  3. 【Java Spring 进阶之路 】1.Spring 是什么?

  4. 【pwnable.kr】bof

    pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Runnin ...

  5. MyBatis:一对多、多对一处理

    多对一的处理 多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 数据库设计 CREATE TABLE `teacher` ( `id` INT( ...

  6. POJ - 3659 Cell Phone Network(树形dp---树的最小点支配集)

    题意:有N个点,N-1条边,任意两点可达,由此形成了一棵树.选取一个点a,它可覆盖自己以及与自己相邻的点,选取尽量少的点a,使得树中所有点都被覆盖,即求树的最小点支配集. 分析: 1.对于每一个点cu ...

  7. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

      5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...

  8. 使用html画爱心

    <!DOCTYPE html"> <html> <head> <meta http-equiv="Content-Type" c ...

  9. Arduino学习——u8glib提供的字体样式

    Fonts, Capital A Height4 Pixel Height  U8glib Font FontStruct5 Pixel Height  04 Font 04 Font 04 Font ...

  10. aliyun服务器lamp配置

    1.安装Apache:yum install httpd 2.安装php: yum install php 3.安装mysql客户端:yum install mysql 4.安装mysql服务端:yu ...