Bru*_*man 3 sql database language-agnostic sanitization parameterized
我正在更新一些不能正确处理用户输入的遗留代码.该代码确实进行了最少量的清理,但未涵盖所有已知威胁.
我们的新代码使用参数化查询.据我了解,查询是预编译的,输入被简单地视为无法执行的数据.在这种情况下,没有必要进行消毒.是对的吗?
换句话说,如果我在这个遗留代码中参数化查询,是否可以消除它当前的清理工作?或者我在参数化之上缺少一些额外的消毒效益?
参数化查询将有助于防止SQL注入,但它们不会对跨站点脚本执行起作用.您需要其他措施,如HTML编码或HTML检测/验证,以防止这种情况.如果你关心的只是SQL注入,那么参数化查询就足够了.
确实,SQL查询参数可以很好地防御SQL注入.嵌入式引号或其他特殊字符不能造成恶作剧.
但是SQL查询的某些组件无法参数化.例如表名,列名,SQL关键字.
$sql = "SELECT * FROM MyTable ORDER BY {$columnname} {$ASC_or_DESC}";
Run Code Online (Sandbox Code Playgroud)
因此,在插入SQL查询之前,您可能需要验证动态内容的一些示例.白名单值也是一种很好的技术.
此外,您可以拥有列的数据类型允许的值,但这些值是无意义的.对于这些情况,使用应用程序代码进行验证通常比尝试在SQL约束中进行验证更容易.
假设您存储了信用卡号.信用卡号码有效模式,库可识别无效模式中的有效模式.
或者用户何时定义密码?您可能希望确保足够的密码强度,或验证用户在两个密码输入字段中输入相同的字符串.
或者,如果他们订购了一定数量的商品,您可能需要将数量存储为整数,但是您需要确保它大于零,如果它大于1000,您可能需要仔细检查用户他们正确地输了.
归档时间: |
|
查看次数: |
2038 次 |
最近记录: |