作为我项目的一部分,我使用https://github.com/theintern/intern/来运行单元和功能测试。
在我的一个测试中,我正在测试JSON Rest API的服务器实现。我需要此实现来使用Dojo JSON Rest客户端(http://dojotoolkit.org/reference-guide/1.10/dojo/store/JsonRest.html)。
因此我试图手动触发Dojo Store应该执行的XHR。但是,我不知道如何绕过浏览器中的CSRF保护,因为我找不到将我的服务器实现(我希望测试)与Intern框架内部的Web服务器集成的方法。
实习生网络服务器在http://localhost:9000
运行,我的JSON Rest商店位于http://localhost:3000
,因此触发了CSRF浏览器保护。
通常,需要跨服务器执行XHR的页面需要来自原始服务器的某种CSRF令牌/ cookie授权。我如何与实习生一起执行此操作? 如果我需要从JSON REST API服务器实现获得此授权,那么我的服务器将无法作为 REST 实现工作,因为我需要跟踪状态。我这样做了吗?
在我的应用程序中(生产服务器),这不是问题,因为JSON Rest API的服务器实现也提供启动XHR的静态HTML页面。
更新: 我找到了关于无国籍CSRF保护的指南:http://appsandsecurity.blogspot.de/2012/01/stateless-csrf-protection.html。 我仍然需要对此进行测试,看看它如何应用于Dojo JSON Rest商店。
答案 0 :(得分:1)
我听说如果您需要开发,可以在某些浏览器中禁用CSRF保护。但是,这种保护是非常关键的事情,如果没有AJAX请求就太危险了,不允许页面使用它们......
您的Web应用程序和REST通道必须位于相同的IP 和相同的端口上。如果您有2个单独的服务器,那么实现它的方法是使用代理服务器。其中一个服务器提供此类功能,或者您使用第三个(如Apache)代理对两个服务器的调用。
我使用Apache HTTPD和mod_proxy。我将客户端代码(html和js)存储在apache上,然后使用httpd.conf
中定义的配置将调用重定向到rest服务:
ProxyPass /myapp/rest/ http://l0calhost:9000/myapp/rest/
您的休息频道将在l0calhost:3000
下提供(如果您的apache服务器在http://l0calhost:3000/myapp/rest
上监听),并且应用程序(JS)可以在/ myapp / rest下引用它。
当然,首先需要取消注释激活mod_proxy
的行LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so