如何防止脚本在目录中运行?
Posted
技术标签:
【中文标题】如何防止脚本在目录中运行?【英文标题】:How can I prevent scripts from running inside a directory? 【发布时间】:2012-06-25 12:45:50 【问题描述】:我的网络根文件夹中有一个用于存储图像的文件目录,我想知道如何保护该文件夹。我阻止人们将脚本上传到该文件夹,我检查文件扩展名,如果它不是图像则不会保存到该文件夹。
但是伪造扩展很容易,如果有人设法将脚本上传到我的文件目录并从浏览器访问它会发生什么
所以我需要一种方法来防止脚本在该文件夹中运行并且只允许图像运行。
我知道 htaccess 可以做到这一点,但我不知道如何设置它。我的 .htaccess 文件是这样的:
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
ForceType application/octet-stream
<FilesMatch "(?i)\.(gif|jpe?g|png)$">
ForceType none
</FilesMatch>
Options All -Indexes
但它不起作用,我在该文件夹中保存了一个 php 文件,然后尝试从浏览器访问它,我仍然可以访问它。你知道怎么做吗?或者如果您对此有更安全的方法,请告诉我。
谢谢
【问题讨论】:
【参考方案1】:我认为它不起作用,因为您只添加一个额外的处理程序,您还没有删除其他处理程序。
将另一个 .htaccess 文件放在要保护的文件夹中(而不是弄乱 match 指令)是最简单的方法,其中包含:
# Fix PHP, you should do matching commands for JSP and ASP, & html
RemoveType application/x-httpd-php php
# .... add the other remove-handler statements here .... #
# Optionally make these equivalent to text files.
# UPDATE: Taken this out as you dont want people to see PHP files at all
#AddType text/html php
# To disable cgi and server side includes & indexes
# You need to check the setup of Apache, some of the file types
# listed should already be handled as CGI (.pl, .py, .sh)
Options -ExecCGI -Includes -Indexes
# Completely block access to PHP files
<FilesMatch "\.(php|phps|html|htm|jsp|asp)$">
Order allow,deny
Deny from all
</Files>
# Add in any additional types to block
这涵盖了 PHP 和 CGI,你应该为 JSP 和 ASP 做匹配的命令
更新:添加代码以完全阻止对 PHP 文件的访问 - 抱歉,最初认为您只是不希望它们执行。另请注意,我已经注释掉了将 PHP 文件转换为文本文件的行。
【讨论】:
如果您希望将所有配置放在一个文件中,则不需要巧妙的匹配指令,只需将上面的配置指令放在引用您希望的目录的以上是关于如何防止脚本在目录中运行?的主要内容,如果未能解决你的问题,请参考以下文章
防止 Apache/PHP 运行影响另一个 vHost 的代码