zoukankan      html  css  js  c++  java
  • Django中csrf错误

    CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

    尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

    与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

    Django 中自带了 防止CSRF攻击的功能,但是一些新手不知道如何使用,给自己编程带来了麻烦。

    GET 请求不需要 CSRF 认证,POST 请求需要正确认证才能得到正确的返回结果。一般在POST表单中加入 {% csrf_token %}

    <form method="POST" action="/post-url/">
        {% csrf_token %}
         
        <input name='lh' value="提交">
    </form>

    如果使用Ajax调用的时候,就要麻烦一些。(一般错误显示为403错误)

    需要在模板文件中添加以下内容:

    <script src="/static/js/jquery.cookie.js"></script>   #需要引用jquery.cookie.js(自己下载),下面要调用cookie
    
    <script>
    //ajax csrf设置
      var csrftoken = $.cookie('csrftoken');
      function csrfSafeMethod(method) {
         // these HTTP methods do not require CSRF protection
          return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
       }
    $.ajaxSetup({ beforeSend: function(xhr, settings) {   
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {   xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); </script>
  • 相关阅读:
    CMS4.0——后知后觉
    《Mysql 入门很简单》(读后感②)
    《Mysql 入门很简单》(读后感①)
    Mysql 入门
    jQuery ajax中serialize()方法增加其他参数
    简单语法
    音频——H5 audio
    js 中的break continue return
    vue再次入手(数据传递②)
    vue再次入手(数据传递①)
  • 原文地址:https://www.cnblogs.com/MacoLee/p/5888624.html
Copyright © 2011-2022 走看看