代码之家  ›  专栏  ›  技术社区  ›  Kelsey

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

  •  1
  • Kelsey  · 技术社区  · 15 年前

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

    所以我的想法是:

    1. 承载Silverlight控件的Web应用程序。
    2. 一个ASHX文件,用于处理数据库中图像的服务。
    3. 通过Silverlight控件访问ashx文件时,将检查会话以确保它们确实可以访问此图像。(我假设Silverlight控件和Web应用程序共享同一会话,这可能是一个错误的假设。)

    这个设置听起来是正确的还是有其他方法来接近它?这将是我第一次将Silverlight控件集成到Web应用程序中。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jeremy    15 年前

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

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

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

        2
  •  0
  •   p.campbell    15 年前

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

    您是否考虑为客户留下cookie值?可能是这样的情况:

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

    • 根据浏览器/调用者和请求的图像在cookie中删除一个salt/hashed值。

    • 假设图像是 someImage.png ,客户端IP地址为10.10.10.10。使用一些salt,比如图像的db标识符,以确保图像之间的唯一性。让我们假设它有身份证509。

    • 通过单向加密方法(即aes)运行字符串“509-someimage.png-10.10.10.10”,使用一个在您端上保密的强密钥。让我们假设您的结果是“biglongcrazyrandomstring123”,但显然会更长。

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

    • 在服务器端,您转到数据库并检索 一些图片 .通过相同的加密算法运行请求者的IP地址、映像文件名和数据库ID。将该值与查询字符串中发送的值进行比较。如果他们匹配,那么你就知道你把字符串放在他们的cookie中了。更确切地说,你知道他们不可能猜到。

    • 如果有人试图处理这个querystring值,那么每次都会失败,因为您正在比较两个生成的值。