SQL注入过滤函数有限制的绕过

前提:

以下函数能绕过都是因为开发者代码能力不足或疏忽造成的,存在一定限制性

str_replace()函数

例如:

$x=str_replace("'","\\'",$_GET['x']);
echo "select name from table where id='{$x}';";

注意:\\在MySQL里是用于转义特殊字符

解题思路:

根据题目输入x=\',就能被转义为\\',从而使单引号逃逸,也就是说逗号还是替换为逗号,过滤函数没有起到作用。

htmlspecialchars()函数

例如:

$x=htmlspecialchars($_GET['x']);
echo "select name from table where id='{$x}';";

注意:htmlspecialchars函数多常用于防止xss攻击,htmlspecialchars函数要转义单引号需要设置第二个参数为ENT_QUOTES,转义双引号需要设置第二个参数为ENT_NOQUOTES

解题思路:

看题目知htmlspecialchars函数没有设置第二个参数,所以并没有起到转义的作用。

is_numeric()函数

例如:

try{
    if(!is_numeric($_GET['x'])){
        header("Status: 404 Not found");
    }
    echo "select name from table where id='{$_GET['x']}';";
}
catch(exception $e){
    echo 1;
}

解题思路:

虽然is_numeric函数检测到输入的参数不是数字或数字字符串就会给http头部添加404的状态码,但没有添加exit代码使其中断执行,所以并不影响到php文件的执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值