利用PHP设计SQL注入分析,PHP中 简单的SQL注入分析

本文详细介绍了SQL注入的原理,通过实例展示了数值类型和字符串类型字段的注入方式。对于数值类型,注入可通过在查询参数后添加`+0`来避免;对于字符串类型,可以启用PHP的`magic_quotes_gpc`进行转义防御。了解这些技巧有助于提升网站安全性。
摘要由CSDN通过智能技术生成

SQL注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

以下介绍SQL注入方式:

首先建表如下:

1 create database sqltest charset utf82

3 create table test(4 id int,5 name varchar(10),6 age tinyint unsigned7 )engine=myisam charset=utf8

插入数据如下

20180110162821811897.png

我们分成字段为数值类型和字符串类型两种方式进行测试:

一、下面开始测试字段为数值类型时的sql注入,sql语句:

1 $id= $_GET[‘tid‘];2 $sql = "select * from test where id = $id";

查找id为1的记录,在浏览器中输入并执行如下

20180110162821813850.png

可以看到,此时只查询到1条记录,查询结果上面显示的是自动拼接好的sql字符串。继续,将浏览器URL中的tid=1 换成tid=1 or 1=1测试,结果如下

20180110162821814826.png

此时所有的记录都被查出来了,这是针对字段为数值类型时 的sql注入方式,为了避免被注入我们可以将代码:

$id= $_GET[‘tid‘];

改成如下:

$id= $_GET[‘tid‘] + 0;

原理:当数据库中字段为数值类型时,不管你的参数多么险恶,+0后都老老实实变成数值类型。

二、测试字段为数值类型时的sql注入,sql语句:

$name = $_GET[‘name‘];

$sql1 = "select * from test where name = ‘$name‘";

查找name为test1的记录,在浏览器中输入并执行如下:

20180110162821816779.png

只查到一条记录,这是正确的。现在把URL中 name=test1 换成 name=test1‘ or 1=1--‘   测试如下:

20180110162821817756.png

所有记录都被查出来了。从上图显示的sql语句可以看出where后面的表达式 name = ‘test1‘ or 1=1--‘ 恒为真(--将其后面的字符串都省略掉)

针对上面的sql注入 我们可以通过将浏览器中接受来的字符转义的方式避免,在php中 可以采用魔术引号的方法,将PHP.ini文件中的参数magic_quotes_gpc置为ON

例如: 浏览器中name = test1‘ or 1=1--‘,经过转义后得到的sql字符串变为:

select * from test where name = ‘test1\‘ or 1=1--\‘‘

再次查询变为:

20180110162821819709.png

这时查不到任何结果,字符串的引号是成对出现的,经过转义后 sql 把test\‘ or 1=1--\‘作为一个字符串,而不是像上述把 ‘test‘ 作为一个字符串。

这只是最简单的sql注入,更深的后面再研究吧

原文:http://www.cnblogs.com/tower9556/p/4666642.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值