ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023_09_02 MySQL&PHP 공부정리
    개발공부/MySQL 2023. 9. 3. 12:49

    https://www.youtube.com/watch?v=Uo1aYyL3qUQ&list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&index=14 

    [생활코딩] 9강~10강.1

     

    <배운것>

    -9강전체 소스코드 리뷰

    <?php
    $conn = mysqli_connect("localhost:81", "root", "password", "opentutorials2");
    $sql = "SELECT * FROM topic LIMIT 100";
    $result = mysqli_query($conn, $sql);
    $list=''; //빈리스트를 담아 title제목을 담음
    while ($row = mysqli_fetch_array($result)){ //mysqli_fetch_array는 더이상 전달할 값이 없으면 NULL(false)을 반환함.
        $list = $list."<li><a href=\"index.php?id={$row['id']}\">{$row['title']}</a></li>"; //list라는 변수에 title컬럼의 값들을 담음
    }
    $article = array(
        'title'=>'Welecome',
        'description'=>'Hello, Web' 
    );                   //index.php일때(id값이 없을때) 기본값을 배열로 설정.
    if (isset($_GET['id'])){      //id값이 있는 경우 title과 본문의 내용을 설정
        $sql = "SELECT * FROM topic WHERE id={$_GET['id']} LIMIT 100";
        $result = mysqli_query($conn, $sql);
        $row = mysqli_fetch_array($result);
        $article = array(
            'title'=>$row['title'],
            'description'=>$row['description']
        );
    }

    ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>

    </head>
    <body>
        <h1><a href="index.php">WEB</a></h1>
        <ol>
            <?=$list?>
        </ol>
        <a href="create.php">create</a>
        <h2><?=$article['title']?></h2>
        <?=$article['description']?>
    </body>
    </html>

    -flitering : 사용자가 입력한 정보에서 문제가 될만한 정보를 차단하는 행위

    -escaping : 저장되어있는 정보를 사용자에게 노출할때 문제가 될만한 것을 차단하는 행위

    -mysqli_real_escape_string($conn, $_GET['id']) : sql주입공격과 관련된 기호들을 \를 붙여 이스케이프로 처리하는 함수

        $filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
        $sql = "SELECT * FROM topic WHERE id={$filtered_id} LIMIT 100";

     

     

    -sql injection. 아래와 같이 sql문을 전송하는 코드에

    $sql = "INSERT INTO topic
            (title, description, created)
            VALUES(
            '{$filtered['title']}',
            '{$filtered['description']}',
            NOW()

    아래와 같이 코드가 DB에전송되게끔 뒤쪽의 NOW()가 처리가 안되도록 "-- "를 붙이고 앞쪽에 임의로 지정한 시간을 넣어 sql injection 공격이 가능함.

    INSERT INTO topic (title, description, created) VALUES('HeHe', 'haha', '2018-1-1 00:00:00');-- ', NOW() )

    제작중인 페이지에서는 아래와 같이 submit하면 sql injection공격이 가능해짐

    sql injection 공격

    따라서 이러한 공격을 방지하기 위해 mysqli_real_escape_string()을 통해 전달되는 데이터를 flitering해야함.

     

    '개발공부 > MySQL' 카테고리의 다른 글

    2023_09_03 MySQL&PHP 공부정리  (0) 2023.09.04
    2023_09_01 MySQL&PHP 공부정리  (0) 2023.09.02
    2023_08_31 MySQL&PHP 공부정리  (0) 2023.08.31
    2023_08_31 MySQL 공부정리  (0) 2023.08.31
    2023_08_30 MySQL 공부정리  (0) 2023.08.30
Designed by Tistory.