首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP -如何修复"strpos“错误地评估我的URL

strpos 函数在 PHP 中用于查找字符串中的另一个字符串的首次出现位置。如果未找到,则返回 false。这个函数在处理 URL 时可能会遇到一些问题,尤其是当 URL 中包含特殊字符或编码时。

基础概念

strpos 函数的原型如下:

代码语言:txt
复制
strpos(string $haystack, string $needle, int $offset = 0): int|false
  • $haystack:要搜索的字符串。
  • $needle:要在 $haystack 中查找的子字符串。
  • $offset:开始搜索的位置。

常见问题

  1. 大小写敏感性strpos 是大小写敏感的,这意味着 'http''HTTP' 会被视为不同的字符串。
  2. 特殊字符和编码:URL 中可能包含特殊字符或经过编码的字符,这可能会影响 strpos 的结果。
  3. 返回值类型:如果未找到子字符串,strpos 返回 false,但如果有匹配,它返回的是一个整数索引。这可能导致类型混淆问题。

解决方案

1. 使用 stripos 进行不区分大小写的搜索

代码语言:txt
复制
$position = stripos($url, 'http');
if ($position !== false) {
    // 找到了
} else {
    // 没有找到
}

2. 确保 URL 正确解码

使用 urldecode 函数确保 URL 中的特殊字符被正确解码。

代码语言:txt
复制
$url = urldecode($url);
$position = strpos($url, 'http');

3. 检查返回值类型

为了避免类型混淆,应该明确检查返回值是否严格等于 false

代码语言:txt
复制
$position = strpos($url, 'http');
if ($position !== false) {
    // 找到了
} else {
    // 没有找到
}

4. 使用正则表达式进行更复杂的匹配

对于更复杂的 URL 匹配需求,可以使用 preg_match 函数。

代码语言:txt
复制
if (preg_match('/^https?:\/\//i', $url)) {
    // URL 是以 http 或 https 开头的
}

应用场景

  • 验证 URL 格式:在处理用户输入的 URL 时,可以使用上述方法来验证其格式是否正确。
  • 过滤内容:在内容管理系统中,可能需要根据 URL 来过滤或分类内容。
  • 安全检查:在处理外部链接时,检查 URL 是否符合预期格式可以帮助防止安全问题。

通过这些方法,可以有效地修复 strpos 在处理 URL 时可能遇到的问题,并提高代码的健壮性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

通达OA代码审计篇 - 11.7 有条件的任意命令执行

/a}_.txt 这里的修复方式也很直接,newid被添加了额外的过滤。 截至目前为止,我们可以将一个非php文件传到任意为止了。...在这里曾经困扰了我很久,因为这里的文件上传实际上受到了3个以上的限制,且所有的限制都集中在php后缀,但这里明显是个不太现实的目标。...= "") { if (substr($url, 0, 1) == "/") { $url = substr($url, 1); } if (strpos($url, "..") !...== false) { echo _("ERROR URL"); exit(); } if ((strpos($url, "general/") === 0) || (strpos...总结 这个组合漏洞最早是我在2020年年初挖的,一直存在手里也没用上,没想到突然就更新了,修复方式还特别像是翻着漏洞文档一行一行修复的,就感觉很无奈。

84210
  • 代码审计Day4 - strpos使用不当引发漏洞

    本次案例,我们选取 DeDecms V5.7SP2正式版 进行分析,该CMS存在未修复的任意用户密码重置漏洞。...那么这里拼接的url其实是 http://127.0.0.1/member/resetpassword.php?...漏洞验证 我们分别注册 test1 , test2 两个账号 第一步访问 payload 中的 url http://127.0.0.1/dedecms/member/resetpassword.php...dopost=getpasswd&id=9&key=OTyEGJtg 最后成功修改密码,我将密码修改成 123456 ,数据库中 test2 的密码字段也变成了 123456 加密之后的值。...具体修复代码如下: 结语 看完了上述分析,不知道大家是否对 strpos使用不当 引发的漏洞有了更加深入的理解,文中用到的代码可以从 这里 下载,当然文中若有不当之处,还望各位斧正。

    1.4K00

    从梦想到现实:十年见证AI自动化漏洞修复的演变

    2014年的梦想与构想回到2014年,那时的我还在不断学习、探索和思考,如何利用科技力量去创造一个更加安全和高效的数字世界。...作为一名初出茅庐的技术爱好者,我深知互联网的发展离不开安全防护,而网站漏洞修复是其中至关重要的一环。于是,我萌生了一个大胆的想法——“通过云平台,打造一套自动化修复第三方网站漏洞的流程。”...php// 定义验证密钥,用于验证请求的合法性$verification_key = "4a963a40c31d29dcdfe4d495c1b73bef";// 检查 URL 中是否包含 'key' 参数...PHP 代码并检查是否有恶意代码 $openai_response = call_openai_api("为我修复以下 PHP 代码并检查该 PHP 代码是否为后门恶意病毒...漏洞检测、修复方案生成,这些繁杂的步骤都能在后台自动化地进行处理。更为关键的是,AI系统具备自我学习的能力。每次漏洞修复后,系统都会对数据进行分析,优化检测算法,使得下一次的修复更加快速、精准。

    27720

    给PHP开发者讲讲PHP源码-第二部分

    欢迎来到"给PHP开发者的PHP源码"系列的第二部分。 在上一篇中,ircmaxell说明了你可以在哪里找到PHP的源码,它的基本目录结构以及简单地介绍了一些C语言(因为PHP是用C语言来写的)。...在这篇文章中,我们谈论的是定位PHP内部函数的定义,以及理解它们的原理。 如何找到函数的定义 作为开始,让我们尝试找出strpos函数的定义。...第二个链接更有趣:它带我们到string.c文件,这个文件包含了函数真正的源代码。 在我带你一步一步地查阅这个函数之前,我推荐你自己尝试理解这个函数。...php_error_docref是一个错误函数,你可以在扩展目录找到它(比如,ext文件夹)。它的名字根据它在错误页面中返回文档参考(就是那些不会正常工作的函数)定义。...Zend functions 我对strpos这个函数感觉好累,让我们找另一个函数吧:strlen。我们使用之前的方法: 从PHP5.4源码根目录开始搜索strlen。

    95980

    【网络安全】「漏洞复现」(三)建议升级!旧版 Cecil 存在路径遍历漏洞!

    我们可以从提交修复的 Git 入手分析:图片---$path = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));上述代码将解析...$_SERVER['REQUEST_URI'] 中的 URL,并对 URL 中的编码部分进行解码,然后将解码后的路径赋值给变量 $path。...$path = htmlspecialchars(urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));简而言之,第二句代码相对于第一句代码...而修复后的代码相比第一句增加了更复杂的条件判断:if ((realpath($filename) === false || strpos(realpath($filename), realpath($_...我是 ,期待你的关注,创作不易,请多多支持; 公众号:sidiot的技术驿站; 系列专栏:安全测试工具和技术:从漏洞扫描到渗透测试我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    25420

    通过匿名函数和验证规则类自定义 Laravel 字段验证规则

    通过匿名函数实现自定义规则 我们先演示下如何在控制器方法中调用 $this->validate() 时自定义验证规则,以 title 字段为例,除了系统提供的字段验证规则之外,有时候我们还会禁止用户输入包含敏感词的字段...,在我们国家,这也是司空见惯的事情,那要如何实现这个 Laravel 办不到的事情呢,通过自定义验证规则: $this->validate($request, [ 'title' => [...如果检查到输入标题包含敏感词,则认为验证不通过,返回错误信息(我这里的主要目的是演示如何自定义验证规则,实际环境中不要这样校验敏感词哈,效率太低)。..., $value) { return strpos($value, '敏感词') === false; } 如果输入值中包含敏感词,则认为验证失败,然后在 message 方法中修改验证失败的错误消息...' => 'URL', 'picture' => '图片' ]; } 这样,在验证规则类 SensitiveWordRule 验证失败时返回错误提示时,就可以将 :attribute

    2.9K20

    awaiting production checklist_解题神器app

    大家好,又见面了,我是你们的朋友全栈君。 A7——Missing Functional Level Access Control 应用层访问控制缺失。..."; } 其中,strpos(string, find, [start])查找find在string中第一次中出现的位置,并将位置返回。 base path: ....通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。...到这里的话思路大概就清楚了,在low中可以通过直接访问url的方式,在log off后继续访问敏感文件。而在medium和high中,进行了正确的配置修复了漏洞。...在”/evil”下有3个给供ssrf实验用的文件,其中分别包括了三个不同的bwapp的payload。 http://localhost/bwapp/rlfi.php?

    72430

    php一句话木马深度解析

    这里我们主要讲解php一句话木马,因为别的语言我也不会啊。 一句话木马示例 php @eval($_POST['pass']); ?...> 一句话木马原理 在这里我们可以看到他的核心参数就是eval函数,这个eval函数是干嘛的呢,我们通过php官网的文档可以得到以下信息。...比如说我们传入 中国菜刀功能的实现 我们前面说过了,一句话木马最常见的利用工具是中国菜刀,那么我们已经知道原理了,是不是也可以自己写一个呢,答案是肯定的,接下来我将介绍如何实现中国菜刀的功能 Part...php $url = 'http://127.0.0.1/index.php'; //一句话木马所在文件,一定要带文件后缀 $pass = 'pass'; //$_POST 或 $_GET 键名 $method...末尾的话 本来今天想多分享几篇来着,但是我家宽带不知道抽什么风,除了我的网站之外其他的网站都可以访问,一到我的网站就提示ERR_CONNECTION_RESET,,所以说整篇文章我都是在离线状态下打的,

    3.9K20

    通达OA代码审计篇二 - 11.8 后台Getshell

    ---- 前篇:通达OA代码审计篇 - 11.7 有条件的任意命令执行 前篇中提到的漏洞在11.8版本中被完全修复后,我痛定思痛,从头开始找一个新的漏洞,于是就有了今天这个漏洞的诞生,但没想到的是,在保留到...2021年初时,1月11号更新的11.9版本中再次被定向修复。...除了这个以外,在前一篇文章我提到过,通达OA关于文件上传相关的配置非常完善。首先是建了attachment作为附件目录,正常的文件上传都会传到这里。...pht,phtml等… 换言之,也就是如果一切文件上传都建立在通达OA本身的逻辑上,我们一定没办法只靠文件上传一个漏洞来getshell,在前篇中,我利用了一个文件包含来引用上传的文件。...漏洞证明 写在最后 这个漏洞是在前篇文章被修复之后挖掘的,可以算是相对比较隐蔽的漏洞吧,可惜没想到在手里还没过3个月就又被修复了,其实这个漏洞还是有配合的前台绕过方式的,但是由于时期特殊就不公开了,比较可惜的是在

    2K20

    seacms修复历程总结

    seacms修复历程总结 从6.45版本开始search.php就存在前台getshell的漏洞,到6.54官方对其进行修补,但修复方法是对用户输入的参数进行过滤并限制长度为20个字符,这种修复方法仍然可以通过反复替换模板达到组合绕过补丁...下面来细致分析一下海洋cms爆出的漏洞以及修复历程,并附上自己写的脚本,如有不对欢迎指正。...2.main.class.php function parseIf($content){ if (strpos($content,'{if:')=== false){ return $content..."): print("[+] Please make sure url end with search.php") exit() while 1: code =...导致最后写入assert($_SERVER[QUERY_STRING]),因为$SERVER变量默认是不检查数据的安全性的,因而当我们把命令加在url后,$_SERVER[QUERY_STRING]便可以获得我们发送的请求也就是这里传递的要执行的命令

    2K70

    php记录搜索引擎爬行记录的实现代码

    :$tlc_thispage/r/n"); fclose($data); } WEB_PATH为index.PHP下define的根目录路径,意思就是说robotslogs.txt文件是放在根目录下的...因为我觉得没必要,所以把自己网站上的代码删除了,所以也没有效果示例了。...PS:php获取各搜索蜘蛛爬行记录的代码 支持如下的搜索引擎:Baidu,Google,Bing,Yahoo,Soso,Sogou,Yodao爬行网站的记录! 代码: php /** function get_naps_bot() { $useragent /**【本文中一些PHP版本可能是以前的,如果不是一定要,建议PHP尽量使用7.2以上的版本】**/= strtolower...> 以上所述是小编给大家介绍的php记录搜索引擎爬行记录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

    52200
    领券