PHP、sprintf和数值中的SQL注入

PHP、sprintf和数值中的SQL注入,php,sql-injection,Php,Sql Injection,我正试图使我的查询对SQL注入安全,幸运的是,可以作为目标的变量只有整数或浮点数,所以我想知道,在这种情况下,使用sprintf()是否足够(甚至不使用mysqli\u real\u escape\u string())。我做了一些测试,目前看起来还不错,因为它将任何输入解析为浮点/整数,所以不应该执行SQL语句。有没有办法破解这个?对我来说,这看起来太简单和美妙了:D$int=125。”阿斯达; $int = 125 . 'asda'; $float = 654.12; function v

我正试图使我的查询对SQL注入安全,幸运的是,可以作为目标的变量只有整数或浮点数,所以我想知道,在这种情况下,使用sprintf()是否足够(甚至不使用mysqli\u real\u escape\u string())。我做了一些测试,目前看起来还不错,因为它将任何输入解析为浮点/整数,所以不应该执行SQL语句。有没有办法破解这个?对我来说,这看起来太简单和美妙了:D

$int=125。”阿斯达;
$int = 125 . 'asda';
$float = 654.12;

function validateNumber($number) {
    if (strpos($number, '.')) {
        $number = floatval($number);
    } else { 
        $number = intval($number);
    }
    return $number;
}

echo validateNumber($int); // 125
echo '<br />';
echo validateNumber($float); // 654.12
$float=654.12; 函数validateEnumber($number){ 如果(STRPO($number,'.')){ $number=floatval($number); }否则{ $number=intval($number); } 返回$number; } echo validateEnumber($int);//125 回声“
”; echo validateEnumber($float);//654.12
检查数字是int还是float并返回它们的值

使用sprintf()就足够了


是的。

为什么不使用事先准备好的语句?它们为SQL注入提供了更好的保护,如果重用它们,还可以提高查询性能。

如果您注入SQL的只是浮点或整数,并且它们被正确地强制转换,那么是的,我会说这是安全的。但你为什么要这么做?使用PDO准备好的声明不仅仅是给你一个更安全的应用程序:它们让你更干净更好code@jacobwalker0814事实上,基于sprintf的解决方案会更干净。@YourCommonSense确定对于特定的查询(如提问者提到的),只转换一行变量可能会更干净。我要说的是,使用像PDO这样的数据库对象,整个应用程序的感觉更干净。当然,这有点主观,我的观点是……如果不是,那就让事情变得“更糟”。