Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP安全-(int)vs过滤器\u验证\u int_Php_Variables_Input_Filter - Fatal编程技术网

PHP安全-(int)vs过滤器\u验证\u int

PHP安全-(int)vs过滤器\u验证\u int,php,variables,input,filter,Php,Variables,Input,Filter,最近有人告诉我有一个FILTER\u VALIDATE\u INT,顺便说一句,它很棒 我的问题是从网站获取一个整数值,不管它是来自用户还是来自web应用程序,并通过查询字符串传递 值(整数)可以在mysql查询中显示或使用 我正在尝试为此构建最佳的安全方法 考虑到这一点,简单使用是否安全 $myNum = (int)$_GET['num']; 或 另外,请解释使用(int)和过滤器验证int之间的区别是,转换为int将始终得到int,这可能是原始值,也可能不是原始值。例如,(int)'foo

最近有人告诉我有一个FILTER\u VALIDATE\u INT,顺便说一句,它很棒

我的问题是从网站获取一个整数值,不管它是来自用户还是来自web应用程序,并通过查询字符串传递

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

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

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

$myNum = (int)$_GET['num'];


另外,请解释使用
(int)
过滤器验证int

之间的区别是,转换为
int
将始终得到
int
,这可能是原始值,也可能不是原始值。例如,
(int)'foobar'
导致
int
0
。这使得它在大多数SQL中都是安全的,但与原始值无关,您甚至不知道它

使用
FILTER\u VALIDATE\u INT
告诉您该值是否为
INT
,您可以根据该值决定在SQL查询中使用该值或向用户显示错误消息。


 <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
}
$price=filter\u input(input\u POST,'param',filter\u VALIDATE\u INT); 如果($price!==false){ 打印“一个数字”。;//值为数字时有效 } if(is_int($_POST['param'])){ 打印“is number.”;//值为number时不起作用 }

当值为数字时,请尝试测试

@deceze你会知道
过滤器var
和它的
是int
对应物之间是否有很大区别吗?@Russell Dias:results for
'42'
至少(整数表示为字符串)。@zerkms-Oops没有意识到它也测试一个数字字符串。谢谢你的例子;)知道了。现在有道理了。谢谢@deceze看来FILTER\u VALIDATE\u INT也适用于表单提交的字符串,因此它的工作方式与您描述的略有不同。要扩展现有答案,
FILTER\u SANITIZE\u NUMBER\u INT
相当于
(INT)
强制转换。@mario,你怎么能这么说?不是。这里有一个有趣的提示,FILTER\u VALIDATE\u INT说“0011”不是INT,但“1111”是INT。你知道的越多。。。
 <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
}