作为我项目的一部分,我使用https://github.com/theintern/intern/运行单元和功能测试。
在我的一个测试中,我正在测试JSON的服务器实现。我需要这个实现来处理Dojo客户端(http://dojotoolkit.org/reference-guide/1.10/dojo/store/JsonRest.html)。
因此,我试图手动触发Dojo应该做的XHR。但是,我不知道如何绕过浏览器中的CSRF保护,因为我找不到一种方法将我的服务器实现(我希望测试)与在Intern框架中找到的web服务器集成起来。
实习生and服务器在http://localhost:9000上运行,我的JSON位于http://localhost:3000,因此CSRF浏览器保护触发器。
通常,需要跨服务器执行XHR的页面需要来自原始服务器的某种CSRF令牌/cookie授权。我怎么才能和实习生一起做这件事?如果我需要从JSON服务器实现获得这个授权,那么我的服务器将不会作为 REST 实现工作,因为我需要跟踪状态。我说得对吗?
在我的应用程序本身(生产服务器)中,这不是一个问题,因为JSON的服务器实现也提供了启动XHR的静态HTML页面。
更新:我找到了关于无状态CSRF保护的指南:http://appsandsecurity.blogspot.de/2012/01/stateless-csrf-protection.html。不过,我仍然需要测试这一点,看看它如何应用于Dojo商店。
发布于 2014-08-28 14:37:49
我听说你可以在一些浏览器中禁用CSRF保护,如果你需要的话。然而,这种保护是一件非常重要的事情,没有它,AJAX请求就太危险了,不能让页面使用它们.
您的web应用程序和REST通道必须位于相同的IP和相同的端口上。如果您有两个单独的服务器,那么实现它的方法是使用代理服务器。要么是其中一个服务器提供了这样的功能,要么是使用第三个服务器(如Apache)对这两个服务器进行代理调用。
我在代理中使用Apache。我将客户端代码(html和js)存储在apache上,并使用httpd.conf中定义的配置重定向对rest服务的调用。
ProxyPass /myapp/rest/ http://l0calhost:9000/myapp/rest/您的rest通道将在http://l0calhost:3000/myapp/rest下使用它们(如果您的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.sohttps://stackoverflow.com/questions/25519374
复制相似问题