前言 根据红日安全写的文章,学习PHP代码审计的第四节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完题目会用一个实例来加深巩固。...我们发现,找到子字符串的话就会返回对应的下标,没找到会返回false。...而在PHP中,0和false的取反都是true,这点需要我们注意,这道题目就是开发者在使用这个函数时,只考虑了返回false的情况,而没有考虑当首字符匹配时返回0的情况。...返回了true,其实就是var_dump((true || false) &&(true || false)) 成功绕过,可以进行XML注入。...我现在登陆test456账户,访问咱们构造的payload。来修改test123的密码。
; if ($a contains 'are') echo 'true'; PHP 中推荐的做法是使用 strpos 函数,如果有匹配,则返回首次出现的位置,也就是 int 类型的值;如果没有...,则返回 false。...== false; } 延伸学习 那么是不是一个 strpos 就够用了呢?显然不是,举例说明总是那么简单,现实情况却如此复杂。...写在最后 从优秀的案例中学习 PHP 函数的深度用法,可以大大提升我们的编程能力。抛开设计模式不说,PHP那些极为实用的函数,你真的都掌握了吗?...Happy coding :_) 我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫 PHP-Audit-Labs 。...在上面这个例子中,strpos 函数返回查找到的子字符串的下标。如果字符串开头就是我们要搜索的目标,则返回下标 0 ;如果搜索不到,则返回 false 。...在这道题目中,开发者只考虑到 strpos 函数返回 false 的情况,却忽略了匹配到的字符在首位时会返回 0 的情况,因为 false 和 0 的取反均为 true 。...由于我们暂时没有在互联网上找到 strpos 使用不当导致漏洞的CMS案例,所以这里只能选取一个相似的漏洞进行分析,同样是开发者验证不够周全导致的漏洞。...因为 === 操作会同时判断左右两边的值和数据类型是否相等,若有一个不等,即返回 false 。具体修复代码如下: ?
最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫 PHP-Audit-Labs 。...如果字符串开头就是我们要搜索的目标,则返回下标 0 ;如果搜索不到,则返回 false 。...在这道题目中,开发者只考虑到 strpos 函数返回 false 的情况,却忽略了匹配到的字符在首位时会返回 0 的情况,因为 false 和 0 的取反均为 true 。...我们尝试使用以下 payload ,观察 strpos 函数的返回结果。...因为 === 操作会同时判断左右两边的值和数据类型是否相等,若有一个不等,即返回 false 。
$str2 . "\\""; } 正确运行的输出结果: "yabadabadoo" does not contain "yaba" strpos是返回字符串str2在str1的位置,没有找到则返回false...然而实际上这次返回了0而在if语句中0也被当作false,所以,我们需要对false做类型判断,正确的代码如下: $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos...var_dump('0123' == 123);// true这里php会非常有趣的将'0123'转换成一个数字而且默认去掉了前面的0也就是123==123 var_dump('0123' === 123...true; true and false 答案显而易见。...$x = 3 + "15%" + "$25" 答案是18,PHP是会根据上下文实现类型的自动转换 上面的代码我们可以这样理解,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,
大家好,又见面了,我是你们的朋友全栈君。 查找字符串中是否包含某个词组 php echo strpos("一二三四五","一"); echo ""; echo strpos("一二三四五","二"); ?...php $word = "一二三四五"; $reWord = "六六六"; $pos = strpos("一二三四五","三"); $newWord = substr_replace($word...//要想得到(一二六六六 )的结果,就相当于替换掉后面的3个中文,可以把最后一个参数改为3*3即9...php $words = ["我", "你", "他", "她"];//过滤库 $sentence = "我和你一起去他家找她";//待过滤的句子 foreach($words as $word)
这里我们主要讲解php一句话木马,因为别的语言我也不会啊。 一句话木马示例 php @eval($_POST['pass']); ?...比如说我们传入 中国菜刀功能的实现 我们前面说过了,一句话木马最常见的利用工具是中国菜刀,那么我们已经知道原理了,是不是也可以自己写一个呢,答案是肯定的,接下来我将介绍如何实现中国菜刀的功能 Part...,失败false var_dump($caidao->connect()); 这里只实现了一个连接的功能,如果想实现更多功能可以自己写。...等取到返回值,再利用下面的代码来获取我们想要的返回值 mb_substr( $result , (mb_strpos($result,"") + mb_strlen(""...末尾的话 本来今天想多分享几篇来着,但是我家宽带不知道抽什么风,除了我的网站之外其他的网站都可以访问,一到我的网站就提示ERR_CONNECTION_RESET,,所以说整篇文章我都是在离线状态下打的,
在 PHP7 中我们一般使用 strpos 方法来检测,但是使用起来总是不够直观,经常还需要查询文档才能明白什么意思,特别是对于新手程序员来说,更不容易理解。...== strpos( $haystack, $needle ) ); } } str_starts_with 和 str_ends_with 这个函数很类似,第一个是检测一个字符串是否以另一个字符串开头...在 PHP7 中我们经常使用 substr_compare 或 strpos 来实现相应的功能,这样的代码不够直观,而且效率也不高。...现在,为了避免这种内部干扰,PHP 7.3 推出了新的函数来解决这个问题: key = array_key_first(array); 获取数组第一个元素的键名key = array_key_last(...array); 获取数组最后一个元素的键名 我之前在 WPJAM Basic 实现这两个函数的 polyfill,现在 WordPress 5.9 也实现了这两个函数的 polyfill: if ( !
首先简单介绍下 strpos 函数,strpos 函数是查找某个字符在字符串中的位置,这里需要明确这个函数的作用,这个函数得到的是位置。 如果存在,返回数字,否则返回的是 false。...必须使用===false 必须使用===false 必须使用===false 重要的事情说三遍,正确的使用方式如下 // 判断‘沈唁志博客’中是否存在‘博客’这个词 if (strpos('沈唁志博客...no,no,no,这家伙还有个隐藏坑,我来换个词 // 判断‘沈唁志博客 1’中是否存在‘1’这个数字 if (strpos('沈唁志博客1', 1)===false) { // 如果不存在执行此处代码...'; } 沈唁志|一个PHPer的成长之路!...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:在PHP中strpos函数的正确使用方式
大家好,又见面了,我是全栈君。 1.php7新特性 ??...运算符(NULL 合并运算符) 函数返回值类型声明 标量类型声明 use 批量声明 define 可以定义常量数组 闭包( Closure)增加了一个 call 方法 详细的可以见官网...详细的可以参考鸟哥的PPT:PHP7性能之源 3.include($_GET[‘p’])的安全隐患 现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php...p=anyfile.txt 来获取你的机密信息,或执行一个PHP脚本。...只要你能想得到。
大家在用 php 开发的时候 是否 有遇到过,对于一个获取的字符串,如果想要特定检测它是否 含有某个特定的字符或者子字符串,总是找不到好方法,或者根本做不到,迫于无奈而使用foreach。...函数: strpos("","") 参数1:待检索的字符串或字符串变量 参数2:要检测是否被含有的子字符串 成功,返回首个字符的起始位置 没有找到就返回false 看到这里,估计你会有点疑问,博文标题明明写着...“php 字符串特定检索函数---strpos()”,但是却返回位置的。...php 2 //$combine = array(); 3 //$combine = explode("马克思主义基本原理周一第10,11,12节{第2-17周}祁润兴乐育楼C206",",");...{ 5 $count=stripos("马克思主义基本原理周一第10,11,12节{第2-17周}祁润兴乐育楼C206","12节"); //查找 “12节” 6 if($count===false
运算符(NULL 合并运算符) 函数返回值类型声明 标量类型声明 use 批量声明 define 可以定义常量数组 闭包( Closure)增加了一个 call 方法 详细的可以见官网:php7-new-features...($_GET['p'])的安全隐患 现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php?...p=anyfile.txt 来获取你的机密信息,或执行一个PHP脚本。...只要你能想得到。...单例模式 工厂模式 脸面模式(facade) 注册器模式 策略模式 原型模式 装饰器模式 更多的可以看PHP设计模式简介这篇文章 7.验证ip是否正确 function check_ip($ip) {
hint.php"]; 在浏览器地址栏把 source.php 改成 hint.php 即可,然后可以看到一串字符,虽然不是答案,但是我们得到了一个线索,flag 在 ffffllllaaaagggg...); 这里给 $_page 赋了个什么值: mb_substr() 函数负责获取部分字符串; mb_strpos() 函数负责查找字符串在另一个字符串中首次出现的位置; 在 PHP 中,字符串后的 '....为并置运算符,表示连接两个字符串; 因此,mb_strpos 返回的是 $page 字符串中的字符 '?' 之前的所有字符串,又因为字符串末尾置了一个 '?' ,若原字符串中不含 '?'...cl4y,是一个WEB开发程序员,最近我做了一个网站,快来看看它有多精湛叭!...&password&' 但是这里就会多出一个单引号,服务器将会报错,因此这里我们需要用到注释,用 # 将后面的代码注释掉,就能正确返回真值了。
一、前方有坑 php某些自带函数,如果使用不当,也会坑得你人仰马翻。比如:strpos() 先了解一下strpos()函数是干啥的。...所以,正确的判断应该是: $a = 'abcd'; $c = 'a'; echo strpos($a,$c)!==false ?...返回的数字位置是相对于 haystack 的起始位置而言的。 返回值 以整型返回位置信息。如果没找到 needle,strpos() 将返回布尔型的 FALSE 值。...也就是说,此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值,例如 0 或 ""(空串)。...与strpos()有一点不同是,该函数的返回值是false或者字符串的一部分。如果单纯的判断两个字符串的包含关系,最好使用strpos,因为速度更快、耗费内存更少。
大家好,又见面了,我是你们的朋友全栈君。 A7——Missing Functional Level Access Control 应用层访问控制缺失。...== false || strpos($data, "..\\") !== false || strpos($data, "/..") !...== false || strpos($data, "\..") !== false || strpos($data, ".") !..."; } 其中,strpos(string, find, [start])查找find在string中第一次中出现的位置,并将位置返回。 base path: ....概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
其实答案呼之欲出了——和Roundcube的RCE类似,mail函数的第五个参数,传命令参数的地方没有进行转义。...word=roundcube )一样,是传给mail函数的第五个参数没有正确过滤: ? 但上图是错的,因为这里是不支持bash的一些语法的,也就是说反引号、${IFS}都是无效的。...== false or strpos($address, "\r") !== false) { return false; } if (!...==‘auto’,它会自动选择一个方式对email进行检测 如果php支持正则PCRE(也就是包含preg_replace函数),就用正则的方式来检查,就是那一大串很难读懂的正则 如果php不支持PCRE...当然答案也是否定的,我提两种可能的情况。 开发者手工指定Email检查方法 PHPMailer是支持让开发者手工指定Email的检测方法的: ?
FILTER] HOST = localhost,127.0.0.1,abc.com IP = 127.0.0.1,192.168.0.253 中间件逻辑 to do中实现过滤来源网址逻辑,失败时返回错误...$flag) { return json(["errorCode" => 9998,"errorMessage" => '请求来源不正确']); } 再进一步,增加来源IP判断 //来源IP $ip...$flag) { return json(["errorCode" => 9998,"errorMessage" => '请求来源不正确']); } return $next($request)...; } 控制器使用 如果所有控制器都需要使用这个中间件过滤,则在`app\middleware.php`中增加: \app\middleware\Filter::class 如果只有需要的控制器才使用这个中间件过滤...,则可以在需要的控件器类中增加: //此类使用中间件 protected $middleware = [Filter::class];
尝试的第一步,就是去PHP 5.4根目录然后在页面顶部的搜索框输入strpos。搜索的结果是一个很大的列表,展示了strpos在PHP源码中出现的位置。 返回(会返回null给PHP的用户层代码)。...php_error_docref函数抛出,然后函数使用RETURN_FALSE宏返回false。...php_error_docref是一个错误函数,你可以在扩展目录找到它(比如,ext文件夹)。它的名字根据它在错误页面中返回文档参考(就是那些不会正常工作的函数)定义。...Zend functions 我对strpos这个函数感觉好累,让我们找另一个函数吧:strlen。我们使用之前的方法: 从PHP5.4源码根目录开始搜索strlen。
is_numeric(jp_total)||strpos(jp_total,".")!...,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写 答:其中bug存在两个方面, 1、在windowns中,当文件只有只读属性时,is_writeable()函数才返回false...5.PHP的chmod()函数存在Bug,无法保证设置成功,请写一个函数在指定路径下创建一个目录/文件并确保可以正确设置权限掩码 答:我也找不到答案 6.PHP处理上传文件信息数组中的文件类型_FILES...,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话,就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。...的编解码函数和Javascript的编解码函数,确保PHP编码数据可以被Javascript正确解码 、Javascript编码的数据可以被PHP正确解码 答: <?
领取专属 10元无门槛券
手把手带您无忧上云