0

我主要将 django 用于网站应用程序。我需要编写一个画布页面来处理请求。以最简单的形式,我有:

(r'^canvas/','commitments.views.canvas'),

urls.py, 和:

@csrf_exempt
def canvas(request): 
    return HttpResponse("Hello world")

views.py. 如果我直接加载页面,这一切都很好。但是,如果我通过 Facebook 画布加载页面,则会收到与 modsecurity 相关的错误ModSecurity: Output filter: Failed to read bucket (rc 104): Connection reset by peer [hostname "..."] [uri "/canvas/"]

关于我在这里做错了什么有什么想法吗?谢谢您的帮助。

4

2 回答 2

0

目前,我已经能够通过关闭 mod_security(Dreamhost 面板中的“额外网络安全”)来处理它。

我首先尝试通过以下 .htaccess 指令来处理它,但他们似乎没有做到这一点:

SetEnvIfNoCase Request_URI ^/canvas/.*$ MODSEC_ENABLE=Off
<IfModule mod_security.c>
  SecFilterSelective REQUEST_URI "^/canvas/.*$" "allow,pass"
  SecFilterScanPOST Off
</IfModule>

除了允许画布 URI 通过之外,我希望能够重新启用 mod_security,所以如果有人对此有解决方案,我将不胜感激。谢谢!

于 2011-12-31T15:32:04.340 回答
0

(x-post from here:解决方案可能相同)

所以我花了太多时间试图弄清楚这一点。我已经确定了一个(有点糟糕的)解决方法:添加{% csrf_token %}到模板中的任何位置(我假设你将context_instance=RequestContext(request)参数传递给你的render_to_response或其他的)。

我认为正在发生的事情是 cookie 实际上没有设置(这可以通过检查任何浏览器的开发工具中的 cookie 来确认)。将上述代码添加到您的模板会强制执行此操作。我有一种感觉,这可能会在更高版本的 Django 中得到解决,而且似乎对 1.4+ 有明显的修复(例如,请参见此处)。不幸的是,dreamhost 让我们坚持使用 1.2.3,所以我们需要凑合着做。

于 2012-04-02T04:29:50.910 回答