在Web应用程序中保护silverlight图像查看器的最佳方法?

时间:2009-07-29 16:59:44

标签: asp.net silverlight security image web-applications

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

所以我的想法是做以下事情:

  1. 承载Silverlight控件的Web应用程序。
  2. 用于处理从数据库中提供图像的ashx文件。
  3. 通过silverlight控件访问时的ashx文件将检查会话以确保他们可以访问此图像。 (我假设silverlight控件和web应用程序共享相同的会话,这可能是一个错误的假设。)
  4. 这个设置听起来是否正确,还是有其他方法可以解决这个问题?这将是我第一次将Silverlight控件集成到Web应用程序中。

2 个答案:

答案 0 :(得分:0)

听起来您希望确保没有人嗅探流量来确定ashx路径的网址。也许您不希望该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中。相反,你合理地知道他们不能猜到它。

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

答案 1 :(得分:0)

Silverlight控件存在于浏览器的上下文中。我认为,如果您是Silverlight控件,请调用您的ashx页面,ashx页面将在您的Web应用程序运行的同一会话下执行。

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

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