对于某些应用程序,用户可以上传自己的文件。 因为这可能是非常大的文件,他们被允许上传到通过自己的FTP客户端。
当然,我不希望他们上传一些,使他们能够访问服务器上的所有其他文件PHP文件。 有一个问题我想阻止这种行为方式是只有在这些文件夹拒绝访问特定文件类型(如PHP,RB,吡啶等)。
我已经找到了否认是在文件夹中的文件类型的访问文件夹,文件,文件的文件夹中,但没有。
我试着结合我学到了什么,如:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
要改变
<Files uploads/ "\.inc$">
Order allow,deny
Deny from all
</Files>
或替代方法
RewriteRule ^(\.php) - [F,L,NC]
至
RewriteRule ^(uploads/\.php) - [F,L,NC]
但是,我无法找到我应该使用什么样的语法。
因此,例如,我可以有以下的(基本的例子):
/index.php
/uploads/
hack.php
hack.rb
hack.py
pony.jpg
我想hack.php / RB / PY不可用,但一切可用。 我应该使用什么语法?
该FilesMatch指令适用纯粹的文件名。 它不会在路径部分研究所有。
如果要指定根.htaccess文件的指令来控制一个子目录,你可以使用mod_rewrite的 。
试试这个:
RewriteRule ^uploads/.*\.(php|rb|py)$ - [F,L,NC]
上述将阻止在/上传目录或子目录.PHP或.RB或结束的.py任何文件名。 例如,它会阻止:
- /uploads/something.php
- /uploads/something/more.php
请注意,在重写规则没有斜线。 你需要在指令中使用的路径将取决于在那里的放置有所不同。 上面的指令中,如果放在文档根目录的.htaccess文件,将文件为工作在一个名为上传目录是直接文档根目录下。
虽然上述回答你的问题,这将是更安全的只允许特定的文件,而不是试图阻止的文件。 通常一个服务器会比你列出的其他扩展执行文件。
你可以这样做:
RewriteCond %{REQUEST_URI} ^/uploads [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif)$ [NC]
RewriteRule .* - [F,L]
利用上述,如果请求URI开始/上传操作,但不与所述指定的扩展的一端,然后将其禁止。 你可以改变任何适合您需要的扩展。 但这样一来,你需要,而不是发现得太晚,你错过了阻止一个可允许扩展。
此规则(从你的问题)
RewriteRule ^(uploads/\.php) - [F,L,NC]
将阻止
- /uploads/.php
- /uploads/.phpmore
但它不允许目录名和文件扩展名之间的任何东西。
如果你要使用rewirte规则,你可能想了解更多关于正则表达式。 我常常把www.regular-expressions.info当我需要仰视的东西。
你可以把一个在的.htaccess的upload
目录。 然后,指令将适用于该目录及其下只有目录。 见指令是如何应用的详细信息。
所以,用的.htaccess FilesMatch
可以限制匹配的文件访问*.inc
, *.php
等等,当它在public
目录
<FilesMatch "\.(?:inc|php|py|rb)$">
Order allow,deny
Deny from all
</FilesMatch>
您可以使用下面的简单和一个衬垫的解决方案,以拒绝certen文件类型的访问权限:
RedirectMatch 403 ^/folder/.+\.(png|gif|js)$
如果他们试图访问/folder/file.extension这将返回客户端403次禁止访问错误。