一次查询到纪录,一次没有,咱们来看看源码
//show.php 12-15行
// 履行mysql查询语句
$query = "select * from postmessage where id = ".$_GET["id"];
$result = mysql_query($query)
or die("履行ySQL查询语句掉败:" . mysql_error());
参数id传递出去后,和后面的字符串联合的sql语句放入数据库履行 查询
提交 and 1=1,语句酿成select * from postmessage where id = 71 and 1=1 这语句前值后值都为真,and今后也为真,前往查询到的数据
提交 and 1=2,语句酿成select * from postmessage where id = 71 and 1=2 这语句前值为真,后值为假,and今后为假,查询不就任何数据
正常的SQL查询,经由咱们机关的语句以后,构成了SQL注入进击。经由过程这个注入点,咱们还可以进一步拿到权限,好比说应用 union读取办理暗码,读取数据库信息,或用mysql的load_file,into outfile等函数进一步浸透。 提防办法 整型参数:
应用 intval函数将数据转换成整数
函数原型 int intval(mixed var, int base)
var是要转换成整形的变量
base,可选,是基本数,默许是10 浮点型参数:
应用 floatval或doubleval函数分离转换单精度和双精度浮点型参数
函数原型 int floatval(mixed var)
var是要转换的变量 int doubleval(mixed var)
var是要转换的变量 字符型参数:
应用 addslashes函数来将单引号“’”转换成“\’”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”,NULL字符加上反斜杠“\”
函数原型 string addslashes (string str)
str是要反省的字符串
那末方才呈现的代码破绽,咱们可以如许修补
// 履行mysql查询语句
$query = "select * from postmessage where id = ".intval($_GET["id"]);
$result = mysql_query($query)
or die("履行ySQL查询语句掉败:" . mysql_error());