年轻人不要总熬夜

Php tips

Posted on By jax777

layout: post title: php tips categories: php tag: tips —

弱类型

  • 引入
    比如 在$a == $b的比较中
    $a = null; $b = false; //为真
    $a = ''; $b = 0; //同样为真
    
  • 当int遇上string
    var_dump(0 == '0'); // true
    var_dump(0 == 'abcdefg'); // true  
    var_dump(0 === 'abcdefg'); // false
    var_dump(1 == '1abcdef'); // true
    

    当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。

相当于对字符串部分intval再和整数部分比较,其实也就是改变了zval.type的内容 尤为注意的是,’1assd’的转换后的值是1,而‘asdaf’是0

也说明了intval会从第一位不是数字的单位开始进行

if($a>1000){
   mysql_query('update ... .... set value=$a')
}

你以为这时候进入该支的万无一失为整数了

其实$a可能是1001/**/union…

  • 语句条件的松散判断

    伪随机

PHP使用的三种PRNG算法,所以如果攻击者可以获取随机数种子,那么就知道对应算法的结果。 1,线行同余方法 例如:lcg_value 2,梅森旋转算法 例如 mt_rand 3,原生C语言支持的函数 例如rand 以上实际上在内部函数也复用了,例如array_rand,uniqid,也就是说攻击者如果可以跑一遍所有可能的随机数种子,那么以上所有的值它都可以获取。