0

我正在做一个 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 页面可以解决这个问题,但是如果我需要更改数据库连接参数,那么我会遇到问题将不得不更改需要使用数据库的每个文件中的那些,这是不可行的,因为我最终可能会拥有数百个这样的文件。那么解决这个问题的方法是什么?

4

2 回答 2

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/

于 2013-09-03T05:00:05.197 回答
0

关于这个问题有很多可以说的。您必须记住,从技术上讲,这些文件当然是供人们使用的!这就是人们在访问您的网站时所做的事情 - 使用您的文件!您要避免的是允许他们恶意使用它们。例如,您需要确保在进行数据库查询时使用准备好的语句。您还可以通过在父文件中设置常量或变量来防止直接使用某些文件(尽管它并没有真正的区别),然后检查是否在将包含的所有其他文件中设置了该值。

人们不能只是“编写代码”并使用他们想要的服务器文件,除非你的文件权限设置错了,哈哈。主要的内容管理器将您正在谈论的信息存储在内容管理器的根目录中的公共文件夹中。

这是一些内容管理器作为额外安全层所做的一个示例(但正如我所说,它是微不足道的......)

主文件:

define('EXEC', 1);

包含的文件:

<?php defined('EXEC') or die('Restricted access.');

我称之为微不足道的原因是直接访问文件根本不应该是一个安全问题。事实上,这对于调试来说可能是一件好事。如果文件确实包含安全漏洞,则至少必须通过父级对其进行操作,这可能会减慢攻击速度。

于 2013-09-03T04:31:21.480 回答