honmaple
V2EX  ›  Flask

请教 ajax 怎么使用 CSRF?

  •  
  •   honmaple · Feb 2, 2016 · 3376 views
    This topic created in 3829 days ago, the information mentioned may be changed or developed.

    按照文档上说的,我使用

    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 replies    2016-02-10 01:21:46 +08:00
    ljcarsenal
        1
    ljcarsenal  
       Feb 2, 2016
    form 表单提交会跳转页面 和 ajax 提交两种不同的方式。 csrf 是 web 漏洞,防止的方法是提交表单的时候提交一个随机的字符串,就像代码里 csrftoken 生成的一样。。
    weaming
        2
    weaming  
       Feb 3, 2016
    CSRF 跨站请求伪造

    CORS 跨域资源共享
    ruanyu1
        3
    ruanyu1  
       Feb 3, 2016
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': '<token here>'
    }
    });
    honmaple
        4
    honmaple  
    OP
       Feb 10, 2016 via Android
    @ljcarsenal @weaming @ruanyu1 多谢回答,我按照文档设置了 ajaxSetup 后使用 form.validate_on_submit() 就行了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    ♥ Do have faith in what you're doing.