-3

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

这是我一直用来清除任何用户输入的功能,但我觉得这还不是全部,我还忽略了哪些其他内容?

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

5 回答 5

0
  1. 确保您的服务器安全。您服务器上的某人显然是一个很大的不。
  2. 仅在绝对必要时才允许远程访问数据库。
  3. 具有 MySQL 的强登录密码。
  4. 将 PHP 脚本使用的任何用户限制为所需的绝对最低权限。例如,赋予脚本只读权限。
  5. 为了防止 SQL 注入,请使用 PHP PDO 或 MySQLi 而不是经典的 MySQL 函数。
  6. 不要相信你的用户。
于 2013-05-02T21:25:45.437 回答
0

最佳做法是使用prepared statements

使用 use 也是一种不好的做法,mysql_query因为它已被弃用,如果您检查文档可以看出这一点。

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

我建议使用PDOor mysqli,这两种实现都支持准备好的语句。

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

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

于 2013-05-02T21:27:39.683 回答
0

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

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

于 2013-05-02T21:28:33.170 回答
0

在您工作的后端(数据库、MySQL 等)和前端(php 等)中使用 MD5 函数作为密码。

非常简单,但却是保护您工作的良好开端。

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

于 2013-05-03T00:50:09.283 回答
-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();
于 2013-05-02T21:26:23.753 回答