PHPempty()和isset()比较

[复制链接]
查看6232 | 回复14 | 2017-4-23 18:48:56 | 显示全部楼层 |阅读模式
一道CTF引起
一道php代码审计题目如下图:
%E9%A2%98%E7%9B%AE1.jpg
程序员含义是,用get传入参数ac,fn extract()会直接生成一个ac变量,如果不为空再将fn传入的文件名的文件的内容作为字符串并且去除两边的空格返回给$f,当ac传入的变量和f传入的文件内容完全相等的时候(注意)这里是完全相等,就会返回flag.
本题已经知道目录下有一个flag.txt文件内容是flags
所以在url里面构造index.php?ac=flags&fn=flag.txt 可以解决
后来发现了另一道题
如下图:
%E9%A2%98%E7%9B%AE2.jpg
这道题传入的参数是空,全部是空,回去试一下那道题居然不行,很奇怪,看看题目有什么不同,看到了== 和===一个是松散比较一个是严格比较,但是第一道题如果是空和空也会返回真啊,一脸懵逼,后来又发现第一道题对第一个参数的判断条件是empty() 第二个题目是isset(),其实这就是问题所在empty()和isset()究竟有什么区别?
查查资料自己也写了一个简单的函数测试一下
%E6%B5%8B%E8%AF%951.jpg
返回you
%E6%B5%8B%E8%AF%952.jpg
返回kong
%E6%B5%8B%E8%AF%953.jpg
返回kong
%E6%B5%8B%E8%AF%954.jpg
返回kong
总结一下
empty 不仅仅检查变量是不是存在,还会检查变量的值。变量不存在,或者变量存在但是值为’假’,就认为是空。
isset 只会检查变量是不是存在,变量不存在也就是NULL才认为是空,哪怕是“”也会认为存在。




PHPempty()和isset()比较
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

匿名
御结冰城 该用户已被删除