SQL 주입 방지를 위한 간...LOGIN

SQL 주입 방지를 위한 간단한 로그인 PDO 전처리

1, 새 사용자 테이블 만들기

테이블 만들기 user(

id int(4) not null 기본 키 auto_increment,

name varchar(255) not null,

pwd varchar(255) not null )

CHARSET=utf8;

微信图片_20180305130715.png

2, 테스트 데이터 삽입

INSERT INTO user(name,pwd) VALUES('bobo','bobo')

3, 생성 새로운 login.php 파일은 로그인 HTML 페이지를 작성하는 데 사용됩니다

코드는 다음과 같습니다.

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/5 0005
 * Time: 下午 1:12
 */
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="check.php" method="post">
    用户名:<input type="text" id="name" name="name"/><br>
    密码:<input type="password" id="pwd" name="pwd" /><br>
    <input type="submit" id='login' name='login' value="登录">
</form>
</body>
</html>

4. 새로운 check.php 파일은 양식 제출 데이터를 얻는 데 사용됩니다. 데이터베이스 연결 처리

코드는 다음과 같습니다.

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/5 0005
 * Time: 下午 1:14
 */
header('content-type:text/html;charset=utf-8');
$username=$_POST['name'];
$pwd=$_POST['pwd'];
try {
    $pdo=new PDO('mysql:host=localhost;dbname=php','root','root');
    $sql="select * from user where name='{$username}' and pwd='{$pwd}'";
    $stmt=$pdo->query($sql);
//返回结果集中的行数
    echo $stmt->rowCount();
} catch (Exception $e) {
    echo $e->getMessage();
}

브라우저 실행 결과는 다음과 같습니다.

사용자 이름 bobo를 입력하면 비밀번호 bobo가 1

을 입력합니다. 잘못된 사용자 이름과 비밀번호를 입력하고 0

injection sql 문을 입력하거나 1 =1# 인쇄가 여전히 1입니다. 분명히 여기에 뭔가 잘못되었습니다. sql에 대한 주입 방지 처리가 없습니다


5 첫 번째 방법은 주입 방지(? 방법)

<?php
try {
    $pdo=new PDO('mysql:host=localhost;dbname=php','root','root');
    $sql="select * from user where name=? and pwd=?";
    $stmt=$pdo->prepare($sql);
    $stmt->execute(array($username,$pwd));
    echo $stmt->rowCount();
} catch (Exception $e) {
    echo $e->getMessage();
}

6, 아니요. 두 가지 방법(자리 표시자 모드)

<?php
try {
    $pdo=new PDO('mysql:host=localhost;dbname=php','root','root');
    $sql="select * from user where name=:name and pwd=:pwd";
    $stmt=$pdo->prepare($sql);
    $stmt->execute(array(":name"=>$username,":pwd"=>$pwd));
    echo $stmt->rowCount();
} catch (Exception $e) {
    echo $e->getMessage();
}

두 방법 모두 '또는 1=1#을 입력하고 SQL 주입 문제를 해결하는 0을 모두 인쇄합니다.

<?php echo "PDO解决sql防注入的简单登录页面";
코스웨어