php登陆表单防注入练习

poplpsure 2020-01-06

简单的表单登录代码,了解sql注入,禁止单引号还有反斜杠\ # and or order关键字的提交

数据库:
php登陆表单防注入练习

简单的源码:
<!DOCTYPE html>
<html>
<head>
<title>后台表单登录页面</title>
<meta charset=UTF-8>
</head>
<body>
<center>
<h3>后台登录</h3>
<form action="" method="POST">
帐号:?<input name=‘username‘ type=‘text‘><br />
密码:?<input name=‘password‘ type=‘password‘><br />
<input type=‘submit‘ value=‘登录‘>
</form>
</center>
</body>
</html>

<!--前后端都在一个页面上-->

<?php

//判断有数据才执行后端代码,什么都不输入还是前端登陆界面,防止前端没有数据,后端验证老是弹出
if(!empty($_REQUEST)){
//数据不为空和空格,赋值账号和密码,都转化为小写,两边去除空格,否则报错
$user = ! empty(trim($_REQUEST[‘username‘])) ? trim(strtolower($_REQUEST[‘username‘])) : die("<script>alert(‘账号不能为空!‘)</script>");
$passwd = ! empty(trim($_REQUEST[‘password‘])) ? trim(strtolower($_REQUEST[‘password‘])) : die("<script>alert(‘密码不能为空!‘)</script>");

//禁止输入单引号
if(stristr($user,‘\‘‘) || stristr($passwd,‘\‘‘) ){
die("<script>alert(‘账号密码有恶意符号,请重新输入‘)</script>");
}

//禁止添加可以sql注入的关键词
if(preg_match_all("/\/|#|and|or|order/",$user) || preg_match_all("/\/|#|and|or|order/",$passwd)){
die ("<script>alert(‘账号密码有非法字符,请重新输入‘)</script>");
}

$conn = mysqli_connect(‘127.0.0.1‘,‘root‘,‘root‘,‘db_form‘); //连接数据库
$sql = "select * from admin where username=‘$user‘ and password=‘$passwd‘"; //查询语句,只要能找到该条记录,说明匹对正确,判断为真,登陆成功

$result = mysqli_query($conn,$sql); //取出查询结果,是个对象
$array = mysqli_fetch_array($result); //把结果对象变为数组取出数据
//var_dump($array);

//通过取数组里的键值,得到相应结果
//(能查到对应的用户名,结果为ture,显示登陆成功,取不到对应的结果,显示错误)
if($array[‘username‘]) {
echo ‘登陆成功!‘;
}
else{
echo ‘账号密码错误!‘;
}
$conn->close();//关闭连接
}
?>

相关推荐