За последние 24 часа нас посетили 7675 программистов и 446 роботов. Сейчас ищут 150 программистов ...

sql инъекция 5.6

Тема в разделе "PHP для новичков", создана пользователем Пэлт, 28 дек 2020.

  1. Пэлт

    Пэлт Новичок

    С нами с:
    1 апр 2020
    Сообщения:
    96
    Симпатии:
    0
    всем привет! есть код, в котором ничего не фильтруется, то есть можно сделать инъекцию

    PHP:
    1. mysql_query('UPDATE `news` SET `menu` = "yes" WHERE `id` = "'.$_GET[id].'"');
    такой вопрос у меня, как с помощью этого параметра id можно сделать следующий запрос (посмотрите внимательнее, там другая таблица
    PHP:
    1. mysql_query("UPDATE `journal` SET `readed` =  171 WHERE `id` = 1");
    или меня надурили и это невозможно?
     
    #1 Пэлт, 28 дек 2020
    Последнее редактирование: 28 дек 2020
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.867
    Симпатии:
    1.101
    Адрес:
    Лень
    никак
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.762
    Симпатии:
    518
    Адрес:
    Татарстан
    1. Устранить возможность инъекции
    2. Прочесть что это такое и с чем их едят.
    3. Что типа того
    Код (Text):
    1. 1';update . ... Ваш запрос...
    поиграться с кавычками итд
    --- Добавлено ---
    ?id=1';......
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.867
    Симпатии:
    1.101
    Адрес:
    Лень
    На сколько помню у него всегда будет ОДЫН из-за ошибки
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.762
    Симпатии:
    518
    Адрес:
    Татарстан
    Из-за какой именно ошибки то? Понятное дело что все передавать как html сущности, всякие там кавычки и точки с запятыми. Проверки того что в параметре id у тс нет... А передать туда можно что угодно
     
  6. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    131
    Симпатии:
    2
    mysql_query не поддерживает выполнение нескольких запросов одновременно
     
  7. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.982
    Симпатии:
    747
    Это неважно. Инъекция всё равно возможна. А её быть категорически не должно.
    Любая модификация запроса - это полный пздц и быть такой возможности не должно.

    1. mysql_ гребаное стрье, про которое давно пора забыть и использовать хотя бы mysqli_
    Форумчане давно отчаялись это всем повторять.

    2. Для исключения инъекции запомни два простых правила.

    2.1 Приводи ожидаемое числовое значение к числовому значению.
    Если в запросе ожидается целое число, то приводишь к целому числу
    PHP:
    1. mysqli_query($conn, "UPDATE `news` SET `menu` = "yes" WHERE `id` = '" . (int)$_GET['id'] . "'")
    Если ожидается число с плавающей точкой (реже, но бывает)
    PHP:
    1. mysqli_query($conn, "UPDATE `news` SET `coefficient` = '" . (float)$coefficient . "' WHERE `id` = '" . (int)$_GET['id'] . "'")
    2.2 Если ожидается строка, то фильтруешь с помощью встроенного инструмента.
    Для mysqli это mysqli_real_escape_string
    PHP:
    1. mysqli_query($conn, "UPDATE `news` SET `text` = '" . mysqli_real_escape_string($conn, $text) . "' WHERE `id` = '" . (int)$_GET['id'] . "'")
     
  8. Пэлт

    Пэлт Новичок

    С нами с:
    1 апр 2020
    Сообщения:
    96
    Симпатии:
    0
    спасибо. я как раз для этого функции сделал.
    PHP:
    1. function filter($m){  /* FILTER от sql инъекций!*/
    2.     if(!is_numeric($m)){
    3.         $m = htmlspecialchars($m);
    4.     } else {
    5.         $m = intval($m);
    6.         $m = abs($m);
    7.     }
    8.     return $m;}
    9.  
    10. function text($m){ /* Фильтрует текст */
    11.     $m = htmlspecialchars($m);
    12.     return $m;}
    13. function num($m){ /* Фильтрует цифры */
    14.     $m = intval($m);
    15.     $m = abs($m);
    16.     return $m;}
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.867
    Симпатии:
    1.101
    Адрес:
    Лень
    @Пэлт выкинь все свои функции и ознакомься с https://www.php.net/manual/ru/mysqli.prepare.php
    --- Добавлено ---
    Из-за большой и толстой с названием const