C# 如何保护用户上传的照片等资源

C# 如何保护用户上传的照片等资源,c#,asp.net,.net,c#-4.0,asp.net-4.0,C#,Asp.net,.net,C# 4.0,Asp.net 4.0,我有一些用户上传的PDF文件,它们保存在硬盘上。这些PDF实际上应该只有上传的用户才能看到。但目前它并不安全。如果有人猜到PDF的名称,其他人也可以查看它 例如:http://www.something.com/PDFs/abcghjiekm.PDF 这是一种安全威胁。我希望能够做的是有某种逻辑来处理对这些PDF的请求,并将其与我的DB进行比较,以查看此PDF是否确实属于请求它的用户。我该怎么做 编辑:我无法使用FileStream,因为我的网站已经启动并运行。我不想更改所有的代码库并进入每个a

我有一些用户上传的PDF文件,它们保存在硬盘上。这些PDF实际上应该只有上传的用户才能看到。但目前它并不安全。如果有人猜到PDF的名称,其他人也可以查看它

例如:
http://www.something.com/PDFs/abcghjiekm.PDF

这是一种安全威胁。我希望能够做的是有某种逻辑来处理对这些PDF的请求,并将其与我的DB进行比较,以查看此PDF是否确实属于请求它的用户。我该怎么做


编辑:我无法使用FileStream,因为我的网站已经启动并运行。我不想更改所有的代码库并进入每个aspx页面来查找访问PDF的位置。

我认为您应该使用FileStream,Sql Server 2008及更高版本的一部分来存储这些文件。


使用它,文件区域存储在磁盘上,但在特殊的位置。当有人想要更改任何文件时,您没有问题。

我认为您应该使用FileStream,Sql Server 2008及更高版本的一部分来存储这些文件。


使用它,文件区域存储在磁盘上,但在特殊的位置。当有人想要更改任何文件时,您就没有问题了。

您可以通过IIS中的特殊HttpHandler而不是StaticFile Handler来处理PDF,并检查访问权限


如果您使用的是MVC,则可以使用类似于/PFDs/{file}.pdf的路由,并使用控制器返回内容

您可以通过IIS中的特殊HttpHandler而不是StaticFile处理程序来处理PDF,并检查访问权限


如果您使用的是MVC,则可以使用类似于/PFDs/{file}.pdf的路由,并使用控制器返回内容

您还可以通过隐晦性使用某种安全性,这种安全性较低,但更容易实现。例如,您可以将PDF保存在一个文件夹中,如PDFs//abcghjiekm.PDF,其中guid是上载用户的用户ID。这种方式猜测给定文件的正确路径要困难得多

如果您真的需要保护私人用户数据不受未经授权的访问,我不推荐这种方法,但是如果您试图实现某种错误保护(这样用户就不会错误地访问彼此的文件),那么应该这样做


如果你需要真正的安全性,我建议你按照Grumbler85的建议去做。

你也可以使用某种隐蔽的安全性,这种安全性较低,但更容易实现。例如,您可以将PDF保存在一个文件夹中,如PDFs//abcghjiekm.PDF,其中guid是上载用户的用户ID。这种方式猜测给定文件的正确路径要困难得多

如果您真的需要保护私人用户数据不受未经授权的访问,我不推荐这种方法,但是如果您试图实现某种错误保护(这样用户就不会错误地访问彼此的文件),那么应该这样做


如果你需要真正的安全性,我建议你按照Grumbler85的建议去做。

假设我已经有了一个网站,并且已经在我的硬盘上了。我不想使用FileStream。我认为在这种情况下,您可以使用web.config@lszj中的位置标记:据我所知,位置标记只能在用户未登录时使用。登录后,用户a也可以查看B的PDF。据我所知,没有什么可以改变的。比如说,我已经有了一个网站,并在我的硬盘上。我不想使用FileStream。我认为在这种情况下,您可以使用web.config@lszj中的位置标记:据我所知,位置标记只能在用户未登录时使用。登录后,用户a也可以查看B的PDF。据我所知,没有什么可以更改的。@Errol:Yes:)我的会话中有userID等。将文件存储在无法从web访问的位置,并使用直接授权文档/PDF是不可能的,您必须通过创建页面或@Jay提到的东西来做一些变通。检查此项,@Errol:Yes:)我的会话中有userID等。将文件存储在无法从web访问的位置,并使用直接授权文档/PDF是不可能的,您必须通过创建页面或@Jay提到的内容来解决此问题。检查此项,很好,但正如我标记的那样,我的问题是针对Asp.NET4.0而不是MVC。Asp.NET4.0是MVC4(官方名称是Asp.NETMVC4)和WebForms的超集。在Webforms中使用我的第一种方法是使用HttpHandler。很好,但正如我标记的那样,我的问题是针对Asp.Net 4.0而不是MVC。Asp.Net 4.0是MVC 4(官方名称是Asp.Net MVC 4)和Webforms的超集。在Webforms中,使用我的第一种方法处理HttpHandler。