C# 安全地将图片存储在共享上,以便在web应用程序中使用

C# 安全地将图片存储在共享上,以便在web应用程序中使用,c#,asp.net,security,C#,Asp.net,Security,假设我们有摄影师在一个部门使用一台电脑。他们拍摄活动的照片,然后在应用程序中上传和组织照片。默认情况下,该应用程序获取某人的共享位置并将图片复制到该共享 在web服务器上有一个我们指向的共享。我们希望这样做,只有该应用程序才能访问该共享,只有该web应用程序(当然,任何具有物理服务器管理员登录的人都可以) 另外,还应确保任何web浏览器都可以显示图像(我相信Firefox不能将文件位置设置为\\server\share) 从逻辑上看,它是这样的: 摄影师使用公共计算机上的应用程序 应用程序复制图

假设我们有摄影师在一个部门使用一台电脑。他们拍摄活动的照片,然后在应用程序中上传和组织照片。默认情况下,该应用程序获取某人的共享位置并将图片复制到该共享

在web服务器上有一个我们指向的共享。我们希望这样做,只有该应用程序才能访问该共享,只有该web应用程序(当然,任何具有物理服务器管理员登录的人都可以)

另外,还应确保任何web浏览器都可以显示图像(我相信Firefox不能将文件位置设置为
\\server\share

从逻辑上看,它是这样的:

  • 摄影师使用公共计算机上的应用程序
  • 应用程序复制图像以共享
  • Web应用程序使用图像(跨浏览器)
  • 没有来自公共计算机的用户可以访问这些图像编辑:网页上的显示不是问题,而是我如何在webroot中安全地存储文件,以便我的应用程序可以显示位于webroot中共享位置内的图像。仅允许终端计算机上的应用程序访问该共享,而不允许从该计算机运行应用程序的用户访问该共享。也就是说,一个人不能只运行一个命令,然后从任何他想要的地方下载整个目录内容
    等等,什么?您想在浏览器中向用户显示一些图片,但不允许他们下载?这是不可能的。

    只需将共享权限(即右键单击)配置为仅限于某个windows用户即可。在该windows用户下运行应用程序,使其能够访问该共享。完成了

  • 使用创建服务帐户并运行/模拟web和桌面应用程序 服务帐户
  • 共享服务帐户的图片(位于共享驱动器上),以便没有其他图片
    用户可以访问

  • 不,我希望他们只能看到网页上的图像。我不希望终端计算机上的任何人都能够查看web服务器从中获取这些图像的文件夹。看过facebook的电影吗?我不希望有人能够在我的共享目录中找到我的所有文件,并滥用人们委托给我的图片。那么,你必须采用像@Adam Tuliper建议的解决方案。仅允许您的asp.net应用程序访问共享上的文件(并拒绝所有其他用户访问),并创建一个类似于
    photo.asp?id=123
    的页面,然后在共享上查找
    photo123.jpg
    ,读取该页面,并将其数据传递给访问者。这仍然很容易在HttpRequests中循环,并在每次抓取Web服务器上的每幅图片时将ID增加一个。然后将ID随机化,比如GUID或文件名的MD5哈希加上预定的salt。