在PDO oveekill中清理数据+参数化?

时间:2016-09-07 19:49:31

标签: php pdo

在使用PDO预处理语句时,使用filter_input()或任何类似的验证/卫生功能是否过度:

$sql =  "SELECT count(*) FROM players_test WHERE email = :value";
$stmt = $pdo->prepare($sql);
$value = filter_input(INPUT_POST, 'signupEmail', FILTER_SANITIZE_STRING); 
$stmt->bindParam(':value', $value, PDO::PARAM_STR);
$stmt->execute();

处理蜇和整数的合理方法是什么?

1 个答案:

答案 0 :(得分:2)

这个问题有三种可能的答案。

  1. 如果您的关注只是SQL注入,并且整个SQL查询在PHP脚本中是硬编码的(就像您的示例中那样),那么除了准备好的语句之外什么都不需要。因此,sanitize_string是过度杀伤而且无关紧要。
  2. 如果您的关注点只是SQL注入,并且SQL的某些部分是动态组合的,那么您必须保护这些部分。但保护应该特定于这些部分,这使得sanitize_string相当无用。
  3. 如果您的问题不仅仅是SQL注入,还有其他任何安全性或可用性问题,那么您可能希望根据这些问题清理或验证您的数据。其中一种情况也可能使用sanitize_string。