php中is_numeric函数的绕过

本文详细介绍了如何通过数组十六进制、取模运算和特殊字符绕过PHP中的is_numeric函数,包括使用数组+58B、1315%20和9999a等实例,适用于SQL注入场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php中is_numeric函数的绕过


$j = $_POST[j];
is_numeric($j)?die("<br/>not is numeric <br/>fail 10"):NULL; 
if($j > 1314){
echo "<br/>pass 10";}

方法一

利用数组+十六进制来进行绕过

j[]=58B

方法二

在这里插入图片描述

j=1315%20
j=1315%00

方法三

php中当一个其他数据类型和数值类型的数据比较大小时,会先将其他数据类型转换成数值类型,这里输入类似9999a数据也可绕过

j=9999a

此函数若是在sql注入中碰到也可以用16进制来绕过,将sql语句转为16进制字符串即可

### 绕过 PHP `is_numeric()` 函数的检测方法 `is_numeric()` 是一种用于验证变量是否为数字或者数字字符串的函数。然而,在某些情况下,该函数可能存在被绕过的风险。以下是几种可能实现绕过的方式: #### 方法一:使用科学计数法表示形式 通过传递形如 `0eXXX` 的参数,可以成功绕过 `is_numeric()` 的检测[^1]。这种表达方式实际上是合法的数值格式(即科学记数法),因此会被识别为有效的数字。 ```php $j = '0e123'; // 科学计数法下的有效数值 if(is_numeric($j)){ echo "Bypassed!"; } ``` 上述代码片段展示了如何利用科学计数法来规避检查逻辑。 #### 方法二:构造特殊字符组合 除了常规整型或浮点型数据外,还可以尝试输入一些特殊的字符序列作为测试样本。例如,“∞”无穷大符号以及“NaN”非数字值也可能满足特定条件下被认为是numeric的要求[^2]。 ```php // 测试用例展示其他潜在可接受的形式 $testCases = array('INF','-INF','NAN'); foreach ($testCases as $case){ var_dump(is_numeric($case)); } ``` 以上脚本会输出对于这些边界情况的结果状态。 #### 安全建议与注意事项 尽管存在多种途径能够避开基本类型的校验机制,但从安全性角度出发并不推荐实际项目开发过程中依赖此类技巧。相反应该采用更加严谨的数据清洗措施比如[`filter_var`](https://www.php.net/manual/en/function.filter-var.php)配合相应的过滤器选项或是正则匹配等方式确保接收的数据符合预期标准[^3]。 另外值得注意的是,如果目标环境启用了magic_quotes_gpc特性,则所有来自外部请求中的单引号、双引号等都会自动转义处理从而影响最终判定效果;同时也要考虑到不同版本间行为差异可能导致兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值