我有一个受保护的Web应用程序,它将用户详细信息存储在会话对象中。我正在构建一个Silverlight控件来查看存储在数据库中的图像,并且需要保护对这些图像的访问。我不是想阻止复制或类似的东西,但我需要确保访问图像的用户实际上有权查看图像,这可以通过检查会话中的用户数据来实现。
所以我的想法是做以下事情:
这个设置听起来是否正确,还是有其他方法可以解决这个问题?这将是我第一次将Silverlight控件集成到Web应用程序中。
答案 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页面中进行检查。
模拟和测试是一个简单的场景。