5월 29일 외부 수업으로 인해 Layer7 동아리 수업에 참여하지 못했습니다.

따라서 PPT 내용과 기존에 알고있던 내용으로 작성하여 수업 내용과 조금은 다를 수 있습니다.


SQLite 기초 문법

CREATE

CREATE TABLE TABLE_NAME (DATA_NAME DATA_TYPE ...);
CREATE TABLE test ( a INT, b TEXT, c TEXT );

SELECT

SELECT 불러올_COLUMN FROM 불러올_TABLE;
SELECT * FROM users;
SELECT id FROM users;

INSERT

INSERT INTO 집어넣을_TABLE VALUES 집어넣을_COLUMN_값;
INSERT INTO users (id, pw) VALEUS ('admin', 'OSI_LAYER7');

알아두면좋은것들

DELETE, DROP


사실 이 이후의 PPT 내용들은 PPT 안에 설명이 그렇게 많진 않아서 PPT를 기반으로 하지 않고 정리해보았습니다.


SQL Injection

<!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>
    <form action="login.php" method="post">
        <input type="text" name="username" placeholder="Username">
        <input type="password" name="password" placeholder="Password">
        <button type="submit">Login</button>
    </form>
    <?php
        if(isset($_POST['username']) && isset($_POST['password'])){
            $username = $_POST['username'];
            $password = $_POST['password'];
            $sql = new SQLite3('user.db');
            $result = $sql->query("SELECT * FROM users WHERE username='$username' AND password='$password'");
            $row = $result->fetchArray();
            if($row){
                echo $row['username'];
            }else{
                echo 'Login failed';
            }
        }
    ?>
</body>
</html>

login.php 코드입니다. username과 password 를 POST 메소드를 통해 받고

SELECT * FROM users WHERE username='$username' AND password='$password' 라는 쿼리를 통해 실행합니다. 이 코드의 문제점은 username 과 password 를 파라미터화하지 않고, 쿼리에 직접적으로 넣습니다.

따라서 username 에 ' 를 넣으면