MariaDB - SQL 注入防护



简单的接受用户输入的行为就打开了漏洞利用的大门。这个问题主要源于数据的逻辑管理,但幸运的是,避免这些主要缺陷相当容易。

SQL 注入的机会通常发生在用户输入诸如姓名之类的 数据,而代码逻辑未能分析此输入。相反,代码允许攻击者插入MariaDB语句,该语句将在数据库上运行。

始终将用户输入的数据视为可疑的,并且在任何处理之前都需要进行严格的验证。通过模式匹配执行此验证。例如,如果预期输入是用户名,则将输入字符限制为字母数字字符和下划线,并限制其长度。请查看下面给出的示例:

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 运算符和 LIKE 子句来创建输入约束。

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

  • 控制使用的转义字符。

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

  • 控制输入数据的语法。不允许任何超出所需模式的内容。

  • 控制允许的术语。列入 SQL 关键字黑名单。

您可能不知道注入攻击的危险,或者可能认为它们微不足道,但它们是安全问题的首要问题。此外,考虑这两个条目的影响:

1=1
-or-
*

允许输入这两者以及正确的命令的代码可能会导致泄露数据库上的所有用户数据或删除数据库上的所有数据,并且这两种注入都不是特别巧妙的。在某些情况下,攻击者甚至不花时间检查漏洞;他们使用简单的输入执行盲目攻击。

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

广告