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