Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787

Обработка информации, вводимой пользователем через форму

11.05.2023, 09:46. Показов 1255. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

В статье, посвященной защите информации, говорится, что всю инфу, вводимую пользователем через форму ввода, нужно обрабатывать вот такой функцией:

PHP
1
2
3
4
5
6
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
Меня удивила stripslashes - "Возвращает строку с вырезанными обратными слешами. (\' становится ' и т.п.) Двойные обратные слеши (\\) становятся одинарными (\)". Зачем это в моем случае? Какая от этого защита? Вроде бы, никакой.
(magic_quotes_gpc на хостинге отключен).

Я попробовал сделать так:
PHP
1
2
3
4
5
6
    function test_input($data) {
        $data = trim($data);
        addslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
addslashes - "Возвращает строку с обратным слешом перед символами, которые нужно экранировать. Экранируются одиночная кавычка ('), двойная кавычка ("), обратный слеш (\) и NUL (NULL байт)" В этом может быть смысл, но посмотрим, что на практике.

Для теста разместил в форме код JS-скрипта. После обработки этой функцией записал результат в текстовый файл. И получил в нем вот что:
Code
1
<script> const checkboxes = [...document.querySelectorAll('[type="checkbox"]')]; checkboxes.forEach(box => {     box.addEventListener('change', async () => {         let form = new FormData();         checkboxes.forEach(el => form.append(el.id, el.checked ? 'checked' : 'zero'));         let response = await fetch('storage.php', {method: 'POST', body: form});         response.ok ? console.log(`Всё пучком`) : console.log(`Засада`);     }); }); </script>
Никакого экранирования я тут вообще не вижу.

Так и не понял, как обрабатывать инфу, введенную пользователем в форму.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.05.2023, 09:46
Ответы с готовыми решениями:

Сайт не показывает изображения, загруженные пользователем через форму
Друзья, помогите, пожалуйста, новичку. Никак не могу добиться, чтобы фото, отправленное через форму появилось на сайте. В форме есть фото и...

Вывод информации из БД через форму
Всем привет. Я новичок в php и прошу у вас помощи. Необходимо сделать следующий скрипт php -> Пользователь вводит в форму...

Вывод информации из БД через форму
Всем привет. Я новичок в php и прошу у вас помощи. Необходимо сделать следующий скрипт php -> Пользователь вводит в форму...

28
Заблокирован
11.05.2023, 11:22
Цитата Сообщение от vlad-55 Посмотреть сообщение
addslashes($data);
PHP
1
$data = addslashes($data);
Но я бы не экранировал, а заменял на html-символы. Например двойную кавычку на " и так далее

Добавлено через 2 минуты
Потом после этого экранирования на странице эти слэши видны. А если их убрать то могут возникнуть косяки из-за кавычек в tiltle страницы
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 11:54  [ТС]
Цитата Сообщение от bbkk Посмотреть сообщение
Но я бы не экранировал, а заменял на html-символы. Например двойную кавычку на " и так далее
Для этой цели стоит htmlspecialchars. Или этого недостаточно?

Может быть, нужны все три функции? Типа

PHP
1
2
3
4
5
6
7
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
            $data = addslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
На случай, когда мои кавычки могут быть закрыты чужими, сработает stripslashes. А заэкранирует addslashes. А htmlspecialchars переведет в сущности.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 12:47
Цитата Сообщение от vlad-55 Посмотреть сообщение
В статье, посвященной защите информации, говорится, что всю инфу, вводимую пользователем через форму ввода, нужно обрабатывать вот такой функцией...
Если вы правильно передали смысл написанного, забудьте про это.

Добавлено через 3 минуты
Цитата Сообщение от vlad-55 Посмотреть сообщение
Так и не понял, как обрабатывать инфу, введенную пользователем в форму.
Обрабатывать введенную информацию нужно в соответствии с потребностями обработки.

Добавлено через 3 минуты
Цитата Сообщение от bbkk Посмотреть сообщение
Но я бы не экранировал, а заменял на html-символы.
Зачем? Чтобы было?
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 12:50  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Обрабатывать введенную информацию нужно в соответствии с потребностями обработки.
Обработка ради защиты от действий злоумышленников.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 12:51
Цитата Сообщение от vlad-55 Посмотреть сообщение
от действий злоумышленников
Каких действий?
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 12:59  [ТС]
Зло умышленных действий.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 13:08
Цитата Сообщение от vlad-55 Посмотреть сообщение
Зло умышленных действий.
Ну, понятно. Не могли пятницы дождаться для создания такой темы?
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 13:15  [ТС]
Вам тоже лучше было бы дождаться пятницы с Вашими, мягко говоря, бессмысленными вопросами. Или вообще их не задавать.
0
Заблокирован
11.05.2023, 13:54
Цитата Сообщение от estic Посмотреть сообщение
Зачем? Чтобы было?
Не было бы в названиях статей слэшей. Я же вроде объяснил когда предлагал или одного раза недостаточно?

Добавлено через 6 минут
Цитата Сообщение от vlad-55 Посмотреть сообщение
Для этой цели стоит htmlspecialchars. Или этого недостаточно?
Если достаточно, зачем тогда экранируешь?
PHP
1
echo htmlspecialchars("` ` `");
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
11.05.2023, 13:58
Лучший ответ Сообщение было отмечено vlad-55 как решение

