[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: HTML и MySQL
Гость_Abbadon
Добрый вечер!
Проконсультируйте в одном вопросе!
Хочу реализовать добавление новостей на сайте. Не использую никакие CMS, пишу сам вручную. Но новости это не просто тупой текст. Я хочу чтобы в тексте какой-то конкретной новости была, например, ссылка куда-то там.... А в простой текст ссылку ведь не вставишь....
Её нужно типа так: <a href="...">ТУТ ССЫЛКА</a>...
Или, например, хочу чтобы в тексте были абзацы, или какой-то кусок жирный, а какой-то курсивом и.т.д...Это ведь надо в текст пихать HTML-теги.
А чтобы потом это всё нормально воспроизводилось при вытаскивании из БД, функцию htmlspecialchars() применять нельзя.
А хранить в БД куски хтмл как-то даже не знаю....стрёмно...
Как бы тут надо и про безопасность думать...
Вот потому хотел у вас проконсультироваться, кто что думает на этот счёт. Или может кто-то такое уже реализоввывал...
Т.е вопрсо такой: можно ли как-то безопасно хранить в БД текст вперемешку с html кодом?




Спустя 3 минуты, 56 секунд (16.02.2012 - 22:38) Панч написал(а):
Можно.
При добавлении записи используй htmlspecialchars()
а данные из базы уже обрабатывай через htmlspecialchars_decode()

Спустя 18 минут, 29 секунд (16.02.2012 - 22:57) Гость_Abbadon написал(а):
Панч, а что это даёт?
Если, например, злоумышленник обновит запись на вот такое:
<script>location.href="http://xxx.ru";</script>

В БД оно запихнётся и будет храниться там с преобразованием через htmlspecialchars(), а потом зайдём в текст этой записи через браузер, через htmlspecialchars_decode() произойдёт обратное декодирование и будет редирект на какую-нибудь порнуху или типа того...

Спустя 3 минуты, 42 секунды (16.02.2012 - 23:00) Гость_Abbadon написал(а):
Т.е если в БД хранить простой текст, то при выводе его в браузер надо обязательно использовать функцию htmlspecialchars(), которая преобразует специальные символы в HTML сущности. Т.е если в этом случае такую строку запихнуть в БД:
<script>location.href="http://xxx.ru";</script>
и потом выодить из БД, то она в таком случае прямо вот так и вылезет, никакого редиректа не будет.

Чёт как-то непонятно в общем как быть...

Спустя 8 часов, 16 минут, 6 секунд (17.02.2012 - 07:16) Панч написал(а):
При добавлении делай проверку что бы в тексте не было тегов типа
<script> и выдавай сообщение с ошибкой

Спустя 1 час, 28 минут, 25 секунд (17.02.2012 - 08:45) olegod написал(а):
Используй htmlspecialchars(), она экранирует спец. символы html... При выводе пользователь увидит <script>location.href="http://xxx.ru";</script>, но скрипт не выполнится

Спустя 44 минуты, 17 секунд (17.02.2012 - 09:29) vagrand написал(а):
А BBCode на что придумали?

Спустя 51 минута, 11 секунд (17.02.2012 - 10:20) sergeiss написал(а):
Цитата (Панч @ 16.02.2012 - 23:38)
При добавлении записи используй htmlspecialchars()
а данные из базы уже обрабатывай через htmlspecialchars_decode()

Неправильный ответ! htmlspecialchars() необходим только при выводе в браузер. Да и то в случае, если мы хотим показать какой-то HTML код юзеру и чтобы он не обрабатывался браузером. То есть, эта функция сюда вообще не имеет никакого отношения!!!

При добавлении в БД надо экранировать слэши - вот это действительно важно. Для того, чтобы предотвратить SQL-инъекцию. Это может быть функция addslashes() или другие, типа mysql_escape_string() и ей подобные для других типов БД.

Спустя 8 часов, 55 минут, 41 секунда (17.02.2012 - 19:16) Гость_Abbadon написал(а):
Короче хранить в БД куски html кода всё-таки небезопасно...

sergeiss, а что Вы думаете на тот счёт, что предложил Панч насчёт, я так понимаю, использования регулярных выражений, чтобы теги <script> как-то "убивать" ?

Ведь, по идее, из всех тегов опасен именно этот тег <script>, который позвонит нам внедрять какой-нибудь нехороший ЯваСкрипт-код...
А других опасных тегов я даже и не знаю...
А насчёт mysql_real_escape_string() это да, без неё в БД данные добавлять просто нельзя!)

