PHP是否可以安全地访问文档根目录下的文件?

时间:2014-06-17 02:01:58

标签: php security mysqli

我见过很多像这样的问题,但是我遇到了一些非常简单的问题,我想知道它是否安全。

据我了解,我的文档根目录是我的主机上的一个名为public_html的文件夹(rochen)。我想第一次实现一个数据库,需要保护用户和密码等。从我读过的,这些信息需要在文档根目录之外。

一个非常简单的例子是在与public_html相同的级别创建一个ini文件,并在我的PHP中使用这一行来访问它(假设我的php文件直接在public_html下面):< / p>

$config = parse_ini_file('../config.ini');

我从DOS中知道的点点是旧的“一级”技巧。

然后数据库将使用像这样的ini文件内容:

$connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']);

带有敏感信息的我的ini文件位于文档根目录之上,根据我所读的内容,它是安全的。与我读过的许多其他答案相比,这似乎是一种更简单的实现结果的方法。这是正确的还是我有一些我遗漏的大量安全漏洞?

2 个答案:

答案 0 :(得分:3)

  

一个非常简单的例子是在与public_html相同的级别创建一个ini文件,并在我的PHP中使用这一行来访问它(假设我的php文件直接位于public_html下面)。

这种思考本身并不能保护任何东西。

如果您的任何脚本需要读取该文件,则该文件可能存在风险。所以关键是不要提出精心设计的文件系统方案存储配置文件,而是要了解如何通过几个简单的步骤有效地阻止对文件的访问。

例如,这是您的配置文件:

$config = parse_ini_file('../config.ini');

你是PHP的,担心窥探眼睛,对吗?好吧,如果这是一个自定义的PHP代码库,您可以随意命名该文件,那么只需将其设为.ini.php这样的文件:

$config = parse_ini_file('../lembasts_config.ini.php');

大多数黑客攻击的关键想法来自试图访问常用命名文件的恶意机器人。所以config.ini是一些脚本小子已编码寻找的东西。他们不知道lembasts_config.ini更不用说lembasts_config.ini.php。因此,根据您的需要使配置名称特殊,将有助于“隐藏”您的配置。

那么.php的{​​{1}}版本究竟是什么?好吧它命名为PHP,所以你可以在文件本身中这样的东西:

lembasts_config.ini.php

这个想法是;<?php ;die(); ;/* username="[your username]" password="[your password]" dbname="[your dbname]" ;*/ ;?> 将按预期解析ini值。但由于parse_ini_file扩展名,.php会在有人尝试在网络浏览器中打开时运行。

网络安全的关键很简单:绝大多数入侵来自寻找常见漏洞的自动脚本。使用这样的简单技术插入常见的漏洞,让您的代码库更加安全。

答案 1 :(得分:0)

没关系 导致问题的是包含&#34; ..&#34;的动态文件名,例如http://site.tld/page?param=value执行include "..".$_GET['param'];