Django中的ModSecurity错误

1 投票
2 回答
1136 浏览
提问于 2025-04-16 17:30

我正在通过我在DreamHost上用fb.py制作的Facebook应用(iframe)访问一个Django页面,但总是遇到内部服务器错误。

查看错误日志,我看到的内容是:

ModSecurity: 输出过滤器:读取桶失败(rc 104):连接被对方重置

我觉得这可能和POST请求有关。大约一年前,有人也在多个论坛上问过这个错误,但没有得到解决:

ModSecurity: 输出过滤器:读取桶失败(rc 104):连接被对方重置

我在网上搜索到的只有这个信息,来自http://www.modsecurity.org

“当mod_security拒绝这样的请求时,它会发送一个错误桶,比如代码403,沿着输出过滤器链发送,同时保持r->status不变(比如500)。”

有什么想法吗?谢谢!

2 个回答

0

我花了太多时间在搞清楚这个问题上。最后我找到了一种(虽然不太完美的)解决办法:在你的模板中的任何地方添加 {% csrf_token %} 代码(我假设你在调用 render_to_response 时传入了 context_instance=RequestContext(request) 这个参数)。

我觉得问题出在这个cookie没有被正确设置(你可以通过浏览器的开发者工具查看cookie来确认这一点)。在模板中添加上面的代码可以强制设置这个cookie。我感觉在后来的Django版本中可能会解决这个问题,而且对于1.4及以上版本似乎有明显的修复方法(例如,可以查看 这里)。可惜的是,dreamhost给我们用的是1.2.3版本,所以我们只能将就着用。

0

你有没有按照这个链接的说明来实现CSRF保护呢?https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

记得要和你正在使用的Django版本对照一下哦。

撰写回答