|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||||||
Правильное сохранение кавычек07.05.2012, 10:32. Показов 14789. Ответов 10
Метки нет (Все метки)
Привет!
Столкнулся с такой проблемой, при сохранении инфы из формы в БД я делаю так
Если в поле набрать кавычки, то в БД они сохраняются как " и выводятся соответственно также. Как сделать чтобы в БД сохранялись обычные кавычки, хватает ли для защиты тока mysql_real_escape_string или htmlspecialchars тоже стоит использовать?
0
|
||||||
| 07.05.2012, 10:32 | |
|
Ответы с готовыми решениями:
10
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||||||||||||||||||
| 07.05.2012, 11:32 | ||||||||||||||||||||||
|
Love_and_Peace, Юзер в форму вводит что? - вводит text/plain, т.е. ", &, < и > - это обычные символы:
В БД хранится ровно то, что было введено юзером. Благодаря этому юзер может написать абсолютно любой символ (иначе получится, что невозможно написать <, " или '? искусственные ограничения свободы слова). Если юзер или админ захочет исправить что-то в своем сообщении - он будет редактировать свой исходный текст, а не какой-то мусор (который после редактирования повторно через что-то пропустится? & -> & -> &amp; -> &amp;amp;). Другая сторона проблемы - производительность. Если мы выводим сотни сообщений по Nдесят КБ каждое, и каждое при этом пропускаем через htmlspecialchars(), то производительность явно пострадает. Для решения этой проблемы можно хранить в БД обе версии текста: и исходный text/plain, и сгенерированный из него text/html. При создании/редактировании сообщения юзер видит и пишет свой text/plain, а в БД вносятся оба варианта. При выводе на странице используется уже готовый text/html.
1
|
||||||||||||||||||||||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||
| 07.05.2012, 11:41 [ТС] | ||
|
Vovan-VE, правильно ли я понимаю, что при сохранении в БД вабще не стоит использовать htmlspecialchars?
Добавлено через 51 секунду кстати вот это вот
0
|
||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||||
| 07.05.2012, 11:48 | ||||||||
1
|
||||||||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||
| 07.05.2012, 11:56 [ТС] | ||
|
Я читал про htmlspecialchars и знаю, что он нужен, чтобы не запустился случайно неких засланный код, ну тогда его полезно использовать на выходе, но никак при сохранении в БД, разве не так?
0
|
||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 07.05.2012, 12:23 | |
|
Love_and_Peace, Сама по себе потребность использовать htmlspecialchars() - это лишь следствие того, что данные выводятся в виде html-страницы. Если бы они выдавались, например, в JSON'е, то вместо htmlspecialchars() была бы другая функция. Если бы данные выводились в виде тупо-текста, например, в примитивную консоль, то тут, пожалуй, не было бы никакой функции преобразования. Суть в том, что надо понимать разницу между собственно данными и представлением этих данных в каком-либо контексте.
Если все операции односторонние и проводятся единожды (один раз написал пост, он внесся в БД один раз, раз и навсегда, и больше с ним ничего сделать нельзя, кроме удаления), то нет никакой разницы, в какой момент времени применять htmlspecialchars() - до внесения в БД или после. А если же предполагается еще и редактирование существующих постов, то что мы вообще будем редактировать, если у нас не будет оригинала?
1
|
|
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||
| 07.05.2012, 13:51 [ТС] | ||
|
Данные, которые заносятся в БД - это обычный текст, со все возможными символами (!,",',#,№... и т.п.). Стоит ли в таком случае использовать ф-ю htmlspecialchars? Просто если не использовать, вдруг какой-то редиска пропишет в форму вредоносный js-код, к примеру, будет ли мне от этого вред, если я буду использовать htmlspecialchars тока при выходе?
0
|
||
|
154 / 124 / 11
Регистрация: 11.01.2010
Сообщений: 434
|
||||||
| 07.05.2012, 14:27 | ||||||
|
Приветствую, Vovan-VE говорит верно лучше всего хранить оригинал, но замете есть ряд неприятных моментов в оригинале которые нужно пресечь даже при выводе в input или textarea например: тря-ля-ля тут куча текста и в конце "/><script>alert('xss');</script> в теге input
1
|
||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 07.05.2012, 19:17 | |
|
Love_and_Peace, Если в БД уже вносится оригинальный текст, то htmlspecialchars() мы в любом случае должны использовать при выводе текста в html-страницу, как если бы использовали json_encode() для преобразования PHP-массива в код JSON.
1
|
|
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
|
| 07.05.2012, 19:44 [ТС] | |
|
да, это понятно. а как поступить в случае, который описал boong?
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 07.05.2012, 19:51 | |
|
Love_and_Peace, Да точно так же. У нас на входе text/plain, а на выходе text/html. Значит в любом случае применем htmlspecialchats().
0
|
|
| 07.05.2012, 19:51 | |
|
Помогаю со студенческими работами здесь
11
Правильное сохранение родителя и ребенка тэга
Правильное swprintf, правильное wprintf ? Экранирование кавычек Не хватает кавычек Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|