Skip to content

Latest commit

 

History

History
48 lines (27 loc) · 2.1 KB

php缺陷.md

File metadata and controls

48 lines (27 loc) · 2.1 KB

精度:

​ php在进行浮点数计算的时候,经常会出现与预期结果不一致的值,这是由于PHP本身缺陷而造成的。

​ 例如:0.1和0.7.无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失的情况下转为二进制格式(例:floor(0.1+0.7)*10 应该返回7而不是8

在做题的时候若是参数正确却得不到想要的结果的时候可以考虑一下php精度绕过

类型转换的缺陷:

​ PHP 提供了 is_numeric 函数,用来变量判断是否为数字。

​ PHP 弱类型语言的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型 intval 数字化再比。

松散比较符的缺陷:

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

严格比较符的话会先判断是否类型相同再进行比较

sha1()md5()加密函数漏洞缺陷:

md5()和sha1()对一个数组进行加密将返回NULL

字符串处理函数漏洞缺陷:

strcmp()函数:比较两个字符串(区分大小写)

这个函数接受到了不符合的类型,例如数组类型,函数将发生错误。但是在 5.3 之前的 php 中,显示了报错的警告信息后,将 return 0 !!!! 也就是虽然报了错,但却判定其相等了。

  • ereg() 函数:字符串正则匹配。
  • strpos() 函数:查找字符串在另一字符串中第一次出现的位置,对大小写敏感。

这 2 个函数都是用来处理字符串的,但是在传入数组参数后都将返回 NULL

parse_str 函数变量覆盖缺陷:

parse_str 函数的作用就是解析字符串并注册成变量,在注册变量之前不会验证当前变量是否存在,所以直接覆盖掉已有变量。

void parse_str ( string $str [, array &$arr ] )

str 输入的字符串。 arr 如果设置了第二个变量 arr,变量将会以数组元素的形式存入到这个数组,作为替代。

参考:https://www.sqlsec.com/2018/01/php.html#%E7%90%86%E8%AE%BA-5