我正在做一个CRUD项目,我将我的数据库连接参数保存在名为 conn.php 的文件中,其代码如下所示
<?php
$conn = @mysql_connect('127.0.0.1','root','');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mt', $conn);
?>
我正在使用包含函数这样需要数据库连接的地方链接此文件
<?php
include 'conn.php';
?>
但我只是想知道这不是安全漏洞,我的意思是任何人都可以编写他们的代码并只包含该连接文件,然后就可以在我的数据库上运行了。
如何阻止这种情况?我知道不使用 conn.php 并将数据库连接代码写入需要使用数据库的每个php页面都可以解决这个问题,但是如果我需要的话就会出现问题更改数据库连接参数然后我将不得不更改每个需要使用数据库的文件,这是不可行的,因为我可能最终有数百个这样的文件。那么这是怎么回事?
答案 0 :(得分:0)
在这个问题上可以说很多。你必须记住,技术上这些文件当然是供人们使用的!这是一个人在访问您的网站时所做的事情 - 使用您的文件!你想要避免的是允许他们恶意使用它们。例如,您需要确保在进行数据库查询时使用预准备语句。你也可以通过在父文件中设置一个常量或变量来阻止直接使用某些文件(尽管它没有什么区别),然后检查在所有其他文件中设置的那个文件。
人们不能只是“编写代码”并使用你想要的服务器文件,除非你的文件权限设置为waaaay错误,哈哈。主要内容管理员将您正在谈论的信息存储在内容管理器的根目录,公共文件夹中。
这是一些内容管理员所做的一个例子,作为额外的安全层(但正如我所说,它是微不足道的......)
主文件:
define('EXEC', 1);
包含文件:
<?php defined('EXEC') or die('Restricted access.');
我称之为微不足道的原因是直接访问文件根本不应该是一个安全问题。实际上,调试可能是件好事。如果文件确实包含安全漏洞,那么至少必须通过父级来操纵它,这可能会减慢攻击速度。
答案 1 :(得分:0)
避免使用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
和nettuts +:http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/