我正在做一个CRUD项目,我的数据库连接参数保存在一个名为conn.hp的文件中,其代码在下面给出
<?php
$conn = @mysql_connect('127.0.0.1','root','');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mt', $conn);
?>
我使用include函数将此文件链接到任何需要数据库连接的地方,如
<?php
include 'conn.php';
?>
但我只是想知道这是否不是安全漏洞,我的意思是,任何人都可以编写代码,只需包含连接文件,然后就可以在我的数据库上操作。
我该如何阻止这种情况?我知道不使用conn.hp并将数据库连接代码写入每个需要使用数据库的php页面可以解决这个问题,但问题是,如果我需要更改数据库连接参数,那么我将不得不更改每个需要使用数据库的文件中的参数,这是不可行的,因为我可能最终拥有数百个这样的文件。那么这是怎么回事呢?
关于这个话题有很多话要说。你必须记住,从技术上讲,这些文件当然是供人们使用的!当一个人访问你的网站时,他们就是这么做的——使用你的文件!你要避免的是允许他们恶意使用它们。例如,您需要确保在进行数据库查询时使用准备好的语句。您还可以通过在父文件中设置常量或变量,然后检查是否在将包含的所有其他文件中设置了该常量或变量来防止直接使用某些文件(尽管这并没有真正的区别)。
人们不能只是"写代码"并随心所欲地使用你的服务器文件,除非你的文件权限设置错了,哈哈。主要的内容经理将你所说的信息存储在内容经理的根目录中的公共文件夹中。
这是一些内容管理器作为额外的安全层所做的一个例子(但正如我所说,这是微不足道的…)
主文件:
define('EXEC', 1);
包含的文件:
<?php defined('EXEC') or die('Restricted access.');
我之所以称之为琐碎,是因为直接访问文件根本不应该是一个安全问题。事实上,这对于调试来说可能是一件好事。如果文件确实存在安全漏洞,至少必须通过父文件对其进行操作,这样可以减缓攻击。
避免使用像mysql_*这样的函数,在PHP 5.1版本之后就不推荐使用了。在这个方法中,你需要创建一个带有类的对象,这个对象可以在的任何地方使用
你应该使用PDO或mysqli而不是这些
如果它在PDO中,只需准备()并执行()您的sql查询。简单且安全。
PHP.net:
http://www.php.net/manual/en/book.pdo.php
http://php.net/manual/en/book.mysqli.php
和净额+:http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/