За последние 24 часа нас посетили 81487 программистов и 4145 роботов. Сейчас ищут 1266 программистов ...

Уязвимость в fetchAll()

Тема в разделе "PHP для новичков", создана пользователем avaya, 16 апр 2025.

  1. avaya

    avaya Активный пользователь

    С нами с:
    4 июл 2018
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте!
    Тестировщик ругается на XXS-уязвимость в fetchAll()

    Код (Text):
    1. $sth = $dbh->query("SELECT id, name FROM table);
    2. $array = $sth->fetchALL(PDO::FETCH_ASSOC);
    The attacker would be able to alter the returned web page by saving malicious data in a data-store ahead of time. The attacker's modified data is then read from the database by the <?php method with fetchAll, at line 1 of /index.php. This untrusted data then flows through the code straight to the output web page, without sanitization.
    This can enable a Stored Cross-Site Scripting (XSS) attack.

    Подскажите, пожалуйста, как это пофиксить?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Надо понимать, что XSS возникает не при получении из базы данных, а при выводе информации в браузер. Поэтому, если вы перед echo будете пропускать всё через https://www.php.net/manual/en/function.htmlentities.php, то xss вам через эти данные не грозит. Есть вариант, делать это перед сохранением в базу, и есть те, кто привержены такому варианту, но мне не нравится портить данные. Я сторонник делать это при выводе. В принципе, все фреймворки/шаблонизаторы обычно или имеют встроенный метод для этого, или делают это автоматически.
     
    artoodetoo нравится это.
  3. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.509
    Симпатии:
    283
    Для начала, прочитать что там написано. Ознакомиться с упомянутым явлением.
    Потом прочитать https://www.php.net/manual/ru/function.htmlspecialchars.php
    Использовать
    --- Добавлено ---
    Кто эти негодяи!?
    Схватите их и надругайтесь над ними по очереди
     
    MouseZver нравится это.
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    943
    Симпатии:
    146
    Видел такое, тоже считаю извращением, но когда страница из кэша достаётся, там уже только так.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    658
    @don.bidon, это не изврат, а вполне нормальный способ сохранения отформатированного в HTML текста и прочей лабуды вроде картинок. Оно обычно еще на клиенте кодируется, так что можно считать ваше чувство прекрасного не тронутым.
    --- Добавлено ---
    В наших админках такое поведение обычно определяется типом поля (т.е. за каждым типом в конфиге закреплено определенное поведение), так что его можно встретить и применительно к неформатируемым строкам вроде тайтла, особенно у тех, кто поверхностно изучал документацию. И даже это в общем норм. Админ – это не какой-то там зловредный юзер :)
    --- Добавлено ---
    Можно и текст с форматированием проверять на предмет XSS, т.е. запрещенных тегов. А кавычки т.п. кодировать необязательно. Это уже в шаблоне нужно смотреть, поломают ли что-то кавычки или нет.
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    658
    Неотформатированные посты можно кодировать и при вводе на сервере. А то при выводе помимо кодирования нужно будет еще абзацы/br'ы расставлять и т.п. Короче без всеобъемлющего кеширования будет трудно прожить.
     
  7. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.509
    Симпатии:
    283
    Ну, 21-ый век на дворе, всё-таки. Никто не осудит, чай, не в Эмиратах живём. Не пропагандируйте только
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    658
    @Drunkenmunky, точнее выражайся. Я в процитированном тоже не оч. точно выразился, но тут все люди взрослые, должны понять. А вот что вы хотели сказать, хуан знает.
     
  9. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.509
    Симпатии:
    283
    OK. Разверну.
    В качестве исключения, в таблицу(ы) можно загнать всё, что угодно, в любой, самой изощренной форме. С особым цинизмом. Если такова задача, от руководства например. А спорить не хочется.
    Но распространяться об этом на людях...
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    658
    Т.е. вы форматирование текста сохраняете в таблицах в бинарном коде. Ну, ОК. Только не пропагандируйте :)
     
  11. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.509
    Симпатии:
    283
    На это я должен был бы затребовать пруфы. С целью уличить оппонента. Но я не буду, и так жеж всё понятно
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    658
    @Drunkenmunky, ну, я методом исключения воспользовался: если не теги, bb-коды и т.п., значит бинарный код :) Это тоже должно быть всем понятно, так что расходимся. Иначе и я могу перейти на личности. И даже эти личности послать :)
     
    Drunkenmunky нравится это.