Security 如何防止脚本在目录中运行?

Security 如何防止脚本在目录中运行?,security,.htaccess,Security,.htaccess,我的web根文件夹中有一个用于存储图像的文件目录,我想知道如何保护该文件夹。我阻止人们将脚本上传到该文件夹,我检查文件扩展名,如果它不是图像,那么它将不会保存到该文件夹 但是伪造扩展很容易,如果有人设法将脚本上传到我的文件目录并从浏览器访问它,会发生什么 因此,我需要一种方法来防止脚本在该文件夹中运行,并且只允许运行图像 我知道htaccess可以做到这一点,但我不知道如何设置它。我的.htaccess文件如下所示: AddHandler cgi-script .php .pl .py .jsp

我的web根文件夹中有一个用于存储图像的文件目录,我想知道如何保护该文件夹。我阻止人们将脚本上传到该文件夹,我检查文件扩展名,如果它不是图像,那么它将不会保存到该文件夹

但是伪造扩展很容易,如果有人设法将脚本上传到我的文件目录并从浏览器访问它,会发生什么

因此,我需要一种方法来防止脚本在该文件夹中运行,并且只允许运行图像

我知道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
AddHandler cgi script.php.pl.py.jsp.asp.htm.shtml.sh.cgi
选项-执行CGI
ForceType应用程序/八位组流
力型无
选项所有-索引
但它不工作,我在那个文件夹中保存了一个php文件,然后试图从浏览器访问它,我仍然可以访问它。你知道怎么做吗?或者如果你有更安全的方法,请告诉我


谢谢

我认为它不起作用,因为您只添加了一个额外的处理程序,而没有删除其他处理程序

将另一个.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,您应该为JSP和ASP以及html执行匹配命令
RemoveType应用程序/x-httpd-php
# .... 在此处添加其他remove处理程序语句#
#(可选)使这些文件等效于文本文件。
#更新:去掉这个,因为你根本不想让人们看到PHP文件
#AddType text/html-php
#禁用cgi和服务器端包含索引(&D)
#您需要检查Apache的设置,以及一些文件类型
#列出的应已作为CGI(.pl、.py、.sh)处理
选项-ExecCGI-Includes-index
#完全阻止对PHP文件的访问
命令允许,拒绝
全盘否定
#将任何其他类型添加到块中
这涉及到PHP和CGI,您应该为JSP和ASP执行匹配命令


更新:添加代码以完全阻止对PHP文件的访问-抱歉,起初认为您只是不想让它们执行。还请注意,我已经注释掉了将PHP文件转换为文本文件的行。

我认为它不起作用,因为您只添加了一个额外的处理程序,而没有删除其他处理程序

将另一个.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,您应该为JSP和ASP以及html执行匹配命令
RemoveType应用程序/x-httpd-php
# .... 在此处添加其他remove处理程序语句#
#(可选)使这些文件等效于文本文件。
#更新:去掉这个,因为你根本不想让人们看到PHP文件
#AddType text/html-php
#禁用cgi和服务器端包含索引(&D)
#您需要检查Apache的设置,以及一些文件类型
#列出的应已作为CGI(.pl、.py、.sh)处理
选项-ExecCGI-Includes-index
#完全阻止对PHP文件的访问
命令允许,拒绝
全盘否定
#将任何其他类型添加到块中
这涉及到PHP和CGI,您应该为JSP和ASP执行匹配命令


更新:添加代码以完全阻止对PHP文件的访问-抱歉,起初认为您只是不想让它们执行。还请注意,我已经注释掉了将PHP文件转换为文本文件的行。

如果您希望将所有配置保存在一个文件中,您不需要一个聪明的匹配指令,只需将上面的配置指令放在一个块中,该块引用您希望配置的目录correct@Cheekysoft。我通常更喜欢将.htaccess文件放在它们所属的文件夹中,因为这意味着即使移动它们,它们仍然可以工作。当然,更好的做法是完全不使用它们,而是在您有权访问它们的情况下,将它们放入相应的Apache配置文件中。我尝试在文件目录中的.htaccess文件中使用您的代码,但我仍然可以访问.php文件。更新后,可以完全阻止通过扩展名访问一系列文件类型。只需将正则表达式调整为suite即可。如果您希望将所有配置保存在一个文件中,您不需要聪明的match指令,只需将上面的config指令放在一个块中,该块引用您希望配置的dir correct@Cheekysoft。我通常更喜欢将.htaccess文件放在它们所属的文件夹中,因为这意味着即使移动它们,它们仍然可以工作。当然,更好的做法是完全不使用它们,而是在您有权访问它们的情况下,将它们放入相应的Apache配置文件中。我尝试在文件目录中的.htaccess文件中使用您的代码,但我仍然可以访问.php文件。更新后,可以完全阻止通过扩展名访问一系列文件类型。只需将正则表达式调整为suite即可。