问题标签 [csrf]
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.
javascript - CSRF 漏洞/cookie 问题
只是想从知道的人那里得到意见。我正在考虑 CSRF 漏洞,以及我所知道的最流行的对抗它的方法。该方法是在返回的 html 中创建一个令牌,并添加一个具有相同值的 cookie。因此,如果脚本尝试发布帖子,他们会希望have to guess the token thats embedded in the web page
它成功。
但是,如果他们针对的是特定网站,为什么他们不能只使用一个脚本
- 在页面上调用 get (即使脚本无法访问 cookie 也会返回)
- 解析 html 并获取令牌
- 调用包含该令牌的帖子(返回的 cookie 将被发回)
- 他们在用户不知情的情况下成功提交了表单
脚本不需要知道 cookie 的内容,它只是利用了 cookie 一直来回发送的事实。
我在这里想念什么?这不可能吗?如果你仔细想想,我认为这很可怕。
在此行下方不需要阅读即可回答问题:)
这个漏洞基于这样一个事实,即身份验证是基于 cookie 完成的,我认为这是当前进行身份验证的主要方式。
我能想到的另一个解决方案是在页面级别进行身份验证。因此,当他们登录时,返回的 html 中将包含该令牌。他们单击的每个链接都包含该令牌,因此当 Web 服务器收到请求时,它可以识别用户/会话。它的问题是,如果他们使用除此之外的任何导航,他们将是“未经身份验证”(例如输入 url),它在 url 中看起来也不好看,因为它可能看起来像这样:
https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3
但我确实明白,如果安全更重要,那么漂亮的 URL 就排在第二位。
我对cookies一无所知,但是如果用户代理对他们的cookies更加小心怎么办?
例如,如果发送的 cookie 取决于选项卡怎么办?我们现在都使用标签冲浪,对吧?那么如果 cookie 的范围是选项卡呢?因此,如果我在选项卡 1 上打开了我的银行网站并且我在选项卡 2 上冲浪,则在选项卡 2 上调用获取/发布的任何脚本都只会发送在选项卡 2 中累积的 cookie。
或者如果cookies被存储/域。因此,当我在 example.com 上时,任何返回的 cookie 都会进入 example.com cookie 集合。然后当我在 www.mybankingsite.com 上时,所有的 cookie 都会被放入 mybankingsite.com 集合中。因此,如果我访问 example.com 并运行一个调用 get/post 的脚本,用户代理将只发送 example.com cookie。这与发送请求域的 cookie 不同。例如,如果脚本在 example.com 的网页中调用 mybankingsite.com 的获取,则用户代理将不会发送 mybankingsite.com cookie。
我知道我无法控制用户代理的工作,但我只是在探索可能性
php - 如何为检查请求来源提供更多安全性
我正在开发一个 PHP Web 应用程序,我想为应用程序提供更高的安全性,以便没有人可以轻易破坏该功能。
关于我的问题的简要说明:在一个模块中,有一个阶段我正在检查请求的来源(该请求的来源)
目前,我正在使用HTTP_REFERRER
变量(在 php 中可用)。我正在使用一个特定的 URL(例如http://www.example.com/test.php)检查这个变量值。如果存在完全匹配,那么只有我在呼吁采取进一步行动。
我对上述方法有点困惑,我应该使用 HTTP_REFERRER 还是检查 IP 地址(如果请求来自任何特定的 IP 地址,则为有效请求)?
我还想知道提供安全性的更好方法。
有没有人有想法然后请分享?
提前致谢
django - SWFUpload 与 Django 1.2 csrf 问题
我正在尝试使用 SWFUpload 将文件上传到 Django。使用 SWFUpload找到这篇文章Django 。但是发现了一个问题。在 Django 1.2 中,csrf 需要在每次提交表单时发送一个 csrf 令牌,并且它包括使用 SWFUpload 发送的文件。因此,在我关闭 csrf 之前上传不会(全局或使用 @csrf_exempt 装饰器查看)。有没有比关闭csrf更好的方法来处理这个问题?
我知道我可以使用 SWFUpload post_params: {"csrfmiddlewaretoken" : ""}, 传递自定义数据。但我不知道如何在模板中仅获取 csrf 令牌的值,而不是完整的输入标签。
ruby-on-rails - 禁用 cookie 时处理 CSRF 保护
如果不启用 cookie,表单帖子将抛出ActionController::InvalidAuthenticityToken
. 在大多数情况下,我只是通过一条消息来处理异常,指出需要 cookie 才能登录我的应用程序。
但是,我的应用程序的用户可以做的一件事是创建要与其他人共享的内容,这些人可能登录也可能未登录(这不是必需的)。此外,如果创建者选择这样做,则此内容可以受密码保护。这是我遇到问题的地方。如果重要的话,我正在使用active_record_store
as my session_store
,并且还config.action_controller.session
设置了。
如果访问者在未启用 cookie 的情况下尝试解锁受密码保护的内容,应用程序将抛出异常,并从访问者的角度来看,崩溃。我希望能够处理这种情况,但我不知道该怎么做。我可以处理异常并允许在不检查 cookie 的情况下解锁内容,但如果我这样做,我可能不会保护针对 CSRF 的操作,因为无论如何我都会打开一个漏洞,对吗?或者,我可以要求启用 cookie 以便可以对表单进行身份验证,但在这种情况下确实没有理由需要 cookie。
如果我理解正确,如果我禁用该操作的保护,我只会将解锁受保护的内容暴露给 CSRF 漏洞,但如果无论如何都没有启用 cookie,这有关系吗?有没有办法在处理缺少 cookie 时进行保护?
python - django中的csrf错误
我想为我的网站实现登录。我基本上将 Django Book 中的以下内容复制并粘贴在一起。但是,在提交我的注册表单时,我仍然收到错误消息(CSRF 验证失败。请求中止。)。有人能告诉我是什么引发了这个错误以及如何解决它吗?
这是我的代码:
视图.py:
注册.html:
python - 为不总是有响应的视图禁用 Django CSRF
我有一个 Django 视图,它接收不需要 CSRF 令牌的 POST。因此我@csrf_exempt
在视图上使用了装饰器。问题是有时我不会从视图中发出响应(它是一个 Twitter 机器人,它为每条推文接收一个 HTTP POST,我不想回复每条推文)。当我不发出响应时,我收到以下错误:
resp (我假设是响应)是 None 因为视图是用 just 退出的return
。如何避免此错误并且在 POST 中仍然不需要 CSRF 令牌。
谢谢!
django - 如何将 django csrf 令牌直接嵌入 HTML?
在我的 django 应用程序中,我将 html 字符串存储在数据库中,然后将其作为“消息”显示在用户的主页上。其中一些消息包含表单,但不是用模板语言编写的,我无法插入 csrf 令牌(从而破坏了应用程序)。
有没有办法直接从我正在编辑的 python 文件中插入这个令牌?我正在寻找类似的东西:
在类似情况下工作的任何其他解决方案都会很棒。谢谢
编辑: 实际上这行不通,因为每个会话的令牌都不同,因此将其存储在数据库中并不是很有用。有没有办法在视图中动态加载令牌?
php - X-Requested-With 标头服务器检查是否足以防止 ajax 驱动的应用程序的 CSRF?
我正在开发一个完全由 ajax 驱动的应用程序,其中所有请求都通过基本上相当于一个主控制器的东西,它的基本结构看起来像这样:
这通常足以防止跨站点请求伪造吗?
当每个请求都没有刷新整个页面时,拥有一个旋转令牌是相当不方便的。
我想我可以通过每个请求将唯一令牌作为全局 javascript 变量传递和更新——但不知何故,这感觉很笨拙,而且无论如何似乎天生就不安全。
编辑 - 也许像用户的 UUID 这样的静态令牌总比没有好?
编辑#2 - 正如The Rook指出的那样,这可能是一个令人毛骨悚然的问题。我已经阅读了两种方式的猜测,并听到了关于旧版本的闪存可用于这种恶作剧的传言。由于我对此一无所知,因此我悬赏任何能够解释这是 CSRF 风险的人。否则,我会把它交给Artefacto。谢谢。
javascript - CSRF 攻击是否可以通过任何直接方式访问或操纵其目标站点的 javascript 变量?
如果 ajax 驱动的站点使用存储为 javascript 变量的唯一令牌并在每个请求中验证它以防止 CSRF,它是否会打开任何攻击向量——前提是该站点没有 XSS 漏洞?
iis - ColdFusion - 预防 - 跨站点请求伪造 (CSRF)
我有兴趣了解如何在我的 ColdFusion 9 应用程序中防止跨站点请求伪造 (CSRF)。我在网上找到了一些教程,但似乎没有一个是全面的。我发现的最好的是:http ://www.mollerus.net/tom/blog/2009/01/an_easy_block_for_crosssite_request_forgeries_csrf.html 但这不是一个非常全面或清晰的例子。
任何可用于防止 CSRF 的教程、示例或指针?
谢谢!