1

我正在尝试合并 CSRFGuard 库以纠正应用程序中的一些 CSRF 漏洞。但是,按照此处指定的配置后,当我导航应用程序时,我现在在日志中收到以下消息:

WARNING: potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:169.xx.x.xxx, uri:/myapp/MyAction, error:request token does not match session token)

通过包括:

<script src="/sui/JavaScriptServlet"></script>

在我的main.jsp页面上,链接都是建立的CSRFGuard token,例如

......./myapp/MyAction?CSRFTOKEN=BNY8-3H84-6SRR-RJXM-KMCH-KLLD-1W45-M18N

所以我无法理解我做错了什么,这可能导致链接传递的令牌不是预期值。

请让我知道是否有任何其他信息会使它更容易理解。

4

3 回答 3

1

如果有人偶然发现类似的问题:

事实证明,使用 IE 访问应用程序并没有将令牌传递给 AJAX 调用,这反过来会导致令牌被刷新,但已呈现页面中的链接仍然存在,导致单击时不匹配。

通过自己从源代码构建 CSRFGuard 并添加额外的日志记录来发现问题。

于 2013-07-01T23:31:36.603 回答
0

primefaces commandlink 和 commandbutton 似乎会导致 csrfguard javascript 发生故障,如果您使用这两个组件并将 ajax 设置为 true(这是默认设置),它可以防止在 ajax 调用后注入令牌

于 2015-04-15T14:02:34.050 回答
-1

一种可能的修复方法是更改​​ Owasp.CsrfGuard.js 文件中的以下 2 行。

改变

 function injectTokenForm(form, tokenName, tokenValue, pageTokens) {
    var action = form.attribute("action");

 function injectTokenForm(form, tokenName, tokenValue, pageTokens) {
    var action = form.attributes["action"].value;

改变

 function injectTokenAttribute(element, attr, tokenName, tokenValue, pageTokens) {

    location = element.getAttribute(attr);

 function injectTokenAttribute(element, attr, tokenName, tokenValue, pageTokens) {
    var location = null;
    if (attr == "action") {
        location = element.attributes[attr].value;

    } else {
        location = element.getAttribute(attr);
    }
于 2013-07-09T15:45:06.310 回答