资讯专栏INFORMATION COLUMN

PHP 中的一些 “陷阱”

JerryC / 2820人阅读

摘要:现在我们总结一下,有可能会遇到的一些中的一些陷阱。陷阱二判断数组里是否存在用户所提交的用户小明汤姆奥立升输出结果,此结果明显错误我发现这个问题,是因为网站被注入了,还好,那么时候在测试的时候发现的,没有造成严重的后果。

在做开发的时候,有可能会忘记掉一些技术细节。这些细节有可能会造成很严重的后果,比如网站被注入、网站崩溃等等。现在我们总结一下,有可能会遇到的一些 PHP 中的一些 “陷阱”。

陷阱一:empty()

最新的官网手册对此有特别说明:

Note:
在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。
换言之,下列代码不会生效: empty(trim($name))。 作为替代,应该使用trim($name) == false.

我最近一次遇到该错误,是使用 Phalcon 开发的时候,服务器一直报 503 错误,刚开始会觉得莫名其妙,通过逐行排除,才发生由于 empty 的错误用法导致的。当然,自从 PHP 5.5 开始,empty 已经支持这种写法了。

陷阱二:in_array()
 "小明",
    1092 => "汤姆",
    1256 => "奥立升"
];

if(in_array($post_dirty_id, array_keys($safe_arr))) {

    echo "find me";

} else {

    echo "do not find me";

}

//输出结果:find me,此结果明显错误

我发现这个问题,是因为网站被 SQL 注入了,还好,那么时候在测试的时候发现的,没有造成严重的后果。

关于 in_array() 函数使用,还有其他值得我们注意的地方,PHP 手册中,有大量的网友提供的示例,来说明该函数的“怪异”行为,比如:

 "y"];
 var_dump(in_array(25, $a)); // true, one would expect false
 var_dump(in_array("ggg", $a)); // true, one would expect false

 var_dump(in_array(0, $a)); // true
 var_dump(in_array(null, $a)); // false

为了安全起见,建议可以采用下面这种方式进行判断:

 "小明",
    1092 => "汤姆",
    1256 => "奥立升"
];

if(isset($safe_arr[$post_dirty_id])) {

    echo "find me";

} else {

    echo "do not find me";

}

//输出结果:do not find me,这是正确的结果

如果遇到其他的问题,我都会在这里记录...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21351.html

相关文章

  • JavaScript中,关于变量和声明的一些

    摘要:主要讲述了中关于变量声明和代码编写时你可能没它留意的一些坑。但是换行符并不会被忽略,换行符起到了分号的功能。需要注意的是,大小写敏感,和是两个不同的变量。保留字中有一批称为保留字的家伙是不能用做变量的,用了在一些浏览器中很可能会报错。 今天翻译的这篇文章依旧比较基础,是这个系列文章的第三篇。主要讲述了JavaScript中关于变量声明和代码编写时你可能没它留意的一些坑。 那些熟悉PHP...

    lowett 评论0 收藏0
  • React官方团队实例原生Hook闭包陷阱

      陷进到处都是啊!本篇文章就说说Hooks使用时存在所谓的闭包陷阱,看看下面代码:  functionChat(){   const[text,setText]=useState('');   constonClick=useCallback(()=>{   sendMessage(text);   },[]);   return<SendButtononClick=...

    3403771864 评论0 收藏0
  • 正则表达式易错点小结!

    摘要:举例说明百度谷歌正则如下结果是把全部的字符串都匹配到了其实,我们只需要加上修饰符,这样,这样一旦成功匹配一次的话,正则就不会继续进行匹配了个人认为应该是的意思,表示在匹配的时候忽略大小写。 最近在学习正则表达式,发现原来理解的正则表达式不是特别的准确,甚至有误!在这里简单记录一下,希望对有的朋友能够有所帮助! ①[]:字符集(字符簇,字符组……) 他的真正含义是或的意思!例如:[123...

    邱勇 评论0 收藏0
  • 【ES6】改变 JS 内置行为的代理与反射

    摘要:通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接近引擎的能力。显然,与要求代理目标对象必须是一个函数,这两个代理陷阱在函数的执行方式上开启了很多的可能性,结合使用就可以完全控制任意的代理目标函数的行为。 代理(Proxy)可以拦截并改变 JS 引擎的底层操作,如数据读取、属性定义、函数构造等一系列操作。ES6 通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接...

    lushan 评论0 收藏0
  • PHP 中「自增、自减」运算引发的奇怪问题

    摘要:在的官方手册中写道支持风格的前后递增与递减运算符。第一个注意事递增递减运算符不影响布尔值。递增递减布尔值递增递减在处理字符变量的算数运算时,沿袭了的习惯,而非的。还有一个注意事项递增递减其他字符变量则无效,原字符串没有变化。 在 PHP 的官方手册中写道: PHP 支持 C 风格的前/后递增与递减运算符。 第一个注意事:递增/递减运算符不影响布尔值。递减 NULL 值也没有...

    madthumb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<