2025-06-16 19:06:53
大家好,今天小编关注到一个比较有意思的话题,就是关于php sql注入的问题,于是小编就整理了3个相关介绍php sql注入的解答,让我们一起看看吧。
判断是否存在SQL注入首先找到可能的注入点;比如常见的get,post,甚至cookie,传递参数到PHP,然后参数被拼接到SQL中,如果后端接收参数后没有进行验证过滤,就很可能会出现注入。比如xxx.com?id=321,id就很可能是注入点。
说白了就是不要相信用户输入,对用户可控的参数进行严格校验。注意是严格校验!简单的去空格,或者是特殊字符替换很容易绕过。
如果已经有原码,可以进行代码审计,进行逐一排查。也可以搭建本地环境使用类似于sqlmap这样的自动化工具进行可以链接的检测。
个人理解仅供参考,如有偏颇望批评指正!
1、UNION query SQL injection(可联合查询注入)
2、Error-based SQL injection(报错型注入)
数据库报错注入版本限制
extractvalue()
updatexml()
floor()
exp()
GeometryCollection()
linestring()
polygon()
multipoint()
multipolygon()
multilinestring()
3、Boolean-based blind SQL injection(布尔型注入)
1、判断长度
2、猜测内容
4、Time-based blind SQL injection(基于时间延迟注入)
Sleep()
Benchmark(ket,)
笛卡尔积 Writeup
GET_LOCK Writeup
RLIKE
5、Stacked queries SQL injection(可多语句查询注入/堆叠注入)
6、其它注入
1、http头部注入
1、User-Agent 头字段注入
2、Referer 头字段注入
3、Cookie 头字段注入
4、二次注入
用#{参数}进行预编译就可以防止了,千万别用${}这种方式注入参数。
mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候当然需要防止sql注入。其实Mybatis的sql是一个具有“输入+输出”功能,类似于函数的结构,如下:
select id,title,author,content
from blog where id=#{id}
这里,parameterType标示了输入的参数类型,resultType标示了输出的参数类型。回应上文,如果我们想防止sql注入,理所当然地要在输入参数上下功夫。上面代码中高亮部分即输入参数在sql中拼接的部分,传入参数后,打印出执行的sql语句,会看到sql是这样的:
select id,title,author,content from blog where id = ?
不管输入什么参数,打印出的sql都是这样的。这是因为mybatis启用了预编译功能,在sql执行前,会先将上面的sql发送给数据库进行编译,执行时,直接使用编译好的sql,替换占位符“?”就可以了。因为sql注入只能对编译过程起作用,所以这样的方式就很好地避免了sql注入的问题。
到此,以上就是小编对于php sql注入的问题就介绍到这了,希望介绍关于php sql注入的3点解答对大家有用。
上一篇:php全栈,php全栈工程师
Copyright © 2005-2025 代潇瑞博客 www.daixiaorui.com All Rights Reserved.
免责声明: 1、本站部分内容系互联网收集或编辑转载,并不代表本网赞同其观点和对其真实性负责。 2、本页面内容里面包含的图片、视频、音频等文件均为外部引用,本站一律不提供存储。 3、如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除或断开链接! 4、本站如遇以版权恶意诈骗,我们必奉陪到底,抵制恶意行为。 ※ 有关作品版权事宜请联系客服邮箱:478923*qq.com(*换成@)
渝ICP备2023009091号-21