[英]How to prevent including database config.php from another client?
我们有这个 config.php 文件:
<?php
$host = "host";
$dbname = "db";
$user = "user";
$pass = "pass";
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die("Error");
}
?>
而这个结构
/www/
index.php
config.php
索引文件可通过www.example.com/index.php
访问,但 config.php 文件也可访问(通过www.example.com/config.php
)。
其他人可以在 php 文件中包含www.example.com/config.php
并使用我的$conn
执行代码吗? 如何防止这种情况?
确实,如果您将文件留在 web 根目录中,则 web 服务器将在匹配的请求 URI 到达时执行它们。
但是,请了解源代码(通常)不被客户查看。 例如,当有人请求/index.php
时,他们看不到 PHP 源代码。 他们只看到它的 output。 同样,如果有人要请求/config.php
,给定示例代码您的问题,他们应该得到的只是一个空响应。 所以,回答你的问题...
其他人可以在 php 文件中包含 www.example.com/config.php 并使用我的 $conn 执行代码吗?
不,他们不能。
要执行代码,它们需要在您的服务器上运行代码。
现在,从 web 根目录中获取config.php
和任何其他包含仍然是一个好习惯。 这样做的原因是为了防止在 PHP 在 web 服务器上被禁用的情况下暴露代码。 尝试升级您的 web 服务器或其他东西,破坏配置,在实时服务器上意外禁用 PHP 并不少见,现在每个人都可以看到您的所有源代码。 如果该源代码不在 web 根目录中,则他们无法请求任何内容。
此外,web 根目录中的文件通常有更多的打开权限。 因此,在可能的情况下将事情排除在外只是一个好习惯……但不是直接出于您担心的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.