MySQL安全检查

时间:2011-08-10 20:39:55

标签: mysql security

晚上好,

在我的网站上线之前,我显然希望确保它的安全(或尽可能安全)。

我有一个搜索表单,用户可以将条目上传到数据库,我认为这就是它。

所以我只想检查一下我应该做些什么来保护事物。首先,我的数据库是由一个专用的用户帐户(不是管理员或root用户)访问的,所以我想我已经锁定了这个部分。

其次,在我的所有搜索查询中,我都有这种格式:

$result = mysql_query(
"SELECT *
FROM table 
WHERE fieldname = '" . mysql_real_escape_string($country) . "' 
AND county = '" . mysql_real_escape_string($county) . "'
ORDER BY unique_id DESC");

最后,在我的提交表单中的$ _POST字段中,我将这些变量与它们插入到数据库中之后对待:

$variable = mysql_real_escape_string($variable);
$result = mysql_query(
"INSERT INTO table (columnone)
VALUES ($variable)";

有人能让我知道我还应该考虑什么,或者这是否足够可接受?

提前谢谢,一如既往 丹

3 个答案:

答案 0 :(得分:2)

除了

之外,您展示的所有内容在防止SQL注入方面看起来都很好
$variable = mysql_real_escape_string($variable);
$result = mysql_query(
"INSERT INTO table (columnone)
VALUES ($variable)";

这迫切需要$variable周围的引号 - 或者@Dan指出,检查是否是一个数字 - 是安全的。 mysql_real_escape_string清理字符串数据 - 这意味着,任何尝试突破由单引号或双引号分隔的字符串。如果插入的值未被引号括起,则不提供保护。

答案 1 :(得分:2)

代码看起来很好,但是如果可能的话,你应该考虑使用PDO预处理语句。

除此之外,请确保您的PHP代码用于连接MySQL的任何帐户都具有绝对最小的权限。大多数面向Web的脚本不需要更改/删除/创建类型权限。大多数人只能使用更新/插入/选择/删除,甚至可能更少。这样,即使您的代码级安全性出现严重错误,恶意用户也无法向您发送'; drop table students --类型查询(re:bobby-tables.com

答案 2 :(得分:1)

您是否考虑在SQL中使用MYSQL PDO和绑定参数?

http://php.net/manual/en/pdostatement.bindparam.php

我的理解是,这比使用mysql_real_escape_string要安全得多。