问题标签 [csrf-protection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
588 浏览

ruby-on-rails - Rails form_authenticity_token 与参数不匹配 [:authenticity_token]

在什么情况下 form_authenticity_token 与 params[:authenticity_token] 不匹配?

我看到未经验证的请求进入我的应用程序,因此我覆盖了 form_tag 以打印出一些调试信息。

我得到的输出显示会话具有与 form_auth_token 匹配的正确令牌,但提交的参数authentity_token 不匹配:

我认为根据定义 params[:authenticity_token] 将与 form_authenticity_token 相同。

  1. 我是否以错误的方式调试?
  2. 这可能是什么原因造成的?
0 投票
0 回答
713 浏览

symfony1 - Symfony 1.4 CSRF TOKEN 对 AJAX 表单的保护

我有一个 AJAX 表单,我希望在提交时受到 CSRF TOKEN 的保护。

我的问题是,如何在我的操作中验证它?

我可以通过我的 AJAX 调用成功发送它,但问题是在我的操作中验证它。

我知道

不起作用,因为它用于 link_to 功能。

有没有办法让我在我的行动中验证它?

任何建议将不胜感激。

谢谢!

0 投票
3 回答
9952 浏览

csrf - CSRFGuard - 请求令牌与会话令牌不匹配

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

通过包括:

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

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

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

0 投票
0 回答
60 浏览

jsonp - JSONP能绕过CSRF吗

我对 CSRF 保护非常陌生,所以如果我做出错误的假设或遗漏了什么,请原谅,但我想确保我正在尽我所能来防止 CSRF。从我到目前为止的研究中,我发现了以下内容:

  1. CSRF 可以通过在所有 HTML POST 的请求正文中放置一个 nonce 参数来阻止(并且可能是最好的阻止),使用 POST 修改数据,并在服务器端验证令牌在处理请求之前是否有效。
  2. 恶意网站可以向我的网站发送请求(被随机数阻止),但由于浏览器上的同源策略,它们无法读取响应。假设有人使用安全浏览器,恶意站点无法使用 AJAX 从我的站点获取页面、读取随机数并将其用于自己。
  3. 在大多数(可能是任何)浏览器中,脚本标签不受同源策略的约束,因此可以允许从其他站点读取内容。

当我到达第 3 点时,我决定尝试使用 JSONP 在 Chrome 中获取 HTML 内容;我打开了我的控制台(页面不是来自本地主机)并运行以下代码:

我在控制台窗口中收到的是:

资源解释为脚本,但使用 MIME 类型 text/html 传输

据我所知,浏览器本质上是在告诉我它收到了内容,继续解析响应,但由于类型不是 application/json 而停止。所以最后,我的问题是,这可以妥协吗?尽管浏览器未能将响应解析为 JSON,但它确实有响应。有没有办法可以将此响应解析为 HTML,获取我的 CSRF 随机数,并破坏我试图强制执行的保护?在我看来(我希望这是真的)浏览器不允许这样做,就像他们首先不允许跨域请求进行基本上所有其他通信一样,这就是我们作为开发人员所依赖的(除了同源政策)来保护我们的网站。我的想法正确吗?

0 投票
3 回答
700 浏览

csrf - 使用 cookie 的 CSRF 令牌保护

将 csrf 令牌保存在 cookie 中是一种好习惯,还是在表单中使用隐藏字段更好?像验证码所做的那样,在每个用户请求中重新生成 csrf 令牌也很好吗?

谢谢

0 投票
1 回答
1080 浏览

google-chrome-extension - 浏览器扩展中的 CSRF 保护

我需要为我的网站实施 CSRF 保护。所以我开始为我网站上的所有表单实现这个,但是我在浏览器扩展(Chrome、Safari、Firefox)中实现它时遇到了问题。我不知道如何为我的扩展(表单和 ajax 帖子)中的帖子执行此操作。有没有人实施过这个?

0 投票
2 回答
487 浏览

django - 由于 CSRF,无法 jQuery $.post 数据到 django 中的视图

在发布此之前,我已经尝试了在线发布的所有解决方案方法,包括 Stackoverflow 和 Django 上的解决方案。(我认为错误的原因可能是由于我使用的是较新的 jQuery 和 django 版本,并且大多数解决方案都已过时,使用 jQuery 1.9 和 django 1.5.1)

以下是一些不起作用的解决方案的 URL:

Django CSRF 检查因 Ajax POST 请求而失败

如何在 django 中使用 $.post?

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

任何帮助,将不胜感激。错误的另一种可能性是我实际上不确定将这些片段准确放置在哪里。到目前为止,我已经在文档加载时粘贴了 jquery 中的所有内容,我还尝试将代码粘贴到 .js 文件的开头。(我的 javascript 代码是分段的,有些是单独的 .js 文件,有些是与 django 上下文呈现的 html 内联的,所以任何带有“{{ csrftoken }}”的解决方案都是不好的。

谢谢!!

0 投票
2 回答
346 浏览

php - 唯一的表单令牌为用户禁用多任务处理

如果我想保护我的站点和用户免受跨站点伪造 (CSRF) 攻击,我可以$token = md5( time() * rand );在每个具有表单的页面上生成一个唯一令牌。令牌在隐藏的输入字段中提交,echo '<input type="hidden" name="token" value="'.$token.'">';同时存储在会话变量$_SESSION['token'] = $token;中。

我将检查是否有任何提交的表格if($_POST['token'] == $_SESSION['token'])并相应地进行。

但是,有些用户可能会同时执行多项任务。这是我现在实际上正在做的事情,而我正在发布这个。

在撰写我的帖子时,我打开不同的窗口/选项卡以可能研究信息或查看有关堆栈溢出的其他一些问题。堆栈溢出让我可以毫无问题地提交表单。

但是,如果我要在我的网站上这样做——这意味着在撰写帖子/表单的同时浏览其他页面——$token每次我从我的网站上拉出不同的页面时,我都会重新生成。input在我正在处理的表单上制作隐藏令牌并最终想要提交不正确的,因为它不再匹配$_SESSION['token']变量,当我访问不同的页面时它已经重新生成......

有什么好的想法可以防止这个问题,或者有什么更好的解决方案来阻止 CSRF?

我想让我的用户执行多项任务并希望受到 CSRF 的保护......

0 投票
1 回答
3256 浏览

zend-framework2 - Zend 框架 2 - csrf 在刷新时重新生成

Zend Framework 2 formElement csrf 有问题。

它工作正常,直到我提交无效表单,点击同一页面然后刷新页面。字段上出现“notTheSame”验证错误,并显示消息“提交的表单不是来自预期的站点” 。这是正确的,因为如果我检查 csrf 字段的值,它与提交之前的值不同。

在我决定添加 csrf 字段之前,表单运行良好。

我正在创建我的 csrf 字段,如下所示:

在视图文件中:

(FormErrors 是一个视图助手,用于检索表单消息并设置它们的样式)

在我的控制器中:

我想我的问题是,为什么我的 csrf 会在我回到表单页面后重新生成,因为表单无效?

PS:我在这篇文章Zend Framework 2 CSRF Protection中找不到我的解决方案

0 投票
1 回答
1638 浏览

ruby-on-rails - 如何在 public/index.html 文件中生成 <%= csrf_meta_tags %>

我在前端使用 Backbone,在后端使用 Ruby on Rails。我设计了 gem,用于我的身份验证。几天前,前端团队完成了他们的部分工作,现在我需要将它们绑定在一起。因此,我尝试使用 json 槽骨干(标准方式)通过 request 发送数据,即使我放入自定义会话控制器,我也会Started POST "/users/sign_in.json"收到错误消息。像这样:Completed 401 Unauthorized in 180msprotect_from_forgery except: :create

如何省略这个,或者我必须在哪里生成我的<%= csrf_meta_tags %>,以便我可以使用我在网上找到的这种方法:

我无法将其移回标准 Rails 资产管道,因为前端是与我的后端分开编写的,后端依赖于 require.js。