Я надеюсь, что кто-то может дать совет или советы, прежде чем это закроется, потому что меня предупредили, что это субъективный вопрос.
У меня есть своя собственная среда PHP + SQL, созданная на основе Slim и Eloquent, и я планирую интегрировать в нее форум, и, чтобы сделать ее более удобной для пользователей, я планирую добавить бесплатные текстовые редакторы для публикации на форуме.
Очевидно, эти текстовые редакторы отправляют HTML-коды через POST, и с их помощью я планирую сохранить их в базе данных MySQL. И поскольку оно красноречиво, я вполне понимаю, что оно уже обрабатывает подготовленное утверждение, чтобы избежать инъекций. Но я не уверен, достаточно ли это безопасно, я просматривал phpBB, и до сегодняшнего дня у них нет симпатичного текстового редактора (или его еще предстоит разработать для 3.2), и я понял, что они обеспокоены безопасностью, и я нервничал больше, так как они там ветеран.
Можете ли вы получить инъекцию через эти простые коды HTML? Какие еще атаки можно использовать против моей системы?
Спасибо!
До тех пор, как вы побег все до вставки в запросы SQL, база данных будет в безопасности … от самой простой формы внедрения SQL.
Для защиты от внедрения JavaScript вы должны очистить разметку на стороне сервера перед вставкой в базу данных, удалив <script>
теги. Вы также можете удалить iframe
, link
и теги формы.
Вам также нужно будет настроить фильтрацию контента на стороне клиента. Например, TinyMCE имеет invalid_elements
вариант, где вы можете перечислить теги для удаления.
Чем больше функций поддерживает система, тем больше риск, очевидно. Например, хакер может загрузить файл с именем, содержащим выражение оболочки, например $(rm -rf /www/).png
, Таким образом, сервер будет взломан, если кто-то на сервере случайно запустит eval
на такого рода имени файла. Другой пример — загрузка скрипта, похожего на изображение.
Полагаю, нет смысла перечислять более возможные способы взлома системы. Ответ на ваш вопрос: да, систему можно взломать с помощью популярных веб-редакторов. Поэтому я бы рекомендовал свести к минимуму количество функций, предоставляемых пользователю, и тщательно очистить вводимые пользователем данные, особенно на стороне сервера.
Других решений пока нет …