其它 ================================= 低精度 --------------------------------- php中并不是用高精度来存储浮点数,而是用使用 IEEE 754 双精度格式,造成在涉及到浮点数比较的时候可能会出现预期之外的错误。 比如 ``php -r "var_dump(0.2+0.7==0.9);"`` 这行代码的输出是 ``bool(false)`` 而不是 ``bool(true)``。这在一些情况下可能出现问题。 弱类型 --------------------------------- 如果使用 ``==`` 来判断相等,则会因为类型推断出现一些预料之外的行为,比如magic hash,指当两个md5值都是 ``0e[a-f0-9]{30}`` 的时候,就会认为两个hash值相等。 另外在判断字符串和数字的时候,PHP会自动做类型转换,那么 ``1=="1a.php"`` 的结果会是true 另外在判断一些hash时,如果传入的是数组,返回值会为 ``NULL``, 因此在判断来自网络请求的数据的哈希值时需要先判断数据类型。 同样的, ``strcmp()`` ``ereg()`` ``strpos()`` 这些函数在处理数组的时候也会异常,返回NULL。 命令执行 --------------------------------- preg_replace 第一个参数是//e的时候,第二个参数会被当作命令执行 截断 --------------------------------- PHP字符存在截断行为,可以使用 ``ereg`` / ``%00`` / ``iconv`` 等实现php字符截断的操作,从而触发漏洞。 变量覆盖 --------------------------------- 当使用 ``extract`` / ``parse_str`` 等函数时,或者使用php的 ``$$`` 特性时,如果没有正确的调用,则可能使得用户可以任意修改变量。 执行系统命令 --------------------------------- 禁用的函数可以在phpinfo中的 ``disable_functions`` 中查看 - pcntl_exec - exec - passthru - popen - shell_exec - system - proc_open Disable Functions Bypass --------------------------------- - LD_PRELOAD绕过 - https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD - PHP OPcache - Mail函数 - imap_open - https://www.cvedetails.com/cve/cve-2018-19518 Magic函数 --------------------------------- - ``__construct()`` ``__destruct()`` - ``__call()`` ``__callStatic()`` - ``__get()`` ``__set()`` - ``__isset()`` ``__unset()`` - ``__sleep()`` ``__wakeup()`` - ``__toString()`` - ``__invoke()`` - ``__set_state()`` - ``__clone()`` - ``__debugInfo()`` 文件相关敏感函数 --------------------------------- - ``move_uploaded_file`` - ``file_put_contents`` / ``file_get_contents`` - ``unlink`` - ``fopen`` / ``fgets`` php特性 --------------------------------- - php自身在解析请求的时候,如果参数名字中包含" "、"."、"["这几个字符,会将他们转换成下划线