`
lanceverw
  • 浏览: 44833 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Django跨站伪造请求保护措施设置方法

阅读更多

在django建站中遇到post提交表单提示403错误, 发现以Post方式提交表单会触发django内置的csrf保护机制,并且在403页面给出了解决方法,根据提示更改后发现问题依旧,网上查阅很多同学的解决方案均不能解决这个问题,所以到官网上查阅了关于csrf部分的具体设置,最后成功解决了这个问题。

 

官方csrf部分设置翻译:

CSRF设置步骤:

第一步: 在settings.py中的MIDDLEWARE_CLASSES部分添加'django.middleware.csrf.CsrfViewMiddleware',如果使用普通方式创建的django项目,这一项一般都已经存在了不用额外设置。

 如果你不希望加入csrf的中间件,那么可以在views中的方法上加上csrf_protect()装饰器方法,这一步不是必须设置的,网上很多有很多人都在启用了中间件的同时也加上了csrf_protect()方法,导致问题依旧,官方文档上明确写到了这一步是【Alternatively】

 

第二步:在POST表单的template中加入csrf_token。这一步很简单,在模板中添加如下代码:

<form action="." method="post">{% csrf_token %}

 需要注意的一点是,表单提交路径是如果是外部链接则不需要添加csrf token。

 

第三步:在请求处理方法中添加context processor。

这一步有两种方式实现:

  方法1:使用RequestContext,RequestContext始终都使用了'django.core.context_processors.csrf'。 If you are using generic views or contrib apps, you are covered already, since these apps use RequestContext throughout.(这一段还没搞明白,大致意思猜想是普通views或内置的contrib下的应用时,那么已经使用了这种方式来处理csrf请求了,不需要额外处理了)

  方法2:手动添加csrf处理(我使用的这一种能成功访问)。示例代码如下:

from django.core.context_processors import csrf
from django.shortcuts import render_to_response

def my_view(request):
    c = {}
    c.update(csrf(request))
    # ... view code here
    return render_to_response("a_template.html", c)

    在第一次按照自己的设想将如上代码加入到view中时,发现问题依旧,后来将前两行代码放置在方法开始位置后,成功解决问题,由此推测该示例代码的前两行只能放在第一次使用request对象之前。

 

django中使用Ajax请求的CSRF设置:

将官方文档上的ajax设置照搬下来:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    crossDomain: false, // obviates need for sameOrigin test
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type)) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

 这里使用的是jQuery,于是可以使用jQuery来正常发送ajax请求,如:

$(document).ready(function(){
        $("#postBtn").click(function(){
            $.post('/ajax/aPost/', {id:'0001'}, function(data){
                 alert(data);
            })
        });
    }
);

 get请求就不赘述了,同理,本文主要问题在于设置csrf说明,使用django版本为1.4.3,jQuery版本为1.8.0

0
1
分享到:
评论

相关推荐

    Django CSRF跨站请求伪造防护过程解析

    通过理解Django的CSRF防护机制,开发者可以更好地保护其Web应用免受跨站请求伪造的攻击,确保用户数据的安全。在开发过程中,始终遵循最佳安全实践,定期审计和测试应用的防护措施,是保障Web应用安全的重要环节。

    Django中如何防范CSRF跨站点请求伪造攻击的实现

    ### Django中如何防范CSRF跨站点请求伪造攻击的实现 #### CSRF概念 CSRF(Cross-Site Request Forgery,跨站请求伪造),是一种常见的安全攻击手段。在这种攻击中,攻击者利用受害者的身份(通常是通过受害者已...

    CSRF跨站请求伪造CSRF PHP demo代码

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱导用户在已登录的网站上执行非预期的操作。在这个PHP demo中,我们将深入理解CSRF攻击的原理,并探讨如何防范。 首先,让我们看...

    Django框架 Django 2.1.7

    Django重视安全性,内置了防止XSS、CSRF(跨站请求伪造)等攻击的防护措施,还提供了安全的密码存储和管理。 9. **性能优化** Django 2.1.7在性能方面进行了优化,包括更高效的查询执行、缓存策略改进等,使得...

    Django -1.11.6下载

    1.11.6版本中,中间件系统已经相当成熟,可以用来实现如日志记录、会话管理、跨站请求伪造(CSRF)保护等功能。 10. 安全性:Django非常重视安全性,内置了对常见的Web攻击如SQL注入、XSS(跨站脚本)和CSRF的防护...

    Django Web开发指南(护眼绿豆沙底色版)

    7. Django安全机制:由于Web应用程序非常容易遭受攻击,因此Django提供了许多内置的安全特性,包括防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的措施。 8. 国际化和本地化:Django支持应用的国际化和本地化,...

    Django跨域请求CSRF的方法示例

    Django框架在处理跨域请求(Cross-Origin Resource Sharing, CORS)时,面临CSRF(Cross-Site Request Forgery,跨站请求伪造)的安全风险。本文将探讨Django如何安全地实现跨域请求同时防范CSRF攻击,并提供相关的...

    Django Web开发指南.pdf.zip

    Django内置了防止SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的防护措施。同时,Django还支持用户认证和授权,可以轻松实现注册、登录、权限控制等功能。 在部署方面,Django支持多种服务器环境,如Apache...

    Django 中文手册

    它还支持CSRF(跨站请求伪造)保护,确保只有合法的请求才能被处理。 【洪越源代码--更多免费精品商业源码.url】可能指向一个提供免费或商业级源码资源的网站,对于学习和参考其他项目实现有帮助,可以辅助理解...

    django1.8教程

    Admin界面的安全措施包括Action操作、管理文档生成器、安全概述、点击劫持保护、跨站请求伪造保护、加密签名和安全中间件等。 国际化和本地化是Django另一个强大的特性,允许开发者构建支持多种语言的Web应用。这...

    Django 2.0 官方中文文档

    Django 2.0 强调安全,内置了防止 SQL 注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等的安全措施。开发者还应关注 HTTPOnly Cookie 和 HTTPS 的使用,以保护用户数据。 9. **国际化和本地化(i18n & l10n)**...

    django_blog_tutorial-master_everybodyvcf_django_djangoblog系统_

    2. **安全性**:Django内置了防止跨站请求伪造(CSRF)和跨站脚本(XSS)攻击的防护措施。 3. **高性能**:通过缓存机制和优化数据库查询,能提高系统响应速度。 4. **社区支持**:Django有一个活跃的社区,提供了...

    Django-2.1.15.tar.gz

    Django强调安全性,内置了防止跨站脚本(XSS)、跨站请求伪造(CSRF)等攻击的防护措施。 12. **性能优化** Django支持缓存框架,可以使用多种缓存策略,如内存缓存、数据库缓存等,以提高网站性能。 13. **国际...

    Django_中文教程

    9. **安全特性**:Django提供了许多内置的安全措施,比如避免常见的Web攻击,比如跨站请求伪造(CSRF)和SQL注入。 10. **会话和用户管理**:Django提供了完整的用户身份验证系统,包括创建用户、修改密码、登录和...

    Django-2.1.1.tar

    Django注重安全性,2.1.1版本包含针对各种潜在安全威胁的防护措施,如CSRF(跨站请求伪造)保护、XSS(跨站脚本)防御和SQL注入预防。开发者还可以利用内置的登录和权限管理系统,轻松实现用户认证和授权。 7. **...

    Django1.5.4

    6. **安全性**:Django 重视安全,1.5.4 版本中包含了防止常见的 Web 攻击措施,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)以及 SQL 注入等。 7. **可扩展性**:Django 的插件系统允许开发者通过安装第三方应用...

    django1.3.7

    5. **中间件** - 中间件提供了一种方式来扩展 Django 的核心功能,如日志记录、CSRF(跨站请求伪造)保护等。 6. **缓存系统** - 支持多种缓存策略,如内存缓存、数据库缓存、分布式缓存等,提高网站性能。 7. **...

    【JavaScript源代码】django+vue实现注册登录的示例代码.docx

    请求拦截器用于在每个POST请求中添加CSRF Token,这是Django为了防止跨站请求伪造攻击(CSRF)所必需的。`getCookie`函数用于从文档的cookie中提取CSRF Token,并将其添加到请求头中。 登录功能与注册类似,但增加...

    Django中文文档pdf

    7. **内置安全功能**:Django内置了防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等的安全措施,并提供了用户认证和权限管理。 8. **缓存系统**:Django支持多种缓存策略,如内存缓存、数据库缓存、分布式缓存等...

    Beginning Django E-Commerce

    - CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防御等安全措施。 7. **测试与部署** - 单元测试编写,确保代码质量。 - 使用自动化工具部署应用至服务器。 - 监控与日志记录,及时发现并解决问题。 #### 五...

Global site tag (gtag.js) - Google Analytics