免责声明: 我是一名前端开发人员,没有深入的网络安全培训。也许我的问题听起来微不足道。坦率地说,我希望它 - 这意味着有一个简单的解决方案。请不要生气。
我正在开发一个单页面的Web应用程序,它根据现代Web应用程序的常见模式进行架构。具体来说,有一个Web应用程序本身存在于浏览器中,这是一个基于节点的“前端后端”,负责呈现应用程序并接受来自它的ajax请求(其中大部分时间代理到“正确”的后端) ),然后有“真正的”后端负责CRUD操作:
我们希望确保进入“前端后端”的请求源自浏览器中的客户端应用程序,而不是攻击者的脚本。
作为该任务的一部分,我启用了csrf保护(使用csurf库),但后来我发现这可能不够,因为如果攻击者使用浏览器发出正常请求,在开发工具的网络面板中检查它,然后将cookie和头文件(使用csrf令牌和存储在cookie中的密钥)从该请求复制到他的脚本,csrf保护将无法阻止此类请求。至少据我了解csurf
的工作原理。
所以,我正在寻找一种更好的方法来确保请求来自客户端应用程序。也许有一种方法可以将基于常规csrf-token的保护与时间戳结合起来,以确保从请求标头复制的csrf标记暂时到期?或者也许还有其他一些解决方案?我不愿意发明自己的安全机制。请指教?
(我在security.stackexchange.com上找到了similar discussion,但没有提出具体建议)
答案 0 :(得分:1)
回答这些问题时,首先要说的是"为什么"。您还没有解释您的威胁模型 - 即您试图保护哪些攻击,谁将发起此类攻击,以及这些攻击的影响是什么?正如melpomene所说,攻击者已经可以使用您的客户端做任何他们想做的事情了。你想在这里防守什么?
正如评论中指出的那样,原则上没有办法实现你想要的:你的后端前端服务器只能观察流量,而坚定的攻击者可以重现客户端Javascript使用的任何流量模式。
话虽如此,您可以让更难让攻击者弄清楚您的服务是如何工作的,例如通过使用质询/响应机制或数据上的复杂签名。但是这些"安全隐患"技术不增加理论安全性;攻击仍有可能。
另一种获得动力且可能适用于您的情况的技术是查看您的呼叫者的行为模式以检测机器人。有几种产品声称可以做到这一点,但我没有任何此类工具的个人经验。你可以谷歌,例如为detect bot traffic
。同样,这些工具原则上可能会被愚弄,但可能会为您的服务增加一些实用的安全性。
最后,您可以对所有操作使用验证码,以确保(有一定程度的信心)它是驱动应用程序而不是脚本的人。
您需要依靠威胁模型来了解哪些对您有用。