gpt4 book ai didi

linux - 为什么 Apache 不允许从 index.html 中访问 Web 根目录之外的文件?

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:41 25 4
gpt4 key购买 nike

我的项目具有以下组织,但无法从 HTML 代码中访问相关的 CSS 和 JavaScript 文件,除非我创建从文件到 Web 根目录的符号链接(symbolic link)。

这是 Apache 的正常行为还是问题出在其他地方?

如果我删除符号链接(symbolic link)并更正 src 属性中的路径,这些外部文件的内容将无法访问。

userName@hostName:/var/www/test$ tree
.
├── css
│   └── style.css
├── html
│   ├── code.js -> ../js/code.js
│   ├── index.html
│   ├── jquery-3.2.1.js -> ../libs/jquery-3.2.1.js
│   └── style.css -> ../css/style.css
├── js
│   └── code.js
└── libs
└── jquery-3.2.1.js

4 directories, 7 files

userName@hostName:/var/www/test$ less html/index.html

<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="./style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="./code.js"></script>
</html><!-- html -->

html/index.html (END)

^ 有效

userName@hostName:/var/www/test$ tree
.
├── css
│ └── style.css
├── html
│ ├── index.html
├── js
│ └── code.js
└── libs
└── jquery-3.2.1.js

4 directories, 4 files

userName@hostName:/var/www/test$ less html/index.html

<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="../js/code.js"></script>
</html><!-- html -->

html/index.html (END)

^ 不起作用

userName@hostName:/var/www/test$ tree -p
.
├── [drwxrwxr-x] css
│   └── [-rw-rw-r--] style.css
├── [drwxrwxr-x] html
│   ├── [lrwxrwxrwx] code.js -> ../js/code.js
│   ├── [-rw-rw-r--] index.html
│   ├── [lrwxrwxrwx] jquery-3.2.1.js -> ../libs/jquery-3.2.1.js
│   └── [lrwxrwxrwx] style.css -> ../css/style.css
├── [drwxrwxr-x] js
│   └── [-rw-rw-r--] code.js
└── [drwxrwxr-x] libs
└── [-rw-rw-r--] jquery-3.2.1.js

4 directories, 7 files

^ 文件权限

userName@hostName:/etc/apache2$ less sites-available/test.local.conf

<VirtualHost *:80>
ServerAdmin myEmail@email.com
DocumentRoot /var/www/test/html
ServerName test.local
ErrorLog ${APACHE_LOG_DIR}/test.local.error.log
CustomLog ${APACHE_LOG_DIR}/test.local.access.log combined
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

sites-available/test.local.conf (END)

^ 虚拟主机配置

userName@hostName:/var/www/test$ uname -v

#35~16.04.1-Ubuntu


userName@hostName:/var/www/test$ apache2 -v

Server version: Apache/2.4.18 (Ubuntu)

^系统信息

最佳答案

出于安全原因,Apache 将(默认情况下)不允许 HTTP 请求访问网站根目录之外(上方)的文件。

您的文档根目录设置为:DocumentRoot/var/www/test/html,因此所有文件(包括非 HTML 文件)都需要在此目录中。不要仅仅因为该目录名为 html,就认为它应该只包含 HTML 文件。

工作目录结构

userName@hostName:/var/www/test/html$ tree
.
├── css
│ └── style.css
├── js
│ └── code.js
├── libs
│ └── jquery-3.2.1.js
└── index.html

3 directories, 4 files

userName@hostName:/var/www/test/html$ less index.html

<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="js/code.js"></script>
</html><!-- html -->

index.html (END)

您将看到所有文件都存储在 /html 目录或其子目录中。 JS 和 CSS 文件的 HTML 链接已更新,以引用正确的文件位置。

如果 Apache 允许访问根目录之外(上方)的文件,您将遇到重大安全问题。

例如,假设某人有一个执行以下操作的 HTML 文件:

<!doctype HTML>
<html>
<head>
<title>Test</title>
</head>
<body>
<a href="../../../var/private/supersecret.conf">link to secret config file</a>
</body>
</html>

这将允许用户访问服务器上他们想要的任何随机文件。

关于linux - 为什么 Apache 不允许从 index.html 中访问 Web 根目录之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48970033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com