1.注入的解释:
//如果
$name="'or 1=1#";
$pwd=md5("123123");
$sql="select * from users where username='$name' and password='$pwd'";
//则以上的SQL语句会被php解析为:
select * from users where username='' or 1=1#' and password=md5('123123')
因为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样SQL语句就变成了:
select * from users where username='' or 1=1
因为1永远=1,所以where条件永远真,则结果就相当于select * from users
2.因为预定义在$mysqli_stmt=$mysqli->prepare($sql);时已经将SQL模板传递给mysql数据库并让数据库系统做语句分析,之后的传递参数将不对SQL语句做分析,所以不会出现上面所说的注入.
3.获得结果集
$mysqli_stmt->store_result();
4.当查询语句返回的是结果集时,会因为在内存中存储结果集而占用空间,所以在之后不需要相应结果集的情况下释放结果集,回收内存空间.
//释放结果集
$mysqli_stmt->free_result();
5.关闭预处理语句
$mysqli_stmt->close();
$mysqli->close();
0赞 · 0采集
茅丝录_ICE
2017-10-27
防止sql语句的注入:
1.对用户的输入做一下过滤、
2.使用预处理语句
0赞 · 0采集
Gigure
2017-09-26
1.注入的解释:
//如果
$name=“'or 1=1#”;
$pwd=md5(“123123”);
$sql="select * from users where username='$name' andpassword='$pwd'";
//则以上的SQL语句会被php解析为:
select * from users where username='' or 1=1#' and password=md5(‘’)
因为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样SQL语句就变成了:
select * from users where username='' or 1=1
因为1永远=1,所以where条件永远真,则结果就相当于select * from users
2.因为预定义在$mysqli_stmt=$mysqli->prepare($sql);时已经将SQL模板传递给mysql数据库并让数据库系统做语句分析,之后的传递参数将不对SQL语句做分析,所以不会出现上面所说的注入.
3.获得结果集
$mysqli_stmt->store_result();
4.当查询语句返回的是结果集时,会因为在内存中存储结果集而占用空间,所以在之后不需要相应结果集的情况下释放结果集,回收内存空间.
//释放结果集
$mysqli_stmt->free_result();
5.关闭预处理语句
$mysqli_stmt->close();
0赞 · 0采集
哎咿呦鲍鲍
2017-02-25
1.注入的解释:
//如果
$name=“'or 1=1#”;
$pwd=md5(“123123”);
$sql="select * from users where username='$name' andpassword='$pwd'";
//则以上的SQL语句会被php解析为:
select * from users where username='' or 1=1#' and password=md5(‘’)
因为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样SQL语句就变成了:
select * from users where username='' or 1=1
因为1永远=1,所以where条件永远真,则结果就相当于select * from users
2.因为预定义在$mysqli_stmt=$mysqli->prepare($sql);时已经将SQL模板传递给mysql数据库并让数据库系统做语句分析,之后的传递参数将不对SQL语句做分析,所以不会出现上面所说的注入.
3.获得结果集
$mysqli_stmt->store_result();
4.当查询语句返回的是结果集时,会因为在内存中存储结果集而占用空间,所以在之后不需要相应结果集的情况下释放结果集,回收内存空间.
//释放结果集
$mysqli_stmt->free_result();
5.关闭预处理语句
$mysqli_stmt->close();
1赞 · 1采集
黄枪枪
2017-02-09
1.注入的解释:
//如果
$name=“or 1=1#”;
$pwd=md5(“123123”);
$sql="select * from users where username='$name' andpassword='$pwd'";
//则以上的SQL语句会被php解析为:
select * from users where username='' or 1=1#' and password=md5(‘’)
因为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样SQL语句就变成了:
select * from users where username='' or 1=1
因为1永远=1,所以where条件永远真,则结果就相当于select * from users
2.因为预定义在$mysqli_stmt=$mysqli->prepare($sql);时已经将SQL模板传递给mysql数据库并让数据库系统做语句分析,之后的传递参数将不对SQL语句做分析,所以不会出现上面所说的注入.
3.获得结果集
$mysqli_stmt->store_result();
4.当查询语句返回的是结果集时,会因为在内存中存储结果集而占用空间,所以在之后不需要相应结果集的情况下释放结果集,回收内存空间.
//释放结果集
$mysqli_stmt->free_result();
5.关闭预处理语句
$mysqli_stmt->close();