Помогите разобраться с mysql_escape_string и CKE

[Удален]
879

Доброго времени суток, господа.

Сейчас задался целью сделать большую надстройку на wordpress для использования движка в качестве полноценной CMS.

Одна из важных задач — форма добавления материалов прямо на сайте.

Покурил вопрос с установкой CKEditor, поставил — заработало на ура.

Начал курить вопрос безопасности (дескать, добавлять-то могут и пользователи, а значит и недоброжелатели). На сайтах по PHP наткнулся на описание оператора mysql_escape_string как защищающего БД от нежелательного кода.

В обработчике, при передаче данных из формы в функцию wp_insert_post, переменную с контентом обрабатываю mysql_escape_string. И вот здесь начинаются приключения. Если в обработчике добавить эту функцию, то на странице с отображением материала не будут работать стили (<span style="">), не вставятся пикчи, и в каждой точке переноса строки вставляется символ "rn" (без слешей). В таком же кошмарном виде материалы хранятся и в самой БД.

Извините, что очень сумбурно описал проблему - знакомство с php начал всего неделю назад и пока не силен в терминах. Надеюсь из вопросов будет все понятно.

Итак.

Вопрос 1. А нужно ли вообще гемороиться с mysql_escape_string? Разве этим путем в БД можно отправлять какие-то sql-запросы/команды (типа "дроп всё нафиг")? Не достаточно ли будет просто подключить библиотеку HTML Purifier, которая будет работать с переменной $контент, удаляя JS-коды?

Вопрос 1.1. Если с mysql_escape_string все-таки нужно гемороиться, то нужно ли защищать и другие поля формы? Так полагаю, их подменить с select'ов на input'ы не составит труда.

Вопрос 1.2. Если с mysql_escape_string нужно гемороиться, а в базе материалы и должны храниться в такой странной форме, то должен же быть какой-то оператор для "декодирования", чтобы на экране всех этих rn'ов, покоцанных апострофов, не было, а из кода удалялись ненужные слеши и кавычки. Какой?

Вопрос 2. Как еще нужно защититься от контента, который может быть передан пользователем через созданную мной дыру?

Вопрос 3. Где можно на человеческом языке почитать о вариантах тестирования готовой формы? Чего в нее такого можно вписать, чтобы вызвать маленький апокалипсис.

Понимаю, что загнул с вопросами. Если просто ткнете в какую сторону копать, это уже будет хорошо.

TF-Studio
На сайте с 17.08.2010
Offline
334
#1
знакомство с php начал всего неделю назад
задался целью сделать большую надстройку на wordpress

Как бы рановато ещё...

Не самая простая задача поставлена.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
bsyomov
На сайте с 25.01.2012
Offline
31
#2
Сейчас задался целью сделать большую надстройку на wordpress для использования движка в качестве полноценной CMS.

Возьмите полноценную CMS.

знакомство с php начал всего неделю назад и пока не силен в терминах.

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

Чтобы делать такие вещи нужен опыт, а начинать лучше с чего-то менее глобального.

К тому же изначально, вы ставите себе задачу, имеющую очень малый практический смысл.

А по теме, весь ввод надо проверять. Как это делать, вопрос совсем другой, методов много.

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

С текущим уровнем знаний вам надо очень много ещё учиться, до того, как писать что-либо, что будет работать в продакшене.

Причём учить не только собсвенно php, но и различные технологии, которые вы будете использовать.

Как и где вариантов много. И книги и всякие курсы и изучение готового кода...

Hixon10
На сайте с 21.08.2010
Offline
125
#3

NerZool, wp_insert_post() сама беспокоится о безопасности. Использовать mysql_escape_string не нужно.

