【问题标题】:Prevent CSRF (or Cross-Site Request Forgery/XSRF) for silverlight enabled WCF Service防止启用 silverlight 的 WCF 服务的 CSRF(或跨站点请求伪造/XSRF)
【发布时间】:2011-08-08 09:12:28
【问题描述】:

使用 USB 令牌/智能卡保护启用 silverlight 的 WCF 服务通信。第一次访问必须通过输入 PIN 来确认。一旦通过身份验证,恶意网站就可以使用 IMG-Tags 和/或 JavaScript 向 WCF 服务发起 CSRF 请求。根据Security Guidance for Writing and Deploying Silverlight Applications,这里常用的技术是使用(会话)令牌或所谓的“nonce”,同时检查 HTTP Referrer 标头已被证明是不安全的。

我理解这背后的想法,据我了解,如果您有一个单一的表格(即联系表格)和单一的服务,您可以确保用户在发送之前必须查看并填写表格。在 Silverlight 应用程序中,我无法预定义这种顺序,许多请求(例如请求产品的价格更新)可以以任意顺序启动。

你有什么建议我应该如何保护 Silverlight 到 WCF 的通信以防止 CSRF 攻击,确保已经过身份验证的调用者从受信任的站点请求?

【问题讨论】:

    标签: silverlight wcf security csrf


    【解决方案1】:

    一个选项可能是:

    1. 提供一个服务,该服务在被调用时创建一个随机数并将其存储在服务器上的用户会话中,并将其返回给调用应用程序
    2. 在此请求之后的每个请求中,将 nonce 作为 URL 参数或在请求的 POST 正文中(或在您使用的任何其他类型的消息中)
    3. 为对服务器的每个请求检查此随机数

    攻击者无法欺骗这一点,因为如果他调用提到的服务,他会为自己的会话获得不同的令牌。并且只要这个 nonce 不存储在 cookie 中,浏览器就不会在向服务器请求时自动提交它。因此,只要攻击者无法猜测 nonce(使用加密安全随机数来生成它),这应该可以工作。

    【讨论】:

    • 感谢您的建议。我看到攻击者可以以某种方式读取发送的消息(因为 Silverlight 还不支持基于消息的安全性)并读取随机数的问题。由于我们会为多个请求重复使用相同的随机数(这就是我理解您的建议的方式),他仍然可以使用被盗的随机数伪造请求。我猜对于每个请求,nonce 应该是有效且唯一的?
    • 能否在 Silverlight 应用和 WCF 服务之间使用 SSL,这样消息就不会中途被盗?
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2014-06-02
    • 2014-08-31
    • 2018-04-25
    • 1970-01-01
    • 2015-07-08
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多