我们正试图通过使用CSRFGuard将CSRF保护添加到现有的java web应用程序中。我们遵循了OWASP的令牌注入指南,这让我们走了大部分路。我们使用的是动态DOM操作方法,发现大多数URL/forms/AJAX调用都使用插入的CSRF令牌正确格式化。我们的问题是:
某些页面的一部分是由返回jspfs的AJAX调用动态生成的。返回的jspfs具有从不受CSRFGuard DOM操纵的链接,因此没有CSRF令牌。单击这些链接会导致CSRF冲突,因为不存在令牌。
此外,根据AJAX支持的OWASP指南,需要在AJAX调用之前引用动态脚本,以便可以拦截AJAX调用并将CSRF令牌插入到头中。这与动态更新DOM的脚本相同。所以,为了解决这个问题,我需要在AJAX调用之后运行脚本,但我也需要在AJAX调用之前运行脚本,以便首先运行脚本。尝试运行两次会导致问题。
这里的正确解决方案是什么?是否需要修改CSRFGuard javascript文件,以便可以针对目标元素运行动态令牌注入?这个问题已经解决了吗?
注意:此答案需要修改CSRFGuard。
我正在使用SkateJS(https://github.com/skatejs/skatejs)要监视的动态更新,请执行以下操作:
这将捕获javascript工具包在初始DOM加载后插入的标记。
我还必须修改脚本,防止它在加载时总是扫描整个DOM树以插入令牌。这是非常低效的,使用上述方法是不必要的。
下面是SkateJS配置的示例:
window.addEventListener('load',
function() {
var config = {
ready : function(element) {
if (CsrfGuard && CsrfGuard.isEnabled) {
CsrfGuard.injectTokens([element]);
} else {
skate.destroy();
}
},
type : skate.types.TAG
};
skate('a', config);
skate('img', config);
skate('form', config);
}
);
注意:这在IE8上不起作用。为此,我正在使用Microsoft DHTML行为。
<![if IE 8]>
<style>
a,img,form {
behavior: url("csrf_ie8.htc");
}
</style>
<![endif]>
csrf_ie8。宏达电:
<public:attach event="ondocumentready" onevent="CsrfGuard.injectTokens([element]);" />
我也有同样的问题。我修改了csrfguard。这样做:
>
我定义了2个新函数
function getTokenNameValuePair() {
var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest : new window.ActiveXObject("Microsoft.XMLHTTP");
var csrfToken = {};
xhr.open("POST", "%SERVLET_PATH%", false);
xhr.setRequestHeader("FETCH-CSRF-TOKEN", "1");
xhr.send(null);
return xhr.responseText;
}
function injectTokensForNewTags() {
var token_pair = getTokenNameValuePair();
token_pair = token_pair.split(":");
var token_name = token_pair[0];
var token_value = token_pair[1];
injectTokens(token_name, token_value);
}
返回带有链接的HTML块的AJAX应该如下所示:
$.post(loadurl, function(data) {
$(target).html(data);
injectTokensForNewTags();
});
> 我正在使用OWASP CSRFGuard 3.0保护这些Restful服务不受CSRF的影响。 当使用简单的超文本标记语言访问相同的Rest服务时-AJAX请求-CSRF令牌正在设置,我得到了响应: 下面的代码工作正常。 角度代码(我对角度代码非常陌生) 有人能建议我如何设置角形标记吗。 引自: 在寻找此问题的解决方案时,请阅读以下语句。 跨站请求伪造(XSRF)保护XSRF是一种技术,通过这
问题内容: 在Cakephp3中,启用Csrf组件时。我如何在ajax调用中使用它。在ajax的此参数中,csrf令牌设置在标头中。什么是价值。由于它给出了错误 未定义csrfToken 另外,如何为某些ajax调用禁用Csrf组件。 问题答案: CSRF组件将当前令牌写入,作为请求参数,您可以通过request objects 方法(或从CakePHP 3.4开始)获取它: 可以通过从控制器事件
我想允许用户重置他们的密码。为了做到这一点,我首先检查他们的电子邮件是否存在于数据库中,如果存在,我向他们发送一封电子邮件,其中包含指向重置密码页面的链接。为了确保链接是安全的,后者是用jwt令牌制作的,该令牌仅对15mn有效。 但是,无法访问该url,因为有“.”在jwt中: < code > http://www . myapp . com/reset-password/eyjhbgcioin
问题内容: 我正在使用ajax发布一些数据。我想处理该数据并返回到调用jQuery脚本。 这是我的jQuery: 这是我在服务器上的somescript.php: 我在服务器端是否正确执行此操作?ajax调用完成后如何访问返回字符串? 问题答案: 我想到了。需要在PHP中使用echo而不是return。 和jQ:
问题内容: 我正在尝试在我的项目中实现csrf保护,但无法使其与jQuery Ajax一起使用。(不过,它适用于普通的帖子请求) 如果在发送表单之前使用chrome开发工具篡改令牌,则仍会看到“正在处理数据”文本,而不是错误。 app.js send.jade test.js 问题答案: 在有效负载消息中发送CSRF令牌: 为了简化您的工作,我认为您可以创建一个Jquery插件来执行此操作,如下所
我想从Stormpath帖子中对JWT令牌和CSRF提出疑问,这些令牌和CSRF解释了将JWT存储在localStorage或Cookie中的优缺点。 [...] 如果您使用JS从cookie中读取值,这意味着您不能在cookie上设置Httponly标志,因此现在站点上的任何JS都可以读取它,从而使其与在localStorage中存储内容的安全级别完全相同。 我试图理解为什么他们建议将xsrfT