开发学院

您的位置:首页>教程>正文

教程正文

MariaDB SQL注入攻击防护

MariaDB SQL注入攻击防护

  接受用户输入的行为打开了被黑客利用的大门,问题主要源于数据的逻辑管理, 幸运的是这些主要缺陷很容易避免。

  SQL注入的机会通常发生在用户输入数据(如名称)时,代码逻辑无法分析此输入。相反,代码允许攻击者插入SQL语句,该语句将在数据库上运行。

  在进行数据处理之前,务必考虑用户输入的数据、可疑数据和需要强有力验证的数据。通过模式匹配执行此验证。例如,如果预期的输入是用户名,则将输入的字符限制为字母数字字符和下划线,并限制为一定长度。回顾下面给出的一个例子

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

  此外,在创建输入约束时使用REGEXP运算符和类似子句。

  考虑输入的所有类型的必要显式控制,例如

  控制使用的转义字符。

  控制输入的特定适当数据类型。将输入限制为必要的数据类型和大小。

  控制输入数据的语法。不要允许任何超出所需模式的东西。

  控制允许的条款。黑名单SQL关键字。

  你可能不知道注射攻击的危险,或者可能认为它们无关紧要,但是它们是安全问题的首要问题。此外,考虑这两个条目的影响

1=1
-or-
*

  允许其中任何一个与右侧命令一起输入的代码可能会导致显示数据库中的所有用户数据或删除数据库中的所有数据,而且这两种注入都不是特别聪明。在很多情况下,攻击者甚至不花时间检查漏洞;他们用简单的输入进行盲目攻击。

  此外,考虑与MariaDB配对的任何编程/脚本语言提供的模式匹配和正则表达式工具,它们提供了更多的控制,有时还提供了更好的控制。