2==============================================
常见获取变量
$_GET$_POST $_COOKIE $_SERVER
is_numeric(),ctype_digit() 正则表达式//判断是否为数字,后面的函数为转换成为数字型
mysql_real_escape_string()//先连接数据库否则不转换 字符型的注入这样转换即可
addslashes()//数字型的注入
第er课:
union 前后要一致
php.ini中 magic_quotes_gpc=on 开启即可转译字符 防止注入
echo $_SERVER['QUREY_STRING'];返回?号自后的字符
<?php
echo$_GET['id']."<br/>";
echo$_SERVER['QUERY_STRING']."<br/>";
解决方法:
get_magic_quotes_gpc的举例:
if(!get_magic_quotes_gpc()) {//判断打开了没,没有就转换
$lastname= addslashes($_POST[‘lastname’]);
}else {
$lastname= $_POST[‘lastname’];
}
注意:http://localhost/dvwa/test.php?id=%bf%27
echo$_GET['id']."<br/>";
此处不进行转换结果为:'
中:
$id = $_GET['id'];
$id = mysql_real_escape_string($id);
高:字符型sql注入
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
//这里可以进行数字型的注入过滤
if (is_numeric($id)){
3=====================================================
测试sql注入
1'and(select 1 from(select count(*),concat((select (selectconcat(0x7e,0x27,unhex(Hex(cast(database() as char))),0x27,0x7e)) frominformation_schema.tables limit 0,1),floor(rand(0)*2))x frominformation_schema.tables group by x)a) and '1'='1
数据库报错信息泄露防范
1.把php.ini文件display_errors =Off
2.数据库查询函数前面加一个@字符
?id=1'%20and(select%201%20from(select%20count(*),concat((select%20(select%20concat(0x7e,0x27,unhex(Hex(cast(database()%20as%20char))),0x27,0x7e))%20from%20information_schema.tables%20limit%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)%20and%20'1'='1&Submit=Submit#
盲注:id=%27+union+select+user%2Cpassword+from+users%23&Submit=Submit
数字型的注入漏洞防护
1.is_numeric(),ctype_digit(),=intval() 正则表达式
2.str_length()限制输入的字符长度
字符型的注入漏洞防护
1.mysql_real_escape_string()过滤
2.str_length()限制输入的字符长度
如何挖掘sql注入漏洞
常见获取变量
$_GET$_POST $_COOKIE $_SERVER
数据库操作函数
mysql_query()参数:
http://www.w3school.com.cn/php/index.asp