📜  MariaDB-SQL注入保护

📅  最后修改于: 2020-11-27 05:37:32             🧑  作者: Mango


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

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配对的编程/脚本语言提供的模式匹配和正则表达式工具,它们可以提供更多控制,有时还提供更好的控制。