【问题标题】:Is CSRF a threat if not using cookies?如果不使用 cookie,CSRF 会构成威胁吗?
【发布时间】:2016-01-09 05:51:40
【问题描述】:

我的 Flask 应用程序是 AJAX-heavy,但不使用任何 cookie。 CSRF 仍然是一种威胁,还是现在可以安全地部署该应用程序?

我已经看过这个SO question,但我的情况略有不同,因为我不必担心用户的凭据。

我尝试从Chrome DevTools(使用$.ajax())向我在localhostFlask 开发服务器)上运行的服务器发起AJAX 调用,但出现错误提示

XMLHttpRequest 无法加载 http://localhost:5000/_ajax。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'chrome://newtab' 不允许访问。

这是否意味着我是安全的,或者黑客是否有可能绕过这个并仍然对我的服务器进行AJAX 调用?

【问题讨论】:

  • 如果您的网站上没有需要保护的内容,则不需要 csrf 保护

标签: ajax security flask xmlhttprequest csrf


【解决方案1】:

CSRF 不仅仅是针对 CORS AJAX 的保护。我可以在我的网站上制作一个表格,并将操作设置为http://yoursite.com/account/delete。如果用户提交我的表单,而您的站点上没有 CSRF,则该操作将成功。或者,如果您对 GET 请求有任何更改(无论如何都不应该这样做),我可以将其添加到我的网站:

<img src="http://yoursite.com/account/delete" />

当我的页面加载时,该操作就会发生。

查看 Flask-WTF 或这个 sn-p:http://flask.pocoo.org/snippets/3/

编辑

来自您的评论:

将该页面的操作更改为 POST,并通过表单而不是链接访问它。如果您的链接是:

<a href="{{ url_for('my_page') }}">Click Here</>

您的表单可能是(使用您需要的 Flask-WTF):

<form action="{{ url_for('my_page') }}" method="POST">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <input type="submit" value="Click Here" />
</form>

【讨论】:

  • 您所说的“GET 请求发生变化”是什么意思?另外,除了我的一个AJAX 调用之外的所有调用都检索非敏感数据,另一个向用户发送下载,所以还有风险吗?
  • 如果您在加载页面而不是提交表单时更改用户数据。
  • 这方面的一个例子是转到某个删除您的用户帐户的页面吗?另外,我有一个页面,在访问时会对数据库进行一些更改,然后返回一些数据(我从数据库中删除无效值,然后返回数据)。这可以算作不该做什么的一个例子吗?
  • 明白了。感谢您的帮助。
猜你喜欢
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多