2009-07-29 72 views
1

我有一个安全的Web应用程序,并将用户详细信息存储在会话对象中。我正在构建Silverlight控件以查看存储在数据库中的图像,并且需要保护这些图像的访问权限。我不是想阻止复制或类似的东西,但我需要确保访问该图像的用户实际上有权查看可通过检查会话中的用户数据来实现的图像。在Web应用程序中保护Silverlight图像查看器的最佳方法?

所以我的想法就是要做到以下几点:具有主机Silverlight控件

  1. Web应用程序。
  2. 一个ashx文件,用于处理从数据库中提供的图像。
  3. 通过silverlight控件访问ashx文件将检查会话以确保他们确实可以访问此图像。 (我假设silverlight控件和web应用程序共享相同的会话,这可能是一个错误的假设。)

此设置是否正确或者有其他方法来处理?这将是我第一次将Silverlight控件集成到Web应用程序中。

回答

0

Silverlight控件生活在浏览器的上下文中。我认为如果你是silverlight控制callse你的ashx页面,那么ashx页面会在你的web应用程序运行的同一个会话下执行。

当用户登录到您的Web应用程序时,在会话中存储某些内容以指示它们已通过身份验证,并在您的ashx页面中进行检查。

这是一个简单的场景模拟和测试。

0

听起来像要确保没有人嗅探流量来确定您的路径的URL。也许你不希望这个URL独立于你的页面,或者用户/调用者不应该看到的其他图像。

您是否考虑过为客户端留下cookie值?也许,这样的场景:

  • 当你的客户访问的页面,这听起来像你想的图像加载到Silverlight控件。在您处理页面上的其他数据时,请将cookie值发送回浏览器。

  • 基于浏览器/调用者和所请求的图像,在Cookie中放置腌制/散列值。

  • 假设图像是someImage.png,客户端的IP地址是10.10.10.10。使用一些盐像图像的数据库标识符,以确保图像之间的唯一性。我们假设它有ID 509.

  • 通过单向加密方法(即AES)使用您保守秘密的强密钥运行字符串“509_someImage.png_10.10.10.10”。让我们假装你的结果是'biglongcrazyrandomstring123',但它显然会更长。

  • 对查询字符串调用image.ashx页面,强制包含该值(即image.ashx?img=someImage.png&key=biglongcrazyrandomstring123)。

  • 在服务器端,您转到您的数据库并检索someImage.png的ID。通过相同的加密算法运行请求者的IP地址,图像文件名和数据库ID。将THAT值与查询字符串中发送的值进行比较。如果它们匹配,那么你知道你把这个字符串放在它们的cookie中。相反,你合理地知道他们不可能猜到它。

  • 如果有人试图混淆查询字符串值,则每次都会失败,因为您正在比较两个生成的值。

相关问题