PHP 자리 표시자로 창 만들기
이전 기사에서는 DVWA가 SQL 문에 변수를 직접 넣기 때문에 SQL 주입을 할 수 있는 코드가 되었다.
그럼 이번에는 SQL 주사기에 대응하는 방법으로 자리 표시자를 소개해 드리려고 합니다.
자리 표시자는 무엇입니까?
자리 표시자는 이름과 같이 SQL 문 뒤에 설정된 값을 기준으로 위치를 지정하는 기능을 제공합니다.
자리 표시자 는 물음표 자리 표시자 이다명명 자리 표시자: 수치로 표시합니다.
또한 뒤에 입력한 값의 귀속값을 미리 붙여넣는 문장(예약문장)이라고 한다.
이 자리 표시자를 사용하면 입력한 값에 SQL을 직접 삽입하는 것을 피할 수 있습니다.
HTML/PHP/MySQL을 사용한 양식 만들기
여기서, 나는 실제적으로 창을 만들고, 자리 차지 문자를 사용하는 코드를 기록하고 싶다.
코드는 아래의 문장을 참고했다.
https://noumenon-th.net/programming/2016/01/18/mysql-2/
전제 조건
먼저 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의 창을 만들 수 있습니다.
Reference
이 문제에 관하여(PHP 자리 표시자로 창 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bindingpry/items/5cc29abb009f8f58cded텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)