使用ctype_digit($ _ GET ['x'])和$ _GET ['x']> 0?

时间:2018-03-09 14:46:45

标签: php security xss

ctype_digit()这样的comparison operator中使用if statement是否有任何意义

if ($_GET['x'] > 0 && ctype_digit($_GET['x'])) {
    echo 'It is a Number';
}

2 个答案:

答案 0 :(得分:1)

不是真的。来自the manual(强调我的):

  

如果您将数字与字符串进行比较或比较涉及数字字符串,则将每个字符串转换为数字,并以数字方式执行比较

因此,如果x是“非数字字符串”,那么您的第一次检查将失败并使条件短路,从而使ctype_digit()在这种情况下变得多余。

但是,请注意此转换。例如,123abc将在第一次检查时返回true(因为对于比较,使用了123),因此根据其严格程度,可能会进行彻底检查。

$s = "123abc";
var_dump($s > 0); // true

答案 1 :(得分:-2)

是的,如果您想确保输入是十进制数并且大于零

,则可能