是否在 PDO oveekill 中清理数据 + 参数化? [复制]

Posted

技术标签:

【中文标题】是否在 PDO oveekill 中清理数据 + 参数化? [复制]【英文标题】:Is sanitizing data + parameterisation in PDO oveekill? [duplicate] 【发布时间】:2017-01-15 14:55:36 【问题描述】:

在使用 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();

处理字符串和整数的合理方法是什么?

【问题讨论】:

没有办法回答这个问题。要使数据“安全”,你必须做什么完全取决于它的用途。例如假设这是一些时髦的警察取证数据存储,这意味着您需要完全存储原始数据。清理将通过删除“坏”的东西来破坏一些原始数据。现在你的法庭案件因为证据被篡改而被驳回。 如果您想了解好的做法,我建议您查看流行框架的源代码,例如 Laravel 或 Zend,看看它们是如何处理这个问题的。 @Parziphal 你知道这些来源包含多少行吗? @YourCommonSense 嗯...我认为如果你真的想看看大人物如何处理事情并且你真的想学习,你不会关心你会读多少行。 @Parziphal hoe 您亲自阅读了很多行吗?你学到了什么? 【参考方案1】:

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

    如果您只关心 SQL 注入,并且整个 SQL 查询是在 php 脚本中硬编码的(就像在您的示例中一样),那么只需要准备好的语句。因此 sanitize_string 是矫枉过正而且相当无关紧要。 如果您只关心 SQL 注入,并且 SQL 的某些部分是动态组装的,则必须保护这些部分。但是保护应该是针对这些部分的,这使得 sanitize_string 相当无用。 如果您关心的不仅仅是 SQL 注入,还有其他安全性或可用性问题,那么您可能需要根据这些问题清理或验证您的数据。其中一种情况也可能使用 sanitize_string。

【讨论】:

以上是关于是否在 PDO oveekill 中清理数据 + 参数化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel / PDO 中绑定列

我应该使用 PDO 来清理我的 Sql 查询还是“mysql_real_escape_string”就足够了? [复制]

清理和验证表单php

是否可以设置默认的 PDO 获取模式?

如果使用存储过程需要 PHP PDO PARAMS?

PHP基础PHP教程(PDO)