PHP 자리 표시자로 창 만들기

PHP로 창 만들기
이전 기사에서는 DVWA가 SQL 문에 변수를 직접 넣기 때문에 SQL 주입을 할 수 있는 코드가 되었다.
그럼 이번에는 SQL 주사기에 대응하는 방법으로 자리 표시자를 소개해 드리려고 합니다.
자리 표시자는 무엇입니까?
자리 표시자는 이름과 같이 SQL 문 뒤에 설정된 값을 기준으로 위치를 지정하는 기능을 제공합니다.
자리 표시자 는 물음표 자리 표시자 이다명명 자리 표시자: 수치로 표시합니다.
또한 뒤에 입력한 값의 귀속값을 미리 붙여넣는 문장(예약문장)이라고 한다.
이 자리 표시자를 사용하면 입력한 값에 SQL을 직접 삽입하는 것을 피할 수 있습니다.
HTML/PHP/MySQL을 사용한 양식 만들기
여기서, 나는 실제적으로 창을 만들고, 자리 차지 문자를 사용하는 코드를 기록하고 싶다.
코드는 아래의 문장을 참고했다.
https://noumenon-th.net/programming/2016/01/18/mysql-2/
전제 조건
  • PHP 5.46
  • MySQL 14.14
  • MySQL을 통해 DB, 테이블, 열 설정
    먼저 MySQL을 사용하여 DB, 테이블 및 열을 설정합니다.
    DB를test1로 설정하고 테이블을name으로 설정합니다list, 열을 id·name으로 설정합니다.
    # mysql -u root -p
    
    mysql> CREATE DATABASE test1;
    mysql> USE test1;
    mysql> CREATE TABLE name (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name TEXT NOT NULL) DEFAULT CHARACTER SET=utf8;
    
    창 HTML 파일 만들기
    먼저 HTML로 기본적인 간단한 형식을 기록합니다.
    index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>データを入力する</title>
        <meta charset="utf-8">
        </head>
    <body>
      <h1>フォーム画面</h1> 
          <form action="form.php" method="post">
              名前を入力:<input type="text" name="name">
              <input type="submit" value="登録する">
          </form>
    </body>
    </html>
    
    등록 양식 정보를 위한 PHP 파일 만들기
    그런 다음 양식 정보를 MySQL에 로그인하는 PHP 파일을 만듭니다.
    자리 표시자를 사용하여 SQL 문을 표시합니다.
    form.php
    <?php
    
    header("Content-type: text/html; charset=utf-8");
    
    //データベース接続
    $server = "IPアドレス";  
    $userName = "MySQLのユーザー名"; 
    $password = "MySQLのパスワード"; 
    $dbName = "test1";
    
    $mysqli = new mysqli($server, $userName, $password, $dbName);
    
    if ($mysqli->connect_error){
        echo $mysqli->connect_error;
        exit();
    }else{
        $mysqli->set_charset("utf-8");
    }
    
    if(empty($_POST)) {
        echo "<a href='index.php'>index.php</a>←登録はこのページから";
    }else{
        //名前入力判定
        if (!isset($_POST['name'])  || $_POST['name'] === "" ){
            echo "名前が入力されていません。";
        }else{
            //プリペアドステートメントの設定(SQL文を最初に用意して、その後はクエリ内のパラメーターの値だけを変更する)
            $stmt = $mysqli->prepare("INSERT INTO name_list (name) VALUES (?)");
    
            if($stmt){
                //プレースホルダに値を設定する、bind_paramsの第一引数は文字列が入るので's'
                $stmt->bind_param('s', $name);
                $name = $_POST['name'];
    
                //登録する名前をhtml表記、クオテーションを取った状態で表示
                if($stmt->execute()){
                    echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8')."さんを登録しました";
                }else{
                    echo $stmt->errno . $stmt->error;
                }
    
                $stmt->close();
            }else{
                echo $mysqli->errno . $mysqli->error;
            }
        }
    }
    
    // データベース切断
    $mysqli->close();
    
    ?>
    
    실제로는 이렇게 움직인다.
    이렇게 하면 자리 표시자를 사용하여 PHP의 창을 만들 수 있습니다.

    좋은 웹페이지 즐겨찾기