保持安全的MySQL数据库需要什么?

时间:2013-05-02 21:19:05

标签: php mysql database security sql-injection

我查阅了很多关于保存安全数据库的教程,但我仍然不知道需要采取哪些措施来保护我的数据库免受SQL注入和黑客攻击。

这是我用来清除任何用户输入的功能,但我觉得这不是全部,我还能忽略其他什么?

function CleanInput($value) {
    stripslashes($value);
    if(!is_numeric($value)) {
        mysql_real_escape_string($value);
    }
    return $value;
}

5 个答案:

答案 0 :(得分:0)

  1. 确保您的服务器安全。你服务器上的某个人是一个非常大的不明显。
  2. 如果绝对必要,仅允许远程访问数据库。
  3. 拥有强大的MySQL登录密码。
  4. 将PHP脚本使用的任何用户限制为所需权限的绝对最小值。例如,只给脚本读取权限。
  5. 要防止SQL注入,请使用PHP PDO或MySQLi代替经典的MySQL函数。
  6. 不要相信您的用户。

答案 1 :(得分:0)

最佳做法是使用prepared statements

使用mysql_query也是一种不好的做法,因为它已被弃用,如果你检查文档就可以看到。

使用mysql_real_escape_string也是一种不好的做法,因为它也被弃用了,它无法让您免于logical sql injections

我建议使用PDOmysqli,这两种实现都支持预备语句。

预备语句将避免黑客在系统中插入可能导致注入的命令,但它会为常量创建一个模板,这不会影响数据库。它对性能也有好处。

验证所有输入(客户端和服务器端)也是明智的。

答案 2 :(得分:0)

首先,安全的mySQL没有灵丹妙药。 你必须详细说明一点。 如果您对登录感兴趣以及如何避免大多数(如果不是全部)SQL注入技巧等等,那么 在mySQL中使用存储过程。我不认为PHP会给你所有的一切。 例如,考虑一下,不是连接到您的真实/生产数据库,而是连接到另一个数据库,您的用户只能以只读方式访问存储过程(PHP的功能更好)。 然后,没人能在这个DB中看到你的数据!即使他知道你的db-name,username和passwd,他也无法从任何表中选择。 使用您的存储过程,您提交(再次选择)用户的用户名和密码,然后您将收到一个新的数据库名称,主机,用户名和密码,再次连接以检索您的真实数据。

如果你不太注意性能或mySQL重载,你可以对DB的任何连接使用相同的技巧。

答案 3 :(得分:-1)

这不是一个糟糕的开始,但这里有一些非常有用的信息链接:

http://simon.net.nz/articles/protecting-mysql-sql-injection-attacks-using-php/

最好的解决方案?使用绑定参数。要使用这些,您需要使用PHP5附带的改进的mysqli库。这种技术稍有不同,您首先使用占位符定义查询“模板”,然后将参数“绑定”到它,并且mysqli库负责为我们提供适当的转义:

$query = $mysqli->prepare( "UPDATE tablename SET favorite_color = ?, age = ?, description = ? WHERE user = ?" );
// we would have a bind looking like this:
$query->bind_param( 'sibs', 'red', 27, $some_blob, $variable );
$query->execute();

答案 4 :(得分:-1)

将MD5功能用于您工作的后端(数据库,MySQL等)和前端(php等)的密码。

非常简单但是开始确保工作的良好开端。

我的教授称赞我把它包括在我的项目中。