如何制作跨域形式的CSRF和抗重放?
我正在考虑制作一个项目,但我想知道跨站点请求伪造是否会使其无法确保安全。
基本上,我希望有一个 Web 服务,可以在另一个域的页面上使用常用技巧(JSON-P 和 iframe)生成表单。因此,WebService.example.com 生成一个表单的 HTML,并在 User.example.com 上向用户显示。
我认为该表单必须使用注入的 iframe 技巧从 javascript 提交表单。因为任何人都可以从 WebService.example.com 获取相同的数据,所以我如何确保它实际上仅来自 User.example.com?最好不需要在 User.example.com 上运行任何服务器端代码。
请注意,我将使用 ASP.Net 作为 WebService,但我希望以与语言/框架无关的方式对其进行解释
I'm contemplating making a project, but I'm wondering if cross-site request forgery would make it impossible to secure.
Basically, I want to have a web service that generates a form using the usual tricks(JSON-P and iframes) on another domain's page. So WebService.example.com generates a form's HTML, and it's shown to the user on User.example.com
This form, I assume will have to use the injected iframe trick to submit the form from javascript. Because anyone would be able to just get the same data from WebService.example.com, how can I ensure that it's actually only coming from User.example.com? Preferably, without having to have any server-side code running on User.example.com.
Note, I'll be using ASP.Net for the WebService, but I'd like it explained in a language/framework agnostic manner
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果不在两个域上使用服务器端脚本,这是很难做到的。
如果您更改架构并仅使用跨域消息传递(在顶级域中托管表单等,使用 iframe 进行通信),那么您可以使用 XDM 来验证它确实是您正在交谈的预期域。
如果您仅针对支持 HTML5 的浏览器,则使用
postMessage
,如果您需要更广泛的支持以及 RPC 等内容,则使用 easyXDM,它消除了跨域消息传递的所有麻烦。实际上,您可以在任一文档中托管表单,只需使用 XDM 通信即可成功“握手”,验证
来源
。This is pretty hard to do without using server side scripts on both domains.
If you change your architecture and just use Cross-Domain Messaging (host the form etc in the top domain, use iframe for communication) then you could use the XDM to verify that it is indeed the intended domain you are talking to.
If you only target HTML5-capable browsers then use
postMessage
, if you want broader support, and things like RPC etc then use easyXDM, which abstracts all of the hassle with cross-domain messaging.Actually, you can host your form in either document, you just need to use the XDM-communication in order to do a successful 'handshake', verifying the
origin
.