Решение

Цитата Сообщение от vlad-55 Посмотреть сообщение
нужно обрабатывать вот такой функцией:
Она могла бы быть актуальна во времена PHP 5.4, и то под вопросом. Сейчас в такой функции смысла нет.

Цитата Сообщение от vlad-55 Посмотреть сообщение
Так и не понял, как обрабатывать инфу, введенную пользователем в форму.
Если данные нужно записать в базу - в идеале используем подготовленные запросы, либо экранируем, используя для этого функционал СУБД, например https://www.php.net/manual/ru/... string.php для mysqli и https://www.php.net/manual/ru/pdo.quote.php для PDO.

При выводе данных обязательно прогоняем через htmlspecialchars.
1
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 14:07
Цитата Сообщение от bbkk Посмотреть сообщение
Не было бы в названиях статей слэшей.
Автор ничего про это не писал. Кроме того, HTML-кодирование никак не связано со слэшами (и бэкслэшами).

Добавлено через 8 минут
Цитата Сообщение от Jodah Посмотреть сообщение
При выводе данных обязательно прогоняем через htmlspecialchars.
Только если нужно гарантированно "убить" всяческое HTML-форматирование. Такое категоричное кодирование обычно выполняется только при выводе в форму.
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 14:16  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
При выводе данных обязательно прогоняем через htmlspecialchars
Супер, спасибо! Как раз мой случай - вывожу в форму.
Будем пробовать.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 14:17
Цитата Сообщение от Jodah Посмотреть сообщение
Она могла бы быть актуальна во времена PHP 5.4, и то под вопросом.
Под большим вопросом. stripslashes просто "убивает" часть пользовательских данных
0
Заблокирован
11.05.2023, 14:18
Цитата Сообщение от estic Посмотреть сообщение
Автор ничего про это не писал. Кроме того, HTML-кодирование никак не связано со слэшами (и бэкслэшами).
Говорил.
Цитата Сообщение от vlad-55 Посмотреть сообщение
А заэкранирует addslashes.
Цитата Сообщение от Jodah Посмотреть сообщение
При выводе данных обязательно прогоняем через htmlspecialchars.
Обязательно для кого? Я не пользуюсь, потому что сохраняю в базе тег <br>. Только один этот тэг. Остальные удаляю. Мне удобнее пользоваться своей функцией. Ну, если кому то обязательно - тогда пусть он и пользуется.
Хотел выложить свою функцию, но движок форума поубирал мои символы)
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 14:39
Цитата Сообщение от bbkk Посмотреть сообщение
Обязательно для кого? Я не пользуюсь, потому что сохраняю в базе тег <br>. Только один этот тэг. Остальные удаляю.
Кодирование при выводе в форму позволяет выводить любое содержимое. Если вы (почти) не храните в базе данных теги, это не значит, что этого никто не делает Кроме того, в базу данных могут "случайно" попасть теги и "поломать" форму при выводе в нее.
0
Заблокирован
11.05.2023, 14:44
Цитата Сообщение от estic Посмотреть сообщение
Кроме того, в базу данных могут "случайно" попасть теги и "поломать" форму при выводе в нее.
Так я же не против. Хорошая функция и можно пользоваться. Только в моем случае "случайно" ничего в базу не попадает
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
11.05.2023, 14:46
Цитата Сообщение от bbkk Посмотреть сообщение
Только в моем случае "случайно" ничего в базу не попадает
Если вы будете выводить в форму незакодированный <br>, то он при обратной передаче от браузера "потеряется". В лучшем случае его можно будет восстановить (воссоздать). Но зачем такие трудности "на пустом месте"?
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
11.05.2023, 14:51  [ТС]
Как много я упустил из вида!

Спасибо!
0
Заблокирован
11.05.2023, 14:51
Цитата Сообщение от estic Посмотреть сообщение
Если вы будете выводить в форму незакодированный <br>
Еще не видел людей (обычных пользователей) которые в textarea вводили бы тег <br> Естественно никакого br нет, а есть переносы строк. Переносы строк в комментариях на сайте и также при редактировании статей. Потом переносы строк преобразуются в тэг и сохраняются в базе. А оттуда уже вместе с тэгом отображаются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2023, 14:51
Помогаю со студенческими работами здесь

Заполнение информации через форму
Здравствуйте! Возникла задача: Есть таблица Table в которой хранится ФИО и ответы на 3 вопроса. С помощью мастера форм выводится...

Вычисление формулы из строки вводимой пользователем
Проблема такая. Скажем есть окно с TextBox и Button. Запускаем. В TextBox вводим простую формулу типа: 1+2-3*(10-5)/100. Давим на Button и...

Проверка правильности вводимой пользователем криптограммы
Разработать программу, осуществляющую проверку правильности вводимой пользователем криптограммы в соответствии с заданием. Пользователь...

В строке, вводимой пользователем, найти все скобки и ...
1)В строке, вводимой пользователем, найти все скобки и заменить их на цифру &quot;5&quot;. 2)В строке, вводимой пользователем, найти все скобки и...

Как построить график функции, вводимой пользователем?
Необходимо построить график функции в windows form, вводимой пользователем в поле text box. Как это осуществить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru