前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >由PHP小tip引发的思考

由PHP小tip引发的思考

作者头像
企鹅号小编
发布2018-02-09 10:45:57
7000
发布2018-02-09 10:45:57
举报
文章被收录于专栏:编程

前段时间看到有关于CTF中PHP黑魔法的总结,其中有一段只有介绍利用方法但是没有详细介绍为什么,我想了一下,思考如下,如果不对,请各位大佬多多指正~

原话如下:

当有两个is_numeric判断并用and连接时,and后面的is_numeric可以绕过。

PHP中is_numeric 检测变量是否为数字或数字字符串,如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。

找了一下也没有找到为什么算是绕过, 用VulnCTF【https://github.com/jianmou/VulnCTF/tree/master/Web】里面的一道题目做例子测试一下:

初始变量被赋值为string,所以打开就是输出"is_numeric(a) and is_numeric(b) error !",根据题目同时出现is_numeric()和and判断(图一)

引用暗羽表姐的博客截图来绕过第二个is_numeric() 判断(图二)

绕过(图三)

但是只是知道这是绕过的一种方式,但是为什么会出现这种情况呢,本来以为只要第一个判断为真就不会判断后面的条件正确还是不正确 ,以为问题出现在is_numeric,但是问题好像出现在and上面,根据PHP的优先级来看,赋值运算= 优先级大于 and ,

举一个例子(图四)

算是PHP的一种特性吧(图五)...

推荐参考链接:

http://php.net/manual/zh/language.operators.precedence.php

本文来自企鹅号 - T00ls媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - T00ls媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档