Forbidden (CSRF token missing or incorrect.)

问题描述:

写了个静态页面,可以正常访问,然后在静态页面加了form表单,输入用户名,密码,在views中获取并打印,点击提交时就报错403,特此再次补充下,之前写过一篇相同的问题。

后台报错:

Forbidden (CSRF token missing or incorrect.): /index/
原因分析:

django的默认配置中设置了跨站请求的限制,并将其禁止的状态,form表单在提交时,除了常用的字段之外,额外添加一个token ,这个token是服务器端生成的,是一个随机的数字。服务器端就会检查从浏览器发过来的数据中有没有token,并且这个token的值是不是和服务器端保存的相等,如果相等,就继续执行操作,如果不相等,那这次POST请求肯定是伪造的。

解决方案:

方案一:将settints中对于跨站请求的限制注掉,风险在于那些通过基于受信任的输入form和对特定行为无需授权的已认证的用户来执行某些行为的web应用。已经通过被保存在用户浏览器中的cookie进行认证的用户将在完全无知的情况下发送HTTP请求到那个信任他的站点,进而进行用户不愿做的行为。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于DjangoCSRF保护机制引起的,它需要确保每个POST请求都具有与会话关联的CSRF令牌。 在Django中,每个POST请求都需要在请求中包含一个名为`csrfmiddlewaretoken`的CSRF令牌。如果请求中不包含这个令牌,Django会抛出`Forbidden (CSRF cookie not set.)`错误。 为了解决这个问题,您需要在POST请求的表单中包含CSRF令牌。例如,在您的HTML表单中,可以添加以下代码: ```html {% csrf_token %} ``` 这将在表单中添加一个隐藏字段,其中包含与当前会话关联的CSRF令牌。当用户提交表单时,这个令牌将与请求一起发送,以通过CSRF保护。 如果您使用的是AJAX请求,可以将CSRF令牌作为请求头发送。例如,在JavaScript中,可以添加以下代码: ```javascript 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 = cookies[i].trim(); if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrfToken = getCookie('csrftoken'); $.ajax({ ... headers: { 'X-CSRFToken': csrfToken }, ... }); ``` 这将在请求头中添加一个名为`X-CSRFToken`的头,其中包含与当前会话关联的CSRF令牌。这样,您的AJAX请求将通过CSRF保护。 请注意,如果您使用的是第三方库或框架,例如Django REST framework或jQuery,它们可能会自动处理CSRF令牌。在这种情况下,您不需要手动添加CSRF令牌。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值