我想知道是否可以使用简单的正则表达式检测 100% 的可能 SQLi 攻击。
换句话说,以非常简单的 PHP 代码为例:
if (preg_match("/select/i", $input)) {
attack_log("Possible SELECT SQLi detected.")
}
问题是:
- 该正则表达式会捕获所有可能使用 SELECT 的 SQLi 攻击吗?如果没有,是否可以更改该正则表达式以便检测所有依赖 SELECT 的注入?
- 是否可以将该正则表达式更改为使其能够捕获所有可能的 SQLi,因此不仅是 SELECT 语句,而且还有所有其他语句?恐怕要实现这一点,我需要将所有可能的 SQL 关键字添加到正则表达式,包括“AND”和“OR”。
- 假设通过尝试匹配所有可能的 SQL 关键字来检测所有 SQLi 是不可能或不可行的,是否有有限的关键字子集可以让我检测到绝大多数可能的攻击?