Спустя 2 минуты, 36 секунд (17.02.2012 - 19:19) Гость_Abbadon написал(а):
sergeiss, да, про использование BBCode что можете сказать?
Ибо на этом форуме сколько раз спрашивал, очень Вы ценные и разжеванные советы даёте)

Спустя 9 минут, 44 секунды (17.02.2012 - 19:28) johniek_comp написал(а):
а что мешает вырезать скрипты через прегреплейс?
$db = 'тут текст с тегами и <script>';
preg_replace('<script>', '', $db);


выведет: тут текст с тегами и

Спустя 3 минуты, 40 секунд (17.02.2012 - 19:32) nugle написал(а):
johniek_comp
ты бы посмотрел вначале каков синтаксис регулярных выражений)

Спустя 50 минут, 35 секунд (17.02.2012 - 20:23) Guest написал(а):
johniek_comp, ну как бы да, по смыслу я такое как раз имел ввиду)

Спустя 1 час, 27 минут, 2 секунды (17.02.2012 - 21:50) sergeiss написал(а):
Цитата (Гость_Abbadon @ 17.02.2012 - 20:16)
Ведь, по идее, из всех тегов опасен именно этот тег <script>....

Если при выводе в браузер ты будешь использовать htmlspecialchars(), то как раз всё нормально будет. Скрипт не сработает.

Спустя 1 час, 52 минуты, 47 секунд (17.02.2012 - 23:42) killer8080 написал(а):
Цитата (Гость_Abbadon @ 17.02.2012 - 18:16)
Короче хранить в БД куски html кода всё-таки небезопасно...

Хранить безопасно, выводить не безопасно. Весь вопрос в том, кто эти данные в бд кладет. Если пользователь, то конечно выводить без обработки нельзя. Собственно самый надежный способ использовать bb-code-ы.
Цитата (Гость_Abbadon @ 17.02.2012 - 18:16)
Ведь, по идее, из всех тегов опасен именно этот тег <script>, который позвонит нам внедрять какой-нибудь нехороший ЯваСкрипт-код...
А других опасных тегов я даже и не знаю...

Нет, не только, это типичная ошибка js код может выполнятся не только из <script></script>, но из атрибутов событий, и href и т.п.

Спустя 22 часа, 49 минут, 37 секунд (18.02.2012 - 22:32) Гость_Abbadon написал(а):
sergeiss, если использовать htmlspecialchars(), то не сработает ни <script>, ни <p>, ни <strong> и никакие теги по оформлению текста ))

killer8080, я думал сделать так, что Новости будет добавлять / редактировать / удалять только АДМИН, а пользователи будут только просматривать их, без возможности модификации... Тогда может основной упор сделать на защиту Админки? ph34r.gif

Спустя 9 минут, 32 секунды (18.02.2012 - 22:42) Панч написал(а):
Админку в любом случае надо защищать, на то она и админка.
А если записи будет добавлять только админ, то и смысла нет париться на счет скриптов.
В таком случае наоборот в контенте скрипт может понадобиться, к примеру для сворачивание длинного текста.

Спустя 19 часов, 42 минуты, 25 секунд (19.02.2012 - 18:24) killer8080 написал(а):
Цитата (Панч @ 18.02.2012 - 21:42)
А если записи будет добавлять только админ, то и смысла нет париться на счет скриптов.

А кто сказал что админку не возможно взломать?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.