【问题标题】:Using ctype_digit($_GET['x']) with $_GET['x'] > 0?使用 ctype_digit($_GET['x']) 和 $_GET['x'] > 0?
【发布时间】:2018-08-18 04:07:17
【问题描述】:

像这样在if statement 中使用ctype_digit()comparison operator 有什么意义

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

【问题讨论】:

标签: php security xss


【解决方案1】:

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

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

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

但是,请注意这种转换。例如,123abc 将在您的第一次检查中返回 true(因为为了进行比较,使用了 123),所以根据它的严格程度,也许可以进行彻底的检查。

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

【讨论】:

  • 哦,根本不知道1a > 0 = true
【解决方案2】:

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

【讨论】:

  • TBH,这个答案更多的是评论,缺乏细节,需要改进。它被认为是 VLQ(质量非常低)。
猜你喜欢
  • 2018-06-29
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多