【发布时间】:2023-03-07 00:50:01
【问题描述】:
我知道,您应该始终使用准备好的语句...,这就是我所做的,但是!它们速度较慢,如果有一些 100% 安全的输入,我想我无法使用它们。
(PHP)
if ( ctype_digit($_POST['id']) ){
$int_id = (int)$_POST['id'];
if ( is_int($int_id) ){
$query = "SELECT id FROM ids WHERE id = {$int_id}";
}
}
【问题讨论】:
-
ctype_digit并转换为int就足够了。ctype_digit和is_int都没有使用意义。只有当给定字符串中的所有字符都是数字时,第一个才是真的 -
但增加了额外的虚假安全性,以支持我不使用准备好的语句的决定。
-
支持多么愚蠢的决定。
-
您无法使用它们。但最好尽可能使用它们。开销(如果有的话)可以忽略不计,这是最佳实践。如果您绝对不想 使用它们,那么只有少数情况是相当安全的。 恕我直言 其中一个正在转换为 int,另一个正在使用字符串的白名单。但同样:准备好的语句是最好的和最干净的方式。 (另外:每当对 PDO 有疑问时,请听 @YourCommonSense ;))
标签: php mysql sql-injection