본문 바로가기

웹 해킹

PHP / DB연동 데이터 삽입 및 불러오기

로그인 및 메인페이지 점수불러오기


첫번째로 로그인이 되어있지 않으면 index페이지가 아닌 login 페이지로 이동하도록 설정하였다.

index.php에 해당하는 문구를 추가하여 login.php로 이동하도록 설정.

로그인이 되어있을시 메인페이지를 불러오도록 하였다.

 

메인페이지에서는 데이터베이스에 저장된 사용자들의 이름을 불러올수 있게 하였고

이름에 태그를 넣어 이름을 클릭시 GET방식으로 요청하여 해당하는 사용자의 점수가 출력될수있게 만들어주었다.

 

메인페이지

해당하는 메인페이지에서 이름을 클릭시 아래 score.php로 GET방식으로 파라미터를 넘겨주게된다.

<?php
$name =$_GET['name'];
echo "You clicked on the link with name: ". htmlspecialchars($name).'<br>';
define('DB_SERVER','localhost');
define('DB_USERNAME','admin');
define('DB_PASSWORD','student1234');  
define('DB_NAME','test');

$db_conn = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_NAME);

// selct
$sql = "select * from test_table where name = '".$name."'";
$result = mysqli_query($db_conn, $sql);
// var_dump($result); // DB 웹사이트 출력시 사용
$row = mysqli_fetch_array($result);
echo "<h3>해당하는". $row['name'] ."학생의 점수는". $row['score']."입니다</h3>";

mysqli_close($db_conn);
?>


회원가입페이지 구현


로그인 페이지에 회원가입 버튼을 추가해주었다.

                <div class="row justify-content-center mt-3">
                    <div class="col-md-6">
                        <a href="join.php" class="btn btn-primary">회원가입</a>
                    </div>
                </div>

회원가입 버튼을 클릭시 join.php로 넘어가도록 설정.

로그인 페이지와 같은 방식으로 코딩을 짜주었다.

<?php
require_once('joinfunc.php');
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>회원가입</title>
    <!-- 부트스트랩 CSS 추가 -->
<body class="bg-light">
    <div class="all">
        <div class="container my-5">
            <h2>회원가입</h2>
            <form action="" method="post">
                <div class="form-group">
                    <label for="userId" class="form-label">아이디:</label>
                    <input type="text" class="form-control" id="userId" name="userId" placeholder="아이디" required>
                </div>

                <div class="form-group mt-3">
                    <label for="userPwd" class="form-label">점수</label>
                    <input type="text" class="form-control" id="score" name="score" placeholder="점수" required>
                </div>
               
                <div class="form-group mt-3">
                    <label for="userPwd" class="form-label">비밀번호:</label>
                    <input type="password" class="form-control" id="userPwd" name="userPwd" placeholder="패스워드" required>
                </div>
                <button type="submit" class="btn btn-primary" name = 'Submit'>회원가입</button>
                <?php

                        if(isset($_POST['Submit'])){
                            $result = join1($_POST['userId'],$_POST['score'], $_POST['userPwd']);
                           
                            if ($result) {

                                echo "<script>alert('회원가입이 완료되었습니다.');
                                location.href='login.php'
                                </script>";
                                //header("location:login.php");
                                exit;
                            } else {
                                echo "<script>alert('회원가입에 실패하였습니다.');
                                location.href='join.php'
                                </script>";
                                //header("location:join.php");
           
                            }
                        }
                    ?>
            </form>
        </div>
    </div>
   
    <!-- 부트스트랩 JS와 팝업 추가 -->
</body>
</html>

 

회원가입에 성공시 회원가입이 완료됨이라는 문구 출력이후에 로그인화면으로 넘어가도록,

실패시에는 다시 join.php를 불러오는 방식으로 코딩하려했지만

여기에서 header("location:xxx.php"); 방식을 쓰게되면

메시지가 출력되지않고 redirect가 먼저 되는 현상이 발생하여 location.href="xxx.php" 방식으로 변경해주었다.

join.php에서는 joinfunc을 상속받아 joinfunc안에 있는 함수를 사용하도록 하였다.

아래는 joinfunc.php 코드이다.

<?php
    // selct
    function join1($userId,$userScore,$userPwd){
        define('DB_SERVER','localhost');
        define('DB_USERNAME','admin');
        define('DB_PASSWORD','student1234');  
        define('DB_NAME','test');
   
        $db_conn = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_NAME);
   
        if ($db_conn->connect_error) {
            die("Connection failed: ". $db_conn->connect_error);
        }
        $sql = "INSERT INTO test_table (name, score, pass) VALUES ('$userId','$userScore','$userPwd')"; // SQL Injection 취약
        $result=mysqli_query($db_conn, $sql);
        $db_conn->close();
        return $result;
        // 연결 닫기
        }
?>
 

 

해당하는 방식은 SQL Injection에 취약하다는걸 알게되어 준비된 문구를 통해 데이터베이스에 넘기는 방식을 사용하도록 해보려 했지만,,,시도만 해보고 성공은 못하였다. 일단 데이터는 정상적으로 넘어가는걸 확인하였다.

'웹 해킹' 카테고리의 다른 글

게시판 CRUD, 페이징, 검색  (1) 2025.05.13
JWT/PHP 로그인  (0) 2025.05.13
Hash와 로그인 식별/인증  (0) 2025.04.22
NAT 네트워크  (0) 2025.04.10
1주 강의 복습  (0) 2025.04.08