我的Flask
应用为AJAX
- 重,但不使用任何Cookie。 CSRF
仍然是威胁,或者现在部署应用程序是否安全?
我已经看过这个SO question,但我的情况略有不同,因为我不必担心用户的凭据。
我尝试了AJAX
来自Chrome DevTools
的呼叫(使用$.ajax()
)到我在localhost
(Flask
开发服务器)上运行的服务器,我得到了错误说
XMLHttpRequest无法加载http://localhost:5000/_ajax。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许对“chrome:// newtab”进行访问。
这是否意味着我是安全的,或者黑客是否可能绕过这个并仍然对我的服务器进行AJAX
次呼叫?
答案 0 :(得分:0)
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,并通过表单而不是链接访问该页面。如果您的链接是:
<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>