删除隐藏字段后,Django出现CSRF错误
CSRF error in Django after removal of hidden fields
我在StackOverflow上得到了一些关于如何使用JavaScript删除所有隐藏字段的好建议。
提交表单将用户发送到/submit
,调用submit_form
视图。在我的views.py文件中,我定义了我的索引页(使用表单),以及接收提交的页面(我的/index
页面为我打印错误,但这不应该影响任何东西):
def index(request, error_message = ''):
t = get_template('index.html')
html = t.render(Context( { 'ERROR_MESSAGE': error_message } ))
return HttpResponse(html)
def submit_form(request):
# get the POST data out of request and do something
pass
我已经能够通过更改代码来抑制错误:
from django.contrib.csrf.middleware import csrf_exempt
@csrf_exempt
def submit_form(request):
# get the POST data out of request and do something
pass
这实际上关闭了submit_form函数的CSRF。然而,我确信这不是理想的修复(现在我不检查我的表单中的伪造)。
我尝试了更复杂的修复,比如
- 将这段代码添加到jQuery代码之后(它从提交中删除隐藏字段)
init:function(){
var ac=this
# advice from StackOverflow to remove hidden
# fields from POST submission
jQuery(document).ready(function($){
$("form").submit(function() {
$(this).find(":hidden").remove();
});
# AJAX CSRF code inserted here
#...
}
- 在表单声明后立即添加' {% csrf_token %} '。我还尝试添加代码到我的' index '视图发送' csrf_token '到' index ';这使得令牌在渲染的index.html源代码中可见(我认为这是一个坏主意)。
我已经看到了一些类似的问题(以及Django书中的参考文献),但是还没有看到一个简单明了的答案。例如,即使我要容忍发布我的csrf_token
(我仍然知道这是一个坏主意),我仍然不清楚我是否应该在我的索引页面中渲染它(然后它将提交表单将具有令牌),或者我是否应该在我的submit_form
代码中做一些事情。Django代码书(上面的链接)使用my_view
作为呈现令牌的视图函数;这个名字不是很有用!
是否有人有一个小的例子与CSRF工作(与javascript修改表单)?我真的认为这将是有用的(对我和许多其他人在StackOverflow看到这一点。理想情况下,它应该尽可能简单(两个视图:一个传递表单,另一个打印表单的内容)。
谢谢你的帮助。
更新:我仍然得到这个错误,即使我阻止csrfmiddlewaretoken
被删除。当我*不做任何JavaScript处理时,我的表单是好的。我已经验证了只有
是否有一些方法,CSRF可以看到一些表单元素被删除?我在QueryDict
对象(使用POST从表单发送数据)中找不到任何不同。
我真的很感激任何帮助!
问题是你删除了隐藏的csrf字段,解决方案是不删除这个字段,你可以用jQuery选择器让它忽略这个字段:not(input[name=csrfmiddlewaretoken])。
顺便说一句,Django对发送给form-class的未知字段名没有问题,它会很高兴地忽略它们,所以删除隐藏字段的代价非常小。
- 在指令控制器中使用$attrs时出现问题
- 参数变量出现ngTable指令问题
- 分析高度属性时出现意外值{{specs.height}}.index.html
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 弹出窗口出现,然后退出
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- /undefined在我的404错误日志中多次出现
- 为什么在画布上画线;t出现
- 在流星上使用微信js-sdk时出现拒绝权限错误
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何使用css动画/javascript使具有背景图像的元素出现
- 刷新页面后会出现警报
- Django: AJAX + CSRF POST gives 403
- 为什么会出现错误,“UncaughtTypeError:undefined不是函数”
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 提交Javascript表单时出现Codeigniter csrf保护错误
- 当数据达到一定数量时,CSRF 问题就会出现
- 删除隐藏字段后,Django出现CSRF错误