PHP安全性 - (int)vs FILTER_VALIDATE_INT

Adi*_*dil 18 php variables input filter

我最近被告知有FILTER_VALIDATE_INT,顺便说一句.

我的问题是从网站获取整数值,无论是来自用户还是从Web应用程序生成,并通过查询字符串传递.

可以在mysql查询中显示或使用值(整数).

我正在尝试为此构建最好的安全方法.

考虑到这一点,简单使用是否安全

$myNum = (int)$_GET['num'];
Run Code Online (Sandbox Code Playgroud)

要么

if (filter_var($_GET['num'], FILTER_VALIDATE_INT)) $myNum = $_GET['num'];
Run Code Online (Sandbox Code Playgroud)

另外,请解释使用(int)和之间的区别FILTER_VALIDATE_INT

dec*_*eze 31

不同之处在于,施法int会始终为您提供int,可能是也可能不是原始值.例如(int)'foobar'结果int 0.这使得它对大多数SQL来说都是安全的,但与原始值无关,你甚至都不知道它.

filter_varwith FILTER_VALIDATE_INT 告诉您该值是否为a int,您可以根据该值决定在SQL查询中使用它或向用户显示错误消息.

  • @Russell Dias:至少为''42'的结果(整数表示为字符串). (2认同)