Веду свой невзрачный блог (http://hixon.ru/).
V
На сайте с 27.04.2009
Offline
46
#4

Покурите вот тут. Может поможет.

Мое детище, которое холю и лелею (http://quicktuts.ru/) Беспроводной интернет, антенны Yota (http://skylink.ws/Yota/) Профессиональный хостинг. Бесплатный домен. Безлимитный трафик. (http://goo.gl/MMvWNj)
[Удален]
#5

Hixon10, блин, ну разумеется! Долго понять не мог почему вывод результата msql_real_escape_string на экран показывает \n со слешами, а в базу пишется совсем не то. Здесь, оказывается, двойная обработка за счет встроенной sanitize_post() и моих действий. Спасибо за наводку : )

Но возникает тогда другая проблема. В кодексе wp.org ничего не сказано про санитайз wp_update_post. Т.е. здесь, все-таки придется повозиться, правильно понимаю?

bsyomov:
Вы если что-то в итоге и сделаете, это будет такой ужас, что вам этим пользоваться не захочется.

Я же не пишу CMS с нуля. Большую часть задач выполняет движок, а не мои функции. Задача поставлена так, что на любом этапе разработку надстройки можно прекратить, а системой можно будет продолжать пользоваться за счет недоделанных мной, но выполненных в движке неудобных элементов. Пишу исключительно под себя и под конкретный сайт, т.е. гибкость из целей исключена (пока), а это убирает 95% работы по-моему.

Параллельно раскачиваю интеллект и мудрость (одна из самых важных целей, с целесообразностью которой невозможно спорить).

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

Возьмите полноценную CMS

Вопрос для холивара.

Сейчас знаю DLE и Joomla! на уровне написания собственных шаблонов (WP, разумеется, на том же уровне). Joomla! очень тяжелая и совсем не гибкая. DLE — прекрасная система для моих задач + очень легкая (только с собственным кешированием готовая морда с кучей выведенных информеров делает всего два запроса к БД! ИМХО, очень показательно), но, вспоминая исследование Яндекс о том, что 50% взломанных сайтов из 10 000 самых популярных были сделаны на DLE, кагбе, желание работать с системой пропадает всякое.

Знакомые советуют для изучения (+ раскачки INT и WIS) Drupal, но он отпал по причине того, что в отечественной комьюнити сидят сугубо злые бородатые админы, грубо отправляющие всех и каждого гуглить, хотя гугл на эти вопросы отправляет только на посты комьюнити, где участники отправляют друг друга гуглить. В результате мозг выдает ошибку циклической переадресации (310?) и выбрасывает в спящий режим.

А для WP есть прекрасный кодекс, образцовый блог WP-Kama, огромное русскоязычное сообщество "этих ваших манимейкеров", которые завалили всю ленту pr-cy.ru мануалами уровня "для вебмастеров с INT: < 0", и Ю.Б. на форуме maxsite, который, насколько мне показывает гугл, отвечает на ВСЕ вопросы по WP (бот штоле?).

Исходя из того, что система должна быть недорогой (а лучше бесплатной), опенсорсной (для вноса своих правок в будущем), популярной (для массовой проверки профессиональными хакерами), часто обновляемой (для залатывания дыр, найденных в пункте 3), понятной, и имеющей нормальное комьюнити, разве есть что-то лучше, чем WP? Учитывая глуповатую систему кеширования, уточню: разве есть что-то лучше, чем WP для сайтов с потенциальной посещаемостью <15К хостов/сутки?

Опять же, задаю вопрос без сарказма — я всегда открыт для мнений профи.

ЗЫ: Кстати, еще одним бонусом, заставившим полюбить WP стала отличная система ЧПУ. Для моих задач нет ничего лучше, чем /categoryname/subcategoryname/postname.myextension.

Hixon10
На сайте с 21.08.2010
Offline
125
#6

NerZool, вп советует для избежания sql скулей, использовать $wpdb->prepare. С помощью этого метода можете и обновлять свои посты (Protect Queries Against SQL Injection Attacks).

Ragnarok
На сайте с 25.06.2010
Offline
239
#7

NerZool, WP- это не фреймворк. Это CMS и большая часть функционала реализуется плагинами, в т.ч, наверняка и ваша задача.

//TODO: перестать откладывать на потом

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий