PHP如何检测传入值是否在switch case分支中并跳转错误页
实现方案
核心改动分两部分,一是补全参数类型校验避免松散匹配误判,二是修改default分支指向自定义错误页。
- 修复原有代码的参数校验漏洞:PHP的switch比较默认是松散比较,而URL通过GET传递的参数默认是字符串类型,如果不做类型转换,传入类似
id=1xxx的非纯数字内容时,会被误判定为匹配case 1加载首页,无法走到错误分支。 - 替换default分支逻辑:把原来default分支加载首页的代码,替换为加载你提前创建好的自定义错误页即可,建议额外返回404HTTP状态码,符合标准协议规范。
修改后的完整代码
把你原来的代码替换成如下内容即可,注意把default分支里的错误页文件名换成你自己实际的文件路径:
<?php // 无id参数时默认加载首页 $id = 1; if(isset($_GET['id'])){ // 校验传入id是否为合法数字,过滤非数字的非法参数 if(is_numeric($_GET['id'])){ $id = intval($_GET['id']); }else{ // 非数字参数直接标记为非法值 $id = -1; } } switch ($id) { case 1: require_once 'home.php'; break; case 2: require_once 'courseInfo.php'; break; case 3: require_once 'aboutUs.html'; break; case 4: require_once 'contacts.html'; break; case 5: require_once 'accountDashboard.php'; break; case 6: require_once 'accountCourses.php'; break; case 7: require_once 'studentLogin.php'; break; case 8: require_once 'applicationForm.php'; break; case 9: require_once 'accountFiles.php'; break; case 10: require_once 'accountCursoAulas.php'; break; case 11: require_once 'event.php'; break; case 12: require_once 'allEvents.php'; break; default: // 返回标准404状态码 http_response_code(404); // 替换为你自己的自定义错误页文件路径 require_once 'customError.php'; break; } ?>
如果你不需要返回404状态码,删掉
http_response_code(404);这行就行,不影响错误页加载。
内容的提问来源于stack exchange,提问作者neptune
相关产品推荐
相关产品推荐

