【问题标题】:Block GET request to a directory with .htaccess使用 .htaccess 阻止对目录的 GET 请求
【发布时间】:2021-10-09 13:54:35
【问题描述】:

我想阻止所有HTTP GET 对包含视频和图像的目录的请求,例如upload 文件夹。如果用户带有HTTP POST,则允许用户访问。目前我正在使用

#Contents of .htaccess

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^PATH.*$ [NC]
RewriteCond %{HTTP_REFERER} !^PATH.*$ [NC]
RewriteRule .(mp4|mp3|avi)$ - [F]

但它阻止了所有请求。我想通过HTTP POST 请求访问它。

请帮帮我。

【问题讨论】:

  • "如果用户使用 HTTP POST 来访问,则允许用户访问。" - 为什么需要允许对包含视频和图像的目录的 POST 请求?

标签: php .htaccess


【解决方案1】:

您可以使用以下基于mod-rewrite 的解决方案来阻止对upload 文件夹的所有GET 请求。

RewriteEngine On

RewriteCond %{THE_REQUEST} GET\s/upload [NC]
RewriteRule ^ - [F,L]

或者

RewriteEngine On

RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^upload - [F,L]

【讨论】:

  • 我用过这个,但是目录是通过HTTP GET访问的
  • @TheIRF 这确实有效。尝试将代码放在 htaccess 的顶部。
  • 这是我文件中唯一的脚本。
  • 让我澄清一下我正在通过PostMan 测试它并使用POSTGET 方法将请求直接发送到http://localhost/Test/uploads/Full-Send_3.mp4 之类的文件,并且仍然获得该文件。跨度>
  • 它工作了,但我还有一件事我有子目录如何限制它?
【解决方案2】:

您需要编写只允许发布请求的 htaccess 规则。 遵循以下脚本。

<Directory "/var/www/folder">
    <Files "index.php">
        Require method POST
    </Files>
</Directory>

但是,由于这是授权部分的一部分,您可能想试试这个:

<Directory "/var/www/folder">
    <Files "index.php">
        <LimitExcept POST>
            Order allow,deny
            Deny from all
        </LimitExcept>
    </Files>
</Directory>

【讨论】:

  • 感谢您的回复。我尝试将您的代码替换为 /var/www/folderhttp://localhost/Test/ 它返回 Internal Server Error
  • 不,这将是您的目录路径而不是您的浏览器网址
  • 我用F:\Work\htdocs\project\upload 替换它并尝试用HTTP POST 获取它,但返回500 Internal Server Error
  • 尝试给 /project/upload
  • 目录指令不能在htaccess中使用,可以使用FilesMatchmod-rewrite代替。
【解决方案3】:

您还可以使用.htaccess 中的 Apache 2.4 表达式执行以下操作:

<If "%{REQUEST_URI} =~ m#^/upload/#">
    Require method POST
</If>

任何以/upload/ 开头的 URL 路径都将被阻止,除非它是 POST 请求。

【讨论】:

  • 感谢您的关注。但抱歉没有用。
  • 这个脚本还有一件事是用于自定义 CMS,如 wordpress
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2020-10-02
  • 2012-01-04
  • 2013-04-22
  • 1970-01-01
相关资源
最近更新 更多