晚上好,
在我的网站上线之前,我显然希望确保它的安全(或尽可能安全)。
我有一个搜索表单,用户可以将条目上传到数据库,我认为这就是它。
所以我只想检查一下我应该做些什么来保护事物。首先,我的数据库是由一个专用的用户帐户(不是管理员或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)";
有人能让我知道我还应该考虑什么,或者这是否足够可接受?
提前谢谢,一如既往 丹
答案 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要安全得多。