使用正则表达式检查数据库包装器中的列是否过度杀伤?

时间:2012-08-03 11:43:02

标签: php sql regex

这是SQL查询的示例包装器

public function where ($col, $val)
{
    if (!preg_match('~^[a-z0-9_]+$~i', $col))
        throw new Exception('Invalid parameter $col');

    $this->where.= "WEHERE $col = :$col";
}

由于正则表达式可能正在使用资源,这是否有点过分。 注意我实际上使用它来包装PDO(注意冒号:$ col)。

1 个答案:

答案 0 :(得分:1)

如果可以通过用户输入指定$col,那么这不是过度杀伤,而是对SQL注入的唯一防御

如果$col已知安全(例如,您的代码使用switch语句生成其值),那么包含运行时检查可能不值得。但是,你应该考虑到“已知安全”状态随着程序未来的变化而变化的可能性。