请教 ajax 怎么使用 CSRF?

2016-02-02 16:39:19 +08:00
 honmaple

按照文档上说的,我使用

var csrftoken = "{{ csrf_token() }}"
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
});
$('button#ajax').click(function() {
$.ajax ({
type : "POST",
url : "{{ url_for('index.login') }}",
data:JSON.stringify({
name: $('input[name="name"]').val(),
passwd: $('input[name="passwd"]').val()
}),
contentType: 'application/json;charset=UTF-8',
success: function(result) {
if (result.judge == true)
{
window.location = '/';
}
else
{
$("#showerror").show();
$("#error").text(result.error);
}
}
});
});

不知道这样行不行,如果使用了 ajax ,
janja2 模板中的

<form action="{{ url_for('index.login') }}" method="POST" >
{{ form.hidden_tag()}}
{{ form.name }}
{{ form.passwd }}
</form>

form 标签还需不需要?
环境:flask + flask_wtf + jquery
请教各位大神

2717 次点击
所在节点    Flask
4 条回复
ljcarsenal
2016-02-02 17:55:19 +08:00
form 表单提交会跳转页面 和 ajax 提交两种不同的方式。 csrf 是 web 漏洞,防止的方法是提交表单的时候提交一个随机的字符串,就像代码里 csrftoken 生成的一样。。
weaming
2016-02-03 15:05:05 +08:00
CSRF 跨站请求伪造

CORS 跨域资源共享
ruanyu1
2016-02-03 15:42:02 +08:00
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '<token here>'
}
});
honmaple
2016-02-10 01:21:46 +08:00
@ljcarsenal @weaming @ruanyu1 多谢回答,我按照文档设置了 ajaxSetup 后使用 form.validate_on_submit() 就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX