Как хранить HTML-теги в базе данных? - PullRequest
1 голос
/ 23 октября 2011

я создаю свой новый сайт. Теперь я учусь и использую Symfony. У меня есть несколько вопросов.

  1. Почему по умолчанию Symfony позволяет добавлять HTML-теги в базу данных? Например, я создаю новый модуль, я захожу в модуль / новый, в заголовке я ввожу <strong>test</strong> и затем сохраняю его. В базе данных MySQL у меня есть <strong>test</strong>. Это безопасно?
  2. Я знаю - если я использую просто $ test-> getTitle (), то это отрисовывает текст <strong>test</strong>, но что если я хотел бы добавить для комментариев пользователя WYSYWIG и использовать RawValue ()? Пользователи не могут закрывать теги </strong> и весь сайт не работает ...
  3. Они могут, например, украсть печенье?
  4. Есть ли безопасный редактор WYSIWYG для Symfony? Если я использую CKEditor или TinyMCE, я в безопасности?
  5. На стеке есть поток уценки ОМУ, но нигде не могу его найти. Как он хранит HTML-теги в базе данных? **test**?

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

При хранении любой строки в базе данных необходимо учитывать две вещи:

  1. Вредно ли это для базы данных (всегда одно и то же решение)
  2. Вредно ли дляклиент получателя (зависит от того, что это за клиент)

Что касается # 1

Вы всегда должны очищать любой вход в вашу базу данных, что помогает предотвратить инъекции SQL и другие различные атаки на базу данных.

Что касается # 2

Ваш клиент-получатель - браузер, вы обслуживаете HTML.Вы должны убедиться, что ненужные теги не вставлены, вы можете сделать это несколькими способами.

  • Решите, какие теги вы разрешаете, а какие нет, и фильтруйте их с помощью PHP перед вводом.(Так, например, все теги <script> удалены из кода.
  • Запретить ВСЕ теги, выбрать собственный синтаксис (например, SO **bold** или [links][http://google.com]) и сохранить его.Получая его из базы данных, проанализируйте его с помощью PHP или JavaScript и передайте его клиенту.

Существует множество других решений, будьте изобретательны.

4 голосов
/ 23 октября 2011

1а) Безопасен для чего?Пока ваши операции с базой данных очищают весь пользовательский ввод с помощью mysql_real_escape_string () перед вставкой в ​​запросы, злоумышленник не сможет атаковать вашу базу данных с помощью инъекционных атак.HTML в базе данных похож на любой другой фрагмент текста в базе данных - это просто текст с некоторыми дополнительными «странными» символами.

1b) Что касается того, почему он это позволяет, вы явно сказали ему НЕ разрешать html?PHP / Symphony / MySQL делают именно так, как вы говорите им.

2) Обеспечение правильности HTML-кода зависит от вас.Вы можете использовать такие вещи, как HTML Purifier , чтобы исправить «испорченный» HTML.

3) Если вы выполняете очистку / фильтрацию HTML, то пользователь может встраивать блоки <script> в HTMLони добавляют и крадут куки с помощью этого метода ...

4) Эти редакторы просто редакторы.Они отображают материал и позволяют вам (или другим) редактировать отображаемый материал.Они так же безопасны или небезопасны, как вы хотите.Они просто инструменты.Если вы даете кому-то заряженное ружье, не удивляйтесь, если кого-то застрелят.

5) То, что в каком-то тексте есть какие-либо теги, не делает этот текст «волшебным» другим"из другого текста.MySQL не волнует, нужно знать или даже ДОЛЖНО знать, что вы вставляете текст markdown'd в поле.Он просто сохраняет то, что вы ему говорите, и извлекает его обратно, когда вы этого тоже хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...