如何使用HTTPOnly Cookies保护JWT免受XSRF攻击?

时间:2017-04-06 19:21:28

标签: php angular cookies ionic2 x-xsrf-token

我有localhost:8000运行的Ionic / angular 2应用程序该应用程序最终将在浏览器平台上运行。该应用程序正在https://adawy/api上调用我本地计算机上托管的RESTFull api,其中adawy是我的主机名,并在hosts文件和apache虚拟主机中定义。服务器端是Slim 3.

验证时API会返回一个JWT以用于所有请求。

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

我发现最好的方法是将JWT作为HTTPOnly cookie返回。因此,它无法通过javascript访问,只有浏览器才会向adawy域发送任何即将发送的请求。

我已成功将该令牌作为cookie返回,但问题是该cookie未随任何下一个XHR请求一起发送。  enter image description here

另外,我在Devtools的Cookies部分看不到cookie。

enter image description here

我知道角度可以通过查找XSRF-TOKEN cookie来支持。 它也不起作用,因为您可以看到我将cookie的名称设置为XSRF-TOKEN但是,对于任何其他请求,此cookie不会被发送。

我想知道如何保护这一点,就好像angular可以访问此cookie一样,其他任何脚本也是如此?

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

enter image description here

在我的角度应用中,我在设置最后一次获取请求时设置了withCredentials: true选项。

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

1 个答案:

答案 0 :(得分:1)

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