2017-04-06 167 views
0

我有我的Ionic/angular 2应用程序正在运行localhost:8000该应用程序将最终在浏览器平台上运行。该应用程序正在调用在本地机器上托管的RESTFULL api,其中,其中adawy是我的主机名,并在hosts文件和apache虚拟主机中定义。服务器端是Slim 3.如何使用HTTPOnly Cookies来保护JWT免受XSRF攻击?

API身份验证返回一个JWT以与所有请求一起使用。

我的目标是保护令牌不受跨站请求伪造和跨站点脚本。将标记保存在JavaScript变量或任何形式的本地存储中将使JWT可以从JavaScript访问。

我发现最好的方法是将JWT作为HTTPOnly cookie返回。所以它将无法从JavaScript访问,并且只能通过浏览器发送任何即将到来的adawy域名请求。

我已经成功地将cookie作为cookie返回,但问题在于cookie没有与任何下一个XHR请求一起发送。 enter image description here

此外,我无法在Devtools的Cookie部分看到cookie。

enter image description here

我知道角可以与该事项有关通过寻找XSRF-TOKEN cookie支持。 它也无法正常工作,因为您可以看到我将Cookie的名称设置为XSRF-TOKEN,但是,如果有任何其他请求,则不会发送此Cookie。

我想知道如何保证角度可以访问这个cookie,那么其他脚本如何?

这是下一个请求,没有发送cookie。由于我的角码直接设置,请忽略标题Authorization

enter image description here

在我的角度的应用程序,我设置withCredentials: true选项,同时使最后的GET请求。

更新 我曾使用adawy.com,我仍然有同样的问题。

回答

1

第一个响应尝试在顶级域Domain=.adawy;(请参阅Set-Cookie标头)上明确设置cookie,这是不允许的。如果可以,尝试在没有域名的情况下进行设置,看看是否可行。或者,尝试使用一个拥有tld的主机名。

+0

感谢您的回答。我将域名更改为'adawy,com',但我仍然遇到同样的问题。 –

+0

[Chrome不支持来自本地主机的请求的CORS异常](http://stackoverflow.com/questions/10883211/deadly-cors-when-http-localhost-is-the-origin)。看起来像[这个问题在2014年被关闭了](https://bugs.chromium.org/p/chromium/issues/detail?id=67743)。显然'访问控制 - 允许 - 原产地:*'将适用于本地主机,所以你可以完成测试,但'本地主机'是一个禁行。 – LinuxDisciple

+0

我偶然发现了这个问题,这就是我使用'adawy.com'作为主机名的原因。我想我的cookie设置本身必须有问题。然而,我无法弄清楚。 –

相关问题