PHP安全性 - (int)vs FILTER_VALIDATE_INT

时间:2011-01-25 03:10:03

标签: php variables input filter

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

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

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

我正在尝试为此构建最佳安全方法。

考虑到这一点,单纯使用

是否安全
$myNum = (int)$_GET['num'];

或者

if (filter_var($_GET['num'], FILTER_VALIDATE_INT)) $myNum = $_GET['num'];

另外,请解释使用(int)FILTER_VALIDATE_INT

之间的区别

2 个答案:

答案 0 :(得分:30)

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

带有FILTER_VALIDATE_INT

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

答案 1 :(得分:0)

 <input type="text" name="param"></input>


$price = filter_input(INPUT_POST, 'param', FILTER_VALIDATE_INT);
if ($price !== false) {
print " a number.";    //works when value is number
}


if(is_int($_POST['param'])){
    print "is number."; //don't works when value is number
}

请在值为数字时尝试测试。