Cookie и SQL инъекции

Главная » Видеоуроки » PHP+MySQL » Cookie и SQL инъекции
В этом уроке мы рассмотрим механизм COOKIE, который схож с механизмом сессий, который мы разбирали на прошлом уроке. Также мы рассмотрим очень важный вопрос безопасности веб приложений — внедрение вредоносного SQL кода (SQL инъекция).
COOKIE схожи по своему назначению с сессиями — в них можно хранить данные приложения — информация о пользователе и пр. Но в чем же ключевое различие? COOKIE хранятся в браузере пользователя, а это значит, что к COOKIE можно легко добраться и, соответственно, подменить, украсть и так далее. А значит хранить данные авторизованного пользователя как минимум небезопасно. Сессии конечно тоже можно подменить, но все же сделать это гораздо тяжелее. Злоумышленнику придется потрудиться. Зачем же тогда COOKIE, что можно хранить в них COOKIE? Например, корзину с товарами — предположим, вы положили товары в корзину, но не оформили заказ до конца. Через некоторое время вы возвращаетесь на сайт, и вам не надо заново класть товары в корзину. Это все благодаря COOKIE.

Второй вопрос урока — SQL инъекции. Эту проблему научились решать, но все же начинающим разработчикам важно понять опасность проблемы, чтобы уметь ее обходить. Суть опасности в том, что на стороне сервера вы никак не фильтруете данные, а просто принимаете данные в том виде, в котором их передал вам клиент. Например, в поле формы злоумышленник может ввести такие данные: ‘admin’ or 1=1. Запрос на выборку примет вид SELECT * FROM table_name WHERE user = ‘admin’ or 1=1. Вторая часть условия в запросе будет всегда верно, а значит злоумышленник получит все данные из таблицы table_name. В уроке рассмотрен пример с вариантом, где при помощи SQL инъекции можно удалить базу данных.

Код урока (cookie.php)
<?php
//пример со счетчиком посещения страниц
$counter = 0;

if (isset($_COOKIE['count'])) {
  $counter = $_COOKIE['count'];
  $counter++;
}

setcookie("count", $counter);

echo $counter;
Код урока (injection.php)
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>

        <form class="" method="post">
            <input type="text" name="name" value="">
            <button type="submit" name="button">Отправить</button>
        </form>

        <?php

            $name = $_POST['name'];
            $user = "root";
            $password = "root";
            $mydb = new PDO("mysql:host=localhost;dbname=mydb", "root", "root");
            $sql = "select * from users where user_name = $name"; //пример внедрения sql инъекции
            echo $sql;
            $q = $mydb->query($sql);
            $q->execute();
            while($res = $q->fetch(PDO::FETCH_ASSOC)) {
                echo "<pre>";
                var_dump($res);
                echo "</pre>";
                echo "<br>";
            }

        ?>
    </body>
</html>

0 Комментариев

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Подписаться на рассылку

Будьте в курсе - получайте последние статьи на свой email

Ваша подписка успешно оформлена

Pin It on Pinterest

Share This