Здравствуйте! Тестировщик ругается на XXS-уязвимость в fetchAll() Код (Text): $sth = $dbh->query("SELECT id, name FROM table); $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. Подскажите, пожалуйста, как это пофиксить?
Надо понимать, что XSS возникает не при получении из базы данных, а при выводе информации в браузер. Поэтому, если вы перед echo будете пропускать всё через https://www.php.net/manual/en/function.htmlentities.php, то xss вам через эти данные не грозит. Есть вариант, делать это перед сохранением в базу, и есть те, кто привержены такому варианту, но мне не нравится портить данные. Я сторонник делать это при выводе. В принципе, все фреймворки/шаблонизаторы обычно или имеют встроенный метод для этого, или делают это автоматически.
Для начала, прочитать что там написано. Ознакомиться с упомянутым явлением. Потом прочитать https://www.php.net/manual/ru/function.htmlspecialchars.php Использовать --- Добавлено --- Кто эти негодяи!? Схватите их и надругайтесь над ними по очереди
@don.bidon, это не изврат, а вполне нормальный способ сохранения отформатированного в HTML текста и прочей лабуды вроде картинок. Оно обычно еще на клиенте кодируется, так что можно считать ваше чувство прекрасного не тронутым. --- Добавлено --- В наших админках такое поведение обычно определяется типом поля (т.е. за каждым типом в конфиге закреплено определенное поведение), так что его можно встретить и применительно к неформатируемым строкам вроде тайтла, особенно у тех, кто поверхностно изучал документацию. И даже это в общем норм. Админ – это не какой-то там зловредный юзер --- Добавлено --- Можно и текст с форматированием проверять на предмет XSS, т.е. запрещенных тегов. А кавычки т.п. кодировать необязательно. Это уже в шаблоне нужно смотреть, поломают ли что-то кавычки или нет.
Неотформатированные посты можно кодировать и при вводе на сервере. А то при выводе помимо кодирования нужно будет еще абзацы/br'ы расставлять и т.п. Короче без всеобъемлющего кеширования будет трудно прожить.
Ну, 21-ый век на дворе, всё-таки. Никто не осудит, чай, не в Эмиратах живём. Не пропагандируйте только
@Drunkenmunky, точнее выражайся. Я в процитированном тоже не оч. точно выразился, но тут все люди взрослые, должны понять. А вот что вы хотели сказать, хуан знает.
OK. Разверну. В качестве исключения, в таблицу(ы) можно загнать всё, что угодно, в любой, самой изощренной форме. С особым цинизмом. Если такова задача, от руководства например. А спорить не хочется. Но распространяться об этом на людях...
Т.е. вы форматирование текста сохраняете в таблицах в бинарном коде. Ну, ОК. Только не пропагандируйте
На это я должен был бы затребовать пруфы. С целью уличить оппонента. Но я не буду, и так жеж всё понятно
@Drunkenmunky, ну, я методом исключения воспользовался: если не теги, bb-коды и т.п., значит бинарный код Это тоже должно быть всем понятно, так что расходимся. Иначе и я могу перейти на личности. И даже эти личности послать