AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 113747
Accepted
Eliot Sykes
Eliot Sykes
Asked: 2010-02-18 04:05:26 +0800 CST2010-02-18 04:05:26 +0800 CST 2010-02-18 04:05:26 +0800 CST

这是不安全的 Apache 重写规则吗?

  • 772

我有一个这样的重写规则:

RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI} -f
RewriteRule ^(.*)$ cache/$1 [QSA,PT,L]

此规则的简要说明:它检查缓存目录中是否存在请求的文件。如果是,则它为缓存目录提供服务。

例如,对http://somehost.tld/about.html的请求 将从http://somehost.tld/cache/about.html 提供(如果该文件存在)。

我担心的是 RewriteRule 是否不安全。是否有人可以请求这样的 URL,其中包含两个句点以向上移动目录:

http://somehost.tld/../../private_file.txt

那么导致 private_file.txt 从我的 apache 公用文件夹上方的目录中提供服务?

apache-2.2 rewrite mod-rewrite
  • 2 2 个回答
  • 365 Views

2 个回答

  • Voted
  1. Best Answer
    Spyder
    2010-02-18T05:20:21+08:002010-02-18T05:20:21+08:00

    在 URL 中包含..在 HTTP 请求级别或浏览器级别都不起作用。浏览器只是解析相对路径,发送对适当文件的请求(将其限制在服务器根目录)。所以在地址栏中输入:

    http://somehost.tld/../../private_file.txt
    

    将导致对以下内容的 HTTP 请求:

    http://somehost.tld/private_file.txt
    

    换句话说,有人必须手动制作一个 HTTP 请求../..才能到达 Apache。这又回来了HTTP 400 Bad Request。来自我的本地服务器的示例(没有重写规则):

    ritsuko:~ spyder$ curl -v http://localhost/../randomfile
    * About to connect() to localhost port 80 (#0)
    *   Trying ::1... connected
    * Connected to localhost (::1) port 80 (#0)
    > GET /../randomfile HTTP/1.1
    > User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8l zlib/1.2.3
    > Host: localhost
    > Accept: */*
    > 
    < HTTP/1.1 400 Bad Request
    < Date: Wed, 17 Feb 2010 13:18:40 GMT
    < Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8l DAV/2
    < Content-Length: 226
    < Connection: close
    < Content-Type: text/html; charset=iso-8859-1
    < 
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>400 Bad Request</title>
    </head><body>
    <h1>Bad Request</h1>
    <p>Your browser sent a request that this server could not understand.<br />
    </p>
    </body></html>
    * Closing connection #0
    
    • 2
  2. M23
    2010-02-18T05:06:56+08:002010-02-18T05:06:56+08:00

    apache不允许“向上移动目录”。

    • 0

相关问题

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve