如何解决跨站点请求伪造
IBM appscan扫描漏洞--跨站点请求伪造
appscan修订建议:
如果要避免 CSRF 攻击,每个请求都应该包含唯一标识,它是攻击者所无法猜测的参数。 建议的选项之一是添加取自会话 cookie
的会话标识,使它成为一个参数。服务器必须检查这个参数是否符合会话 cookie,若不符合,便废弃请求。 攻击者无法猜测这个参数的原因是应用于 cookie
的“同源策略”,因此,攻击者无法伪造一个虚假的请求,让服务器误以为真。 攻击者难以猜测且无法访问的任何秘密(也就是无法从其他域访问),都可用来替换会话标识。
这可以防止攻击者设计看似有效的请求。
比较容易想到的有下面两种思路:
方案一:每个请求都带上一个由服务器生成的随机参数。然后在服务器端和对该参数,如果和下发的随机数不同,则可以认为有人在伪造请求。因为攻击者无法知道他本次攻击的http请求需要带什么样的随机数才是有效的。
方案二:跨域伪造之所以能成功,主要决定因素是攻击者的页面和稍候被打开的目标页面共享session信息。受害者登录后,攻击者的页面通过ajax向被 攻击网站的关键业务发起的请求便自动带上了合法的session信息。但是,根据javascript的同源策略可知,挂有A域名的窗口,不能获取挂有B 域名窗口中的任何信息,不管B是如何被打开的。据此,我们可以在客户端的每个要保护的业务链接上增加一个参数sessionId,这个参数可以通过js从 cookie中获得。然后,在服务器端获取此参数,并同真正的sessionId做对比,如果不同,则认为请求是伪造的。因为攻击者的窗口无法从被攻击网 站的窗口中取得这个sessionId。
方案二的实现: 定义一个过滤器, 对页面传递过来的sessionid和实际sessionid进行比较, 相同则通过
1. 定义过滤器
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.xxx.common.security.auth.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/login.do</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletrequest;
HttpServletResponse response = (HttpServletResponse) servletresponse;
String clientSessionId = servletrequest.getParameter("ssid");
String serverSessionId = request.getSession().getId();
if (serverSessionId.equals(clientSessionId)) {
filterchain.doFilter(request, response);
} else {
response.sendRedirect("/common/dataError");
}
}
2. 请求时增加sessionid参数
<input type=hidden id="ssid" name="ssid" value="<%=request.getSession().getId()%>">
相关推荐
Tomcat怎样防止跨站请求伪造(CSRF) 1
配套博客:https://blog.csdn.net/qq_41739364/article/details/96846943
一个php做的简单的银行管理系统,利用cookie值来达到跨站伪造请求的目的,最终造成银行账户余额被修改。
Ajax与跨站点请求伪造漏洞,近日,我们的网站请微软的工程师作了一次漏洞扫描,扫描结果中有两个“跨站点请求伪造漏洞”。通过查资料,我做了一番研究,包括此漏洞的入侵条件,被攻击后的损失以及防范措施等。
CSRF跨站请求伪造,使用OWASP CSRFTester工具可以抓取并伪造请求,其测试原理是,使用代理抓取我们在浏览器中访问过的所有的连接以及所有的表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一...
NULL 博文链接:https://justcoding.iteye.com/blog/1164749
压缩包内分为笔记部分和环境搭建部分: 笔记部分:CSRF介绍、Cookie机制、检测CSRF漏洞存在、CSRF防御 环境搭建部分:bank文件夹中存放笔记中网站搭建源码、构造的get、post页面源码。 解压密码:456.com
gorilla / csrf gorilla / csrf是一个HTTP中间件库,它提供跨站点请求伪造(CSRF)保护。 它包括:csrf.Protect中间件/处理程序在连接到路由器大猩猩/ csrf的路由上提供CSRF保护。gorilla / csrf是一个HTTP中间件库...
mod_csrf 是 Apache Web 服务器的模块。 它可以防止对易受攻击的 HTML 表单进行跨站点请求伪造攻击。
CSRF跨站点请求伪造(Cross—Site Request Forgery)。 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,...
Cross-SiteRequestForgery(CSRF),中文一般译作跨站请求伪造。经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三。与前两者相比,CSRF相对来说受到的关注要小很多,但是危害却非常大。...
为了防止这种情况,此模块使用的技术类似于CSRF ,并且依赖于浏览器的以下两个限制: 跨站点脚本无法读取/修改Cookie。 跨站点脚本无法设置标题。 依赖于以下事实:cookie中的唯一令牌必须与隐藏在表单提交字段中的...
烧瓶-xsrf 扩展,通过为每个请求使用唯一生成的令牌来保护flask请求端点,从而防御跨站点请求伪造攻击 。 烧瓶PYTHON X射线荧光光谱仪 建立状态分支服务地位服务标题地位master ci-build github tags develop ci-...
跨站请求伪造CSRF简介 第7章 Web应用安全 目标 Objectives 要求 了解跨站请求伪造CSRF的基本概念; 了解跨站请求伪造CSRF的攻击原理; 跨站请求伪造CSRF简介 一、跨站请求伪造CSRF简介 跨站请求伪造(Cross-site ...
本文档概述了在Rails内置的跨站点请求伪造预防机制中发现的问题,并包含可缓解上述问题的反CSRF解决方案的设计规范。 动机 在调查CSRF令牌相关的错误时,我们发现Rails中实现的CSRF预防机制存在一些问题。 Rails ...
主要跨站点请求伪造审核和利用工具包。 关于: XSRFProbe是高级的(CSRF / XSRF)审核和利用工具包。 配备了功能强大的搜寻引擎和许多系统的检查功能,它能够检测大多数CSRF漏洞,其相关的绕过情况,并进一步针对每...
防跨站伪造测试代码,全套代码,保证实现源码
安全组件-CSRF 安全CSRF(跨站点请求伪造)组件提供了一个CsrfTokenManager类,用于生成和验证CSRF令牌。 资源资源 并在
SecureNodeJSSite ... 登录区域,跨站点请求伪造,加密密码,登录计时器,使用monogdb 为npm installer创建json文件,创建一个空白的新数据库,看看是否有一种方法可以包含所有链接或文件,以便稍后运行