我正在做一个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页面可以解决这一问题,但是还有一个问题:如果我需要更改数据库连接参数,那么我必须更改每个需要与数据库一起工作的文件中的连接参数,这是不可行的,因为我可能最终会有数百个这样的文件。那么有什么方法可以绕过这件事呢?
发布于 2013-09-03 04:31:21
在这个问题上有很多可以说的。当然,你必须记住,从技术上讲,这些文件是用来供人们使用的!这就是当一个人访问你的网站时所做的事情--使用你的文件!你想要避免的是允许他们恶意使用它们。例如,您需要确保在进行数据库查询时使用准备好的语句。您还可以通过在父文件中设置一个常量或变量,然后检查将包含的所有其他文件中设置的文件,从而防止直接使用某些文件(尽管这并不真正起作用)。
人们不能只是“编写代码”和使用您的服务器文件,但是,除非您的文件权限设置错误,lol。主要内容管理器将您正在讨论的信息存储在内容管理器的根目录下的公用文件夹中。
这是一个例子,说明了一些内容管理器只是作为一个额外的安全层所做的事情(但正如我所说,这是微不足道的.)
主档案:
define('EXEC', 1);包括档案:
<?php defined('EXEC') or die('Restricted access.');我称之为微不足道的原因是,直接访问文件根本不应该是一个安全问题。事实上,对于调试来说,这可能是一件好事。如果文件确实包含安全漏洞,至少必须通过父文件进行操作,这可能会减慢攻击的速度。
发布于 2013-09-03 05:00:05
避免使用像mysql_*这样的函数,在PHP5.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/
https://stackoverflow.com/questions/18584082
复制相似问题