2011-12-30 47 views
0

我主要是使用django制作网站应用程序。我需要编写一个画布页面来处理请求。在最简单的形式,我有:通过FB加载画布应用程序时出现内部错误,但不是直接加载

(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/"]有关的错误。

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

+0

在settings.py中设置'DEBUG = True',你会看到调试输出和堆栈跟踪 – 2011-12-30 22:58:14

+0

谢谢。我已经做到了这一点,但对于一些错误,我仍然没有得到调试输出和堆栈跟踪 - 不知道为什么,但这一直是我一直以来的方式。 – sean 2011-12-30 23:07:57

+0

从Apache日志('ModSecurity:输出过滤器:无法读取桶(rc 104):由peer [hostname“...”] [uri“/ canvas /”]')重置连接,它看起来像是一个modsecurity问题?尽管免除CSRF的页面?我在Dreamhost上,如果有帮助的话。 – sean 2011-12-31 00:55:23

回答

0

(X-后从here:解决方案可能是相同的)

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

我认为发生的事情是,cookie实际上没有设置(这可以通过在任何浏览器的开发工具中检查cookie来确认)。将上面的代码添加到您的模板强制这一点。我有一种感觉,这可能会在更高版本的Django中得到补救,并且好像有1.4+的明显修复(例如,请参阅here)。不幸的是,dreamhost已经将我们与1.2.3捆绑在了一起,所以我们需要努力。

0

现在,我已经能够通过关闭mod_security(Dreamhost面板中的“额外的web安全性”)来处理它。

我试图解决它,首先,通过下面的.htaccess的指令,但他们似乎并没有做的伎俩:

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

我很想能够重新启用mod_security除了允许画布URI通过,所以如果任何人有解决方案,我会很感激。谢谢!

相关问题