我有一个为SPA构建的JSON API,它只接受带有"Accept: application/json“头的请求。因此,在浏览器中提交以下表单将导致“不可接受”。HTTP错误。
<form method="POST" action="https://api.example.domain/resource">
<input type="password" name="password" value="CSRF">
<input type="submit" value="Click!">
</form>这是否意味着API对CSRF类型的攻击具有免疫力,或者我错过了什么?
发布于 2017-08-25 19:43:10
它应该是相当安全的,但API仍然存在易受攻击的可能性。
如果攻击者可以在网站中发现XSS漏洞,他就可以使用JavaScript添加标题:Accept: application/json,然后执行CSRF攻击。
出于这个原因,推荐使用一些不能由JavaScript设置的头文件,因为它们在“禁止的”头文件列表中,只有浏览器可以修改它们,所以在这里不能使用XSS漏洞。
您可以在OWASP中找到更多信息:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
发布于 2017-08-27 18:48:12
我不认为它是安全的,因为你不能同时实施所有的预防方法。当然,添加CORS支持、HTTP Only标志和其他方法可能会防止您被黑客攻击,但您并不是完全安全的。
与其通过实现所有的预防方法来重新发明轮子,我认为使用现有的标准包装器或中间件来防止对应用程序的CSRF攻击会更好。这些代码比你能做的更好地清理输入。
您可以使用最好的(我最喜欢的)包装器之一,https://github.com/ring-clojure/ring-anti-forgery来防止CSRF攻击。如果您使用node作为后端,这里有另一个最好的中间件,https://github.com/expressjs/csurf。
我不会说不可能自己编写整个代码来防止CSRF攻击,但我认为使用现有的标准代码片段并专注于开发功能的聪明方法将节省更多的时间。
https://stackoverflow.com/questions/45202266
复制相似问题