从Java的角度修复CSRF漏洞
漏洞挖掘中,说实话挖过最多的漏洞就属CSRF漏洞了,提交CSRF漏洞很多次,绕过CSRF防御进行攻击也有很多次。CSRF漏洞是一个很容易引发的问题,今天我从Java的角度来说下这个安全漏洞的修复方案。
这里不谈挖掘方式,只谈修复方案。
很多时候你很熟悉一种安全漏洞,但是涉及到的修复方案你只能大概讲下,具体到代码层你就束手无策了,这不是个优秀的白帽子行为。
CSRF一般有两种修复方案
1.加随机性token或者是sign (足够随机,不可解密)
2.验证Referer!
今晚我的修复方案从2.验证Referer说起,很多时候修复referer是可以被绕过的,有三种绕过方案:
1.Referer为空
2.通过伪造域名绕过 example:1.目标地址.随机字符.com 2.目标地址.com.随机字符.com 3.自定义域名地址/目标地址.com
3.利用@绕过,听说过但没遇到过
这里从Java的角度浅谈CSRF漏洞的修复,其实解决Referer就能彻底的根治CSRF漏洞,但是很多时候由于开发的疏忽往往Referer过滤不严就能绕过,这里我写了一个验证Referer的方案,仅作为自己学习Java一些记录吧:
首先随便准备一个简单的视图页面:
test.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/WEB15/referer">点我,看看能不能防止referer</a>
</body>
</html>
未写功能点就是测试下安全问题的解决方案:
修复方案:
refererServlet.java
package referer; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class RefererServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String header = request.getHeader("Referer");
//String domainName = null;
String[] domain = { "localhost", "test.localhost", "admin.localhost" };
boolean key=false;
for (int i = 0; i < domain.length; i++) {
if (header != null && header.startsWith("http://" + domain[i]) && header.endsWith(domain[i])) {
key=true;
}
}
if(key==true) {
response.getWriter().write("成功读到打到数据");
}else{
response.getWriter().write("非法请求");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
String[] domain = { referer可接受的信任域名 };
我们来使用Burp测试绕过看看能否绕过:
输入正常的程序指定的referer地址正常:

正常

正常

尝试绕过Referer进行攻击
使用绕过方案1发现无法绕过

使用绕过方案2发现无法绕过

使用绕过方案3发现无法绕过

那么此次CSRF的修复还是比较完整的用这种方式!
不忘初心,方得始终。
从Java的角度修复CSRF漏洞的更多相关文章
- 从Java的角度修复文件下载漏洞
从Java的角度谈下文件下载漏洞的产生,然后到他的修复方案.这里我的修复方案是白名单,而没有采用黑名单的方式. 首先先看一段存在文件下载漏洞的代码code: HTML视图页面 download.ht ...
- phpMyAdmin 4.7.x CSRF 漏洞利用
作者:Ambulong phpMyAdmin是个知名MySQL/MariaDB在线管理工具,phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击 ...
- 【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- CSRF漏洞原理说明与利用方法
翻译者:Fireweed 原文链接:http://seclab.stanford.edu/websec/ 一 .什么是CSRF Cross-Site Request Forgery(CSRF),中文一 ...
- CSRF漏洞详细说明
CSRF漏洞详细说明 通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证HTTP请求的Referer,还有验证XMLHttpRequests里的自定义header.鉴于种种原因,这 ...
- php代码审计7审计csrf漏洞
跨站请求伪造,也有人写出xsrf,黑客伪造用户的http请求,然后将http请求发送给存在csrf的网站,网站执行了伪造的http请求,就引发了跨站请求伪造 漏洞危害:攻击者盗用了你的身份信息,以你的 ...
- CSRF漏洞原理
跨站脚本伪造 用户与服务器端已进行了身份认证,站点已经对用户生成的session,完全信任了,然后此时黑客通过社工发过来一个不友好的链接, 让用户点击请求此站点,站点完全信任这个请求,按照黑客的这个请 ...
- DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞
DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞 1.漏洞利用 由于tpl.php中的$action,$content,$filename变量没有初始化,从而能操纵这些变量 ...
- 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs
[前端神秘的面纱] 对后端开发来说,前端是神秘的, 眼花缭乱的技术,繁多的框架, 如果你还停留在前端等于只用jquery做开发,那么你out了, 本文从Java的角度简述下目前前端流行的一些框架. 水 ...
随机推荐
- React Native之微信分享(iOS Android)
React Native之微信分享(iOS Android) 在使用React Native开发项目的时候,基本都会使用到微信好友或者微信朋友圈分享功能吧,那么今天我就带大家实现以下RN微信好友以及朋 ...
- [转帖]国产紫光SSD不再只是实验室展品 开始批量出货
国产紫光SSD不再只是实验室展品 开始批量出货 https://www.cnbeta.com/articles/tech/825865.htm 没听说有做HDD的 现做了SSD 弯道超车吗 可以实现全 ...
- 6s ios9.0平台 微信小程序的fixed定位兼容性问题
如果不设置top和left的话 就会出现不显示问题
- elasticsearch介绍,安装,安装错误解决及相应插件安装
一.elasticsearch介绍 1.简介(使用的是nosql,更新比mongodb慢): ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎, ...
- django_filter,Search_Filter,Order_Filter,分页
一.分页drf配置信息: 1.在Lib\site-packages\rest_framework\settings.py中查看: 2.简单分页在项目setting中配置:(所有get请求返回数据每页5 ...
- 每日一小时linux(1)--sysRq
参考https://www.ibm.com/developerworks/cn/linux/l-cn-sysrq/index.html SysRq 是什么 你是否遇到服务器不能通过 SSH 登录,也不 ...
- linux上如何让other用户访问没有other权限的目录
目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办 ...
- JQ查找到带有某个字符,并起类名,然后替换这个某个字符
<script> setTimeout("asdasd()",1000); //定时器是为了防止其他JS影响到它,可以不加 function asdasd() { $( ...
- easyui combobox 在datagrid中动态加载数据
场景:datagrid 中用编辑框修改数据,有一个列使用的combobox 在可编辑的时候需要动态绑定数据,这个数据是在根据其他条件可变的 思路:在每次开启编辑框的时候动态绑定数据, datagri ...
- Process 模块的方法
join from multiprocessing import Process import time, os def task(name): print('%s is running' % nam ...