php中使用in_array易产生代码安全漏洞

执行上面的代码看看,你想说什么?

我是惊出了冷汗的

in_array常被老手们这样用做变量检查,但显然结果并不靠谱。

为什么会这样呢?再试试这个

问题似乎是PHP的默认类型转换造成的,数字与字符串比较时,字符串先被强制转成数字再进行了比较。真的是这个原因吗?爱较真的朋友请自行查看PHP源码,没准你还会发现其他问题。

其实in_array提供有第三个参数(默认为false),用于执行严格的类型检查,避免这个问题只需将其设置为true,但不是每个人都留意使用。搜了一下WordPress源码中使用 in_array 263处,许多关键处都使用了第三个参数,看来自己离老手还差得远那。

多少要埋怨一下,为什么不把第三个参数默认为true呢,这也太容易让人犯猎了。想想原因也很简单,为了保持PHP在类型处理上的一致性,就是让像下面的代码结果与你的期望一致。

最后想说的是,这不构成对PHP弱类型诟病的理由,这是WEB开发的特点确定的,如果让代码中充斥大量类型检查和类型转换会更让人难以忍受,让使用PHP的开发者有大刀阔斧、畅快淋漓的快感,是我喜欢PHP的原因之一。

但缺点确实是存在的,解决方案已经给出,本例中你可以在需要时为in_array设置第三个参数,或者使用另一个函数array_search。

打出”安全漏洞“的题目,标题党一回了,给新手也给自己提个醒。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值