V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honmaple
V2EX  ›  Flask

请教 ajax 怎么使用 CSRF?

  •  
  •   honmaple · 2016-02-02 16:39:19 +08:00 · 2751 次点击
    这是一个创建于 3250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    按照文档上说的,我使用

    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
    请教各位大神

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

    CORS 跨域资源共享
    ruanyu1
        3
    ruanyu1  
       2016-02-03 15:42:02 +08:00
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': '<token here>'
    }
    });
    honmaple
        4
    honmaple  
    OP
       2016-02-10 01:21:46 +08:00 via Android
    @ljcarsenal @weaming @ruanyu1 多谢回答,我按照文档设置了 ajaxSetup 后使用 form.validate_on_submit() 就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:00 · PVG 23:00 · LAX 07:00 · JFK 10:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.