利用sql预处理语句 防止sql注入

写一个简单的登陆系统

前端代码


<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
</head>
<body>
<h2>登录页面</h2>
<form action="doLogin.php" method="post">
	username:<input type="text" name="username" id=""/><br/>
	password:<input type="password" name="password" id=""><br/>
	<input type="submit" value="登录" ="">
</form>

</body>
</html>>

后台提交至

doLogin.php

<?php


header('content-type:text/html;charset=utf-8');
$mysqli=new mysqli('localhost','root','','test');
if($mysqli->errno)
{
	die('Connect Error'.$mysqli->error);
}
$mysqli->set_charset('utf8');

$username=$_POST['username'];
$password=$_POST['password'];
// $sql="SELECT * FROM user WHERE username='{$username}' AND password='{$password}'";
// $mysqli_result=$mysqli->query($sql);

// if($mysqli_result&&$mysqli_result->num_rows>0)
// {
// 	//$row=$mysqli_result->fetch_assoc();
// 	echo '登录成功1';
// }
// else
// {
// 	echo '登录失败0';
// }
//为防止sql注入  比如在username里面写 'or 1=1#   这时候 也会显示登录成功
//1.对所输入进行过滤  2.使用预处理语句就不会出现这样的问题

$sql="SELECT * FROM user WHERE username=? AND password=?";
$mysqli_stmt=$mysqli->prepare($sql);

$mysqli_stmt->bind_param('ss',$username,$password);
if($mysqli_stmt->execute())
{
	$mysqli_stmt->store_result();
	if($mysqli_stmt->num_rows>0)
	{
		echo '登录成功';
	}
	else
	{
		echo '登录失败';
	}
}

注释的部分即没有利用sql预处理  这样在登陆的username 里面写 
'or 1=1#   这时候 也会显示登录成功
'or 1=1#   这时候 也会显示登录成功
这是一个非常可怕的问题

所以这时候需要利用预处理 或者 过滤来解决这个问题



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值