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配对的任何编程/脚本语言所提供的模式匹配和正则表达式工具,这些工具提供更多控制,有时也更好的控制。