我最近被告知有FILTER_VALIDATE_INT,顺便说一句。
我的问题是从网站获取整数值,无论是来自用户还是来自Web应用程序,并通过查询字符串传递。
可以在mysql查询中显示或使用值(整数)。
我正在尝试为此构建最佳安全方法。
考虑到这一点,单纯使用
是否安全$myNum = (int)$_GET['num'];
或者
if (filter_var($_GET['num'], FILTER_VALIDATE_INT)) $myNum = $_GET['num'];
另外,请解释使用(int)
和FILTER_VALIDATE_INT
答案 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
}
请在值为数字时尝试测试。