sql注入之宽字节注入

目录

宽字节注入原理

例子解释

例子

如何防止宽字节注入

使用参数化查询

验证和过滤用户输入

设置正确的字符集

避免使用宽字节字符集


宽字节注入原理

在使用了PHP中转义函数addslashes()时会在单引号、双引号、null等敏感字符用转义符\进行转义。如使用addslashes()时会在 ‘ 前加个转义字符变为 \' 。服务器端在使用CBK编码时,GBK编码中某些字符与\编码组合可以被解析为一个汉字。我们可以借助这个特性使得\和前边的字符融合成一个汉字,使得'逃逸出去,从而达成我们注入的目的。

例子解释

我们注入点输入 ' 时,如果有相应的过滤函数,服务器端会进行处理将 ' 变成 \' 。然后进行编码后就会变成%5C%27。我们再%5C%27前加入%df,如果服务器端是CBK编码的话,服务器端就会认为%df和%5C是一个中文而%df%5C是汉字 連 ,这样 ' 就逃逸出去了。接下来就可以进行注入了。

例子

实验环境sql-labs第32关(只展示爆出数据的木马)

如何防止宽字节注入

使用参数化查询

参数化查询是防止SQL注入(包括宽字节注入)的最有效方法。不要直接在SQL查询中拼接用户输入,而是使用参数化查询来确保用户输入被正确转义。

验证和过滤用户输入

始终验证和过滤用户输入,确保它们符合预期的格式和长度。这可以通过正则表达式、白名单等方法实现。

设置正确的字符集

确保数据库、应用程序和Web服务器都使用相同的字符集(如UTF-8)。这样可以减少由于字符集不匹配而导致的潜在问题。

避免使用宽字节字符集

如果可能的话,避免在数据库或应用程序中使用宽字节字符集(如GBK、GB2312等)。相反,使用更通用的字符集(如UTF-8)可以减少与字符编码相关的问题。


不嫌弃的点点关注,点点赞 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值