如果不使用 cookie,CSRF 是否构成威胁?
Is CSRF a threat if not using cookies?
我的 Flask
应用 AJAX
很重,但不使用任何 cookie。 CSRF
仍然是威胁还是现在部署该应用程序是否安全?
我已经看过这个 SO question 但我的情况略有不同,因为我不必担心用户的凭据。
我尝试从 Chrome DevTools
(使用 $.ajax()
)向我的服务器发起 AJAX
调用,该服务器是 localhost
上的 运行(Flask
开发服务器),我收到一条错误消息
XMLHttpRequest cannot load http://localhost:5000/_ajax. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome://newtab' is therefore not allowed access.
这是否意味着我是安全的,或者黑客是否有可能绕过这一点并仍然对我的服务器进行 AJAX
调用?
CSRF 不仅仅是针对 CORS AJAX 的保护。我可以在我的网站上制作一个表格,并将操作设置为 http://yoursite.com/account/delete。如果用户提交我的表单,而您的网站上没有 CSRF,则该操作将成功。或者,如果您对 GET 请求进行了更改(无论如何都不应该这样做),我可以将其添加到我的网站:
<img src="http://yoursite.com/account/delete" />
并且该操作将在我的页面加载时发生。
查看 Flask-WTF 或此代码段:http://flask.pocoo.org/snippets/3/
编辑
来自您的评论:
将该页面的操作更改为 POST,并通过表单而不是 link 访问它。如果您的 link 是:
<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>
我的 Flask
应用 AJAX
很重,但不使用任何 cookie。 CSRF
仍然是威胁还是现在部署该应用程序是否安全?
我已经看过这个 SO question 但我的情况略有不同,因为我不必担心用户的凭据。
我尝试从 Chrome DevTools
(使用 $.ajax()
)向我的服务器发起 AJAX
调用,该服务器是 localhost
上的 运行(Flask
开发服务器),我收到一条错误消息
XMLHttpRequest cannot load http://localhost:5000/_ajax. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome://newtab' is therefore not allowed access.
这是否意味着我是安全的,或者黑客是否有可能绕过这一点并仍然对我的服务器进行 AJAX
调用?
CSRF 不仅仅是针对 CORS AJAX 的保护。我可以在我的网站上制作一个表格,并将操作设置为 http://yoursite.com/account/delete。如果用户提交我的表单,而您的网站上没有 CSRF,则该操作将成功。或者,如果您对 GET 请求进行了更改(无论如何都不应该这样做),我可以将其添加到我的网站:
<img src="http://yoursite.com/account/delete" />
并且该操作将在我的页面加载时发生。
查看 Flask-WTF 或此代码段:http://flask.pocoo.org/snippets/3/
编辑
来自您的评论:
将该页面的操作更改为 POST,并通过表单而不是 link 访问它。如果您的 link 是:
<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>