Administrator
Published on 2019-05-25 / 146 Visits
0
0

PHP数字转换缺陷

PHP数字转换缺陷

  • 当赋值给PHP变量的整型超过PHP的最大值PHP_INT_MAX时,PHP将无法计算出正确结果,攻击者可能会利用其跳过某些校验逻辑,如密码校验(无须输入正确的密码就可以直接登录用户的账号)、账号充值校验(充值很小的金额就可以进行巨额资金入账)等
<?php
      $a = 92233720368547758079223372036854775807;
      $b = 92233720368547758079223372036854775819;
      $aa = '92233720368547758079223372036854775807';
      $bb = '92233720368547758079223372036854775819';
      var_dump($a===$b);// 输出bool(true)
      var_dump($a%100);// 输出int(0)
      var_dump($b%100);// 输出int(0)
      var_dump($aa===$bb);// 输出bool(false)
      var_dump($aa%100);// 输出int(7)
      var_dump($bb%100);// 输出int(7)
  • 在实际的业务逻辑中(如充值金额、订单数量),一定要对最大值进行限制,避免数据越界而导致错误的执行结果。

    • PHP_INT_MAX:
    • 32位系统:(2^31)-1
    • 64位系统:(2^63)-1
      此处只列举了int型,其它数值型也存在类似问题。

Comment