php注入记录


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



你可能感兴趣的:(PHP,web开发)