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. Java中定义常量(Constant) 的几种方法

    为了方便大家交流Spark大数据,浪尖建了微信群,目前人数过多,只能通过浪尖或者在群里的朋友拉入群.纯技术交流,偶有吹水,但是打广告,不提醒,直接踢出.有兴趣加浪尖微信. 常量使用目的 1,为什么要将 ...

  2. mysql 手动把字段设置为null

    在根据经纬度计算距离的时候,发现有的视频点距离我当前位置的距离计算出来的为0,有的距离计算出来是几千公里,仔细看下数据库,发现了问题所在 计算出来几千公里的视屏点的经纬度是空不是null,然后我们手动 ...

  3. (二分查找)LowerBound

    在包含size个元素的,从小到大顺序的int数组a里查找比给定整数p小的,下标最大的元素,找不到返回-1 题解: int LowerBound(int a[],int size,int p) { in ...

  4. 十三、CI框架之数据库插入操作

    一.CI的数据库插入代码如下: 二.数据库原数据如下: 三.访问网站之后,会显示相关输出 四.我们查看数据库,会增加一条数据 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意 ...

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

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

  6. spring boot 生命周期初探

    1.MytestApplication package com.gomepay; import org.springframework.boot.Banner; import org.springfr ...

  7. part12 非核心代码异步加载

    router文件中的 index component: ()=> import(‘path’) // 这样 访问一个页面 就只请求这个页面的js逻辑 //当app很小的的时候不需要做异步拆分 / ...

  8. POJ 1836:Alignment

    Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14492   Accepted: 4698 Descri ...

  9. Java 语言特性【一】——JUC(Java 并发工具包)

    引言 JUC即java.util.concurrent,是java提供的用于多线程处理的工具类库.重点关注 ConcurrentXXX.AtomicXXX.Executor.Caller&&a ...

  10. CTF -攻防世界-web高手区-ics-06

    打开网址 根据题意点开报表中心(因为其他的点开都一样,不信你试试) 会看见id =1 想到burp爆破id 所以打开burp抓包(不会抓包的百度 或者看我web新手区,有一题就有抓包 我说的很详细) ...