我有一个asp.net web应用程序。由于安全问题,我需要防止执行可能上传到我的主机的PHP脚本。黑客有可能使用这个PHP文件破坏我的服务器吗?考虑到黑客可以找到上传文件的虚拟路径,他们可以使用url访问上传文件,然后执行php文件。
我怎样才能防止这个问题。
我需要防止执行可能上传到我的主机
一般来说,这就像不运行访问者上传的东西一样简单根本不应该有机会,PHP或其他方式,让用户上传的文件执行。
如果非要我猜的话,您的问题源于获取用户上传的文件并将其填充到文档根目录中的文件夹中。当您稍后为它们提供服务时,IIS会像处理常规的"站点文件"一样处理这些文件,并将它们通过关联的处理程序进行传递。
处理此问题的一种方法是简单地限制用户可以上传的文件类型。创建白名单:
*.png
*.jpeg
*.jpg
*.gif
etc.
如果用户上传的内容不是白名单上的内容,请拒绝该文件或在服务器上重命名和/或压缩该文件。
处理此问题的另一种方法,可能也是更好的方法,是将文件放在文档根目录之外,或者放在数据库中,或者放根目录上方的文件夹中。然后,用一个定制的处理程序运送它们进出。
如果你选择了一个文件夹来填充下载,你应该能够在你的配置中为目录(未测试)中的所有文件注册一个处理程序:
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="path/to/downloads/*"
type="YourHanlderClassName, YourHandlerAssemblyName" />
</httpHandlers>
</system.web>
</configuration>
这也应该适用于文档根目录中的文件,这在没有数据库访问的共享托管情况下可能是必要的;但这并不理想。打字和其他配置错误可能会使文件夹中的某些内容可以直接访问。
如果你不关心访问控制,你也可以在上传/下载文件夹中用一个通用的MIME类型填充一个Web.config
:
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".*" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>
但是,我根本没有测试过的场景。而且它不允许优雅的访问控制。所以,你肯定需要玩它。。。