目录
MYSQL语句一个很重要的概念:成对出现
注释符的概念
使用注释符,mysql注释符有#、-- -(或者--+-)、/**/三种
注释符#,-- -(--+-)都是把后面的语句全部注释掉了,而内联注释/**/则是注释指定部分,需要一前一后闭合。
被单引号' '包括的字符无实际意义
注释符“-- -“将它后面的——' LIMIT 0,1全部注释掉了,而程序编译时,不对注释作任何处理,所以程序执行时只执行到SELECT * FROM users WHERE id='1',这里。
判断MYSQL语句闭合方式:
闭合的概念:MYSQL数据库的包容性较强,如果输入了错误的数据类型,MYSQL数据库会自动将其转换成正确的数据类型,
如:输入 1)、1"、1-等,只要数字后面的字符不是闭合符的,数据库都会把你输入的错误数据类型转换成正确的数据类型。
但是,若输入的数字后面的字符恰好是闭合符,则会形成闭合,若闭合后形成的sql语句是错误的,那么sql语句执行就会错误,从而造成页面显示错误。
sql的注入可以分为数字型,字符型。
简单分辨方法:
看\斜杠后面跟着的字符,是什么字符,它的闭合字符就是什么,若是没有,就为数字型。
数字型
测试步骤:
1、加单引号,URL:xxx.xxx.xxx/xxx.php?id=3';
对应的sql:select * from table where id=3' 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;
2、加and 1=1 ,URL:xxx.xxx.xxx/xxx.php?id=3 and 1=1;
对应的sql:select * from table where id=3' and 1=1 语句执行正常,与原始页面没有差异;
3、加and 1=2,URL:xxx.xxx.xxx/xxx.php?id=3 and 1=2;
对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异;