【问题标题】:file upload security, htaccess, and changing extensions文件上传安全、htaccess 和更改扩展名
【发布时间】:2010-11-25 19:26:39
【问题描述】:

所有。我对网络开发很陌生,所以请温柔一点。如果我发布一个已经讨论过的主题,请道歉;我搜索但在另一个线程中找不到我正在寻找的东西。

背景:我有一个允许文件上传的网站,但是一旦上传,除了我之外的任何人都不需要查看它们。我已经实施了一些安全措施,例如让 php 上传脚本只允许某些扩展名,将上传的文件 chmoding 到 0644,以及在上传文件夹内的 htaccess 文件中对各种扩展名使用 -ExecCGI。

问题(其中三个;你不走运吗):

1) 我想让我的 htaccess 文件将 php 扩展名改写成别的东西。我找到了一些代码来做到这一点,但似乎无法让它工作:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^PUT$ [OR]
RewriteCond %{REQUEST_METHOD} ^MOVE$
RewriteRule ^(.*)\.php /site_redone/uploads/$1.nophp

网站结构是这样的(至少现在我正在重做网站): mysite.com/site_redone/uploads

我知道我的共享服务器的主机允许 mod_rewrite。他们正在运行 php 5.2.10。不确定我的问题是否是路径问题(我还没有完全掌握那部分),但在 RewriteRule 部分尝试了各种路径排列均无济于事。

2) 我目前为文件名附加了一种时间戳 (time()),以防止被同名文件覆盖,例如,myfile.doc 变为 myfile1252087685.doc。我可以将扩展名存储在 MySQL 数据库中,只需将文件名重写为以 .txt 或我的 php 上传脚本中的某些内容结尾,但我不确定这是否会完成与上述 mod_rewrite 尝试相同的事情。

3) 有没有办法将 htaccess 文件从上传文件夹放在更高的目录中,这样它就不会在上传文件夹中被我的一些 ne'erdowell 覆盖?不过,我只希望它影响上传文件夹,而不是它所在的目录。我猜这以某种方式涉及使用目录,但我不知道该怎么做。我有没有提到我是新手?

提前致谢!

【问题讨论】:

    标签: php security .htaccess upload


    【解决方案1】:

    好吧,看来我试图做的事情实际上是不可能的,至少不是我试图做的那样。我在 modrewrite.com 论坛上得到了一些帮助,该论坛告诉我,因为我通过 html 表单使用文件上传,所以上面的重写规则将无法对文件名起作用。上面的代码 sn-p 可能用于,我引用,“WebDAV 或类似的,更像 FTP”。我将不得不坚持使用 php 来清除不受欢迎的人。无论如何,希望对某人有所帮助!

    【讨论】:

      【解决方案2】:

      我认为 RewriteRule 正则表达式匹配整个路径,而不是相对于 .htaccess 文件的位置。不过不确定。

      所以你可能想尝试这样的正则表达式:

      ^.*/([^/]*).php$
      

      或许:

      ^/site_redone/uploads/([^/]*)\.php$
      

      我以前从未将 mod_rewrite RewriteRule 放在子目录中,因此建议您将上述内容用于您的顶级 .htaccess

      我认为 .htaccess 中不允许使用 <Directory>,但还有一些其他类似的指令有效。 (FilesMatch 什么的?)

      等等...你不是说要拒绝对整个文件夹的网络访问吗?您可以将任何以/site_redone/uploads/ 开头的内容重写为一个 php 脚本,该脚本显示一个错误页面,其中包含拒绝访问的 http 错误代码。所以像这样的表达式:^/site_redone/uploads/.*$

      【讨论】:

      • 感谢您的快速回复,杰森!从 modrewrite.com 上的教程中,我的(不可否认)理解是正则表达式是相对于 htaccess 文件的,但 RewriteRule 的后半部分需要整个路径。但无论如何,你的正则表达式和我尝试过的类似变体没有给我任何爱。那好吧。我不太关心查看文件夹的人,而不是恶意代码上传,但我当前的 htaccess 文件应该防止公共查看和代码执行。我只是没有我应该具备的安全知识,所以我试图覆盖我所有的基础。
      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 2017-03-12
      • 1970-01-01
      • 2012-12-30
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多