如何验证整数值以避免SQL注入?

Goo*_*bot 2 php mysql sql integer sql-injection

避免SQL注入定义值类型(如数字)的最佳方法是验证值; 因为与mysqli准备相比,这样做更容易.在PHP中,我们可以做到这一点.

1. if(!is_numeric($value)) {$value=0;}
2. $value=floatval($value);
3. $value=intval($value);
4. $value=$value * 1;
Run Code Online (Sandbox Code Playgroud)

什么是最可靠的?还是一个更好的主意?

更新:虽然我在原始问题中已经说过,但大多数人都强调参数化查询的有用性.当然,这是避免SQL注入的最有效方法.但是当我们可以简单地验证整数数值时; 恕我直言,没有必要进行参数化.

MrC*_*ode 5

对于整数和浮点数,如果您不想进行参数化查询,则可以使用此选项.

$clean_number = (int)$value;

$clean_number = (float)$value;
Run Code Online (Sandbox Code Playgroud)

这些实际上是将值转换为intfloat,这比intval()并且floatval()例如因为它不会遭受函数开销.

  • 这些测试毫无意义.他们距离**现实生活还很遥远.**让你在假想的沙盒中玩耍. (4认同)
  • 我没有说 intval($num) 比 (int)$num 快。他们是平等的。使用任何使用 int 转换的现实生活脚本,创建它的 2 个版本,(int) 和 intval() 一个,在两个版本上运行 apache 基准测试。尝试找出不同之处。 (2认同)