在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
相关推荐
通过理解Django的CSRF防护机制,开发者可以更好地保护其Web应用免受跨站请求伪造的攻击,确保用户数据的安全。在开发过程中,始终遵循最佳安全实践,定期审计和测试应用的防护措施,是保障Web应用安全的重要环节。
### Django中如何防范CSRF跨站点请求伪造攻击的实现 #### CSRF概念 CSRF(Cross-Site Request Forgery,跨站请求伪造),是一种常见的安全攻击手段。在这种攻击中,攻击者利用受害者的身份(通常是通过受害者已...
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱导用户在已登录的网站上执行非预期的操作。在这个PHP demo中,我们将深入理解CSRF攻击的原理,并探讨如何防范。 首先,让我们看...
Django重视安全性,内置了防止XSS、CSRF(跨站请求伪造)等攻击的防护措施,还提供了安全的密码存储和管理。 9. **性能优化** Django 2.1.7在性能方面进行了优化,包括更高效的查询执行、缓存策略改进等,使得...
1.11.6版本中,中间件系统已经相当成熟,可以用来实现如日志记录、会话管理、跨站请求伪造(CSRF)保护等功能。 10. 安全性:Django非常重视安全性,内置了对常见的Web攻击如SQL注入、XSS(跨站脚本)和CSRF的防护...
7. Django安全机制:由于Web应用程序非常容易遭受攻击,因此Django提供了许多内置的安全特性,包括防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的措施。 8. 国际化和本地化:Django支持应用的国际化和本地化,...
Django框架在处理跨域请求(Cross-Origin Resource Sharing, CORS)时,面临CSRF(Cross-Site Request Forgery,跨站请求伪造)的安全风险。本文将探讨Django如何安全地实现跨域请求同时防范CSRF攻击,并提供相关的...
Django内置了防止SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的防护措施。同时,Django还支持用户认证和授权,可以轻松实现注册、登录、权限控制等功能。 在部署方面,Django支持多种服务器环境,如Apache...
它还支持CSRF(跨站请求伪造)保护,确保只有合法的请求才能被处理。 【洪越源代码--更多免费精品商业源码.url】可能指向一个提供免费或商业级源码资源的网站,对于学习和参考其他项目实现有帮助,可以辅助理解...
Admin界面的安全措施包括Action操作、管理文档生成器、安全概述、点击劫持保护、跨站请求伪造保护、加密签名和安全中间件等。 国际化和本地化是Django另一个强大的特性,允许开发者构建支持多种语言的Web应用。这...
Django 2.0 强调安全,内置了防止 SQL 注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等的安全措施。开发者还应关注 HTTPOnly Cookie 和 HTTPS 的使用,以保护用户数据。 9. **国际化和本地化(i18n & l10n)**...
2. **安全性**:Django内置了防止跨站请求伪造(CSRF)和跨站脚本(XSS)攻击的防护措施。 3. **高性能**:通过缓存机制和优化数据库查询,能提高系统响应速度。 4. **社区支持**:Django有一个活跃的社区,提供了...
Django强调安全性,内置了防止跨站脚本(XSS)、跨站请求伪造(CSRF)等攻击的防护措施。 12. **性能优化** Django支持缓存框架,可以使用多种缓存策略,如内存缓存、数据库缓存等,以提高网站性能。 13. **国际...
9. **安全特性**:Django提供了许多内置的安全措施,比如避免常见的Web攻击,比如跨站请求伪造(CSRF)和SQL注入。 10. **会话和用户管理**:Django提供了完整的用户身份验证系统,包括创建用户、修改密码、登录和...
Django注重安全性,2.1.1版本包含针对各种潜在安全威胁的防护措施,如CSRF(跨站请求伪造)保护、XSS(跨站脚本)防御和SQL注入预防。开发者还可以利用内置的登录和权限管理系统,轻松实现用户认证和授权。 7. **...
6. **安全性**:Django 重视安全,1.5.4 版本中包含了防止常见的 Web 攻击措施,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)以及 SQL 注入等。 7. **可扩展性**:Django 的插件系统允许开发者通过安装第三方应用...
5. **中间件** - 中间件提供了一种方式来扩展 Django 的核心功能,如日志记录、CSRF(跨站请求伪造)保护等。 6. **缓存系统** - 支持多种缓存策略,如内存缓存、数据库缓存、分布式缓存等,提高网站性能。 7. **...
请求拦截器用于在每个POST请求中添加CSRF Token,这是Django为了防止跨站请求伪造攻击(CSRF)所必需的。`getCookie`函数用于从文档的cookie中提取CSRF Token,并将其添加到请求头中。 登录功能与注册类似,但增加...
7. **内置安全功能**:Django内置了防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等的安全措施,并提供了用户认证和权限管理。 8. **缓存系统**:Django支持多种缓存策略,如内存缓存、数据库缓存、分布式缓存等...
- CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防御等安全措施。 7. **测试与部署** - 单元测试编写,确保代码质量。 - 使用自动化工具部署应用至服务器。 - 监控与日志记录,及时发现并解决问题。 #### 五...