Home >php教程 >php手册 >php安全,防止sql注入攻击简单方法

php安全,防止sql注入攻击简单方法

WBOY
WBOYOriginal
2016-05-25 16:41:071437browse

方法一:密码比对

思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对.

php实例代码如下:

<?php
$sql = "select password from users where username=&#39;$name&#39;";
$res = mysql_query($sql, $conn);
if ($arr = mysql_fetch_assoc($res)) { //如果用户名存在
    if ($arr[&#39;password&#39;] == $pwd) { //密码比对
        echo "登录成功";
    } else {
        echo "密码输入有误";
    }
} else {
    echo "该用户名不存在";
}
?>

分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击,因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎,因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击.

方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击.

思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击.

php实例代码如下:

<?php
$name = $_GET[&#39;username&#39;];
$pwd = $_GET[&#39;password&#39;];
$sql = "select * from users where username=? and password=?";
//1.创建一个pdo对象
$pdo = new PDO("mysql:host=localhost;port=3306;dbname=injection", "root", "");
//2.设置编码
$pdo->exec("set names &#39;utf8&#39;");
//3.预处理$sql语句
$pdoStatement = $pdo->prepare($sql);
//4.把接收到的用户名和密码填入
$pdoStatement->execute(array(
    $name,
    $pwd
));
//5.取出结果
$res = $pdoStatement->fetch();
if (emptyempty($res)) {
    echo "用户名或密码输入有误";
} else {
    echo "登录成功";
}
?>


教程网址:

欢迎收藏∩_∩但请保留本文链接。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn