Поводом к написанию этой статьи послужило нахождение мною уязвимости в одном довольно известном модуле. Так как по правилам обнаружения уязвимостей, я пока не вправе распространяться о деталях, то расскажу об уязвимости в общих чертах, а также о методах борьбы с ней.
Итак, подделка межсайтовых запросов (анг. Сross Site Request Forgery, или, сокращенно, CSRF): что это такое и с чем его едят.
CSRF — это вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя.
Данный тип атак, вопреки распространённому заблуждению, появился достаточно давно: первые теоретические рассуждения появились в 1988 году, а первые уязвимости были обнаружены в 2000 году.
Одно из применений СSRF — эксплуатация пассивных XSS, обнаруженных на другом сервере. Так же возможны отправка спама от лица жертвы и изменение каких-либо настроек учётных записей на других сайтах(например, секретного вопроса для восстановления пароля).
Этот урок создан специально для начинающих и средне-продвинутых Друпал-разработчиков. Он должен быстро дать понятие об азах Forms API, а также показать возможность создаия более сложных вещей на примере пошаговых форм (№8).
Когда я только начинал подготовку этого урока, у меня был соблазн поставить под каждым куском кода ссылку для скачивания готового примера, но в послествии, я отказался от этого. Будет намного полезнее, если вы сами будете вставлять код в свои модули, тестируя и набираясь опыта в реальных условиях.
И прежде чем начать, я расскажу вам как все-таки заставить любой из этих кусков кода работать. Предположим, вы уже имеете установленный тестовый сайт на Друпал 6. Вам прийдется проделать следующие действия:
Создать новую директорию в sites/all/modules, например my_module
Создать файл my_module.info в директории my_module, содержащий это:
name = My module
description = Module for form api tutorial
core = 6.x
Создать файл my_module.module. Полностью скопировать отсюда первый пример и вставить в my_module.module.
Включить модуль "My module" на странице модулей (admin/build/modules).
Перейти на страницу my_module/form для запуска кода.
Далее вам предстоит провести для каждого примера, полную замену содержимого my_module.module на код последующего примера. Не забывайте после этого переходить на страницу my_module/form для того, чтобы увидеть результаты своей работы.
Рад представить единственный в своем роде типограф для TinyMCE. Типограф использует PHP библиотеку от rmCreative для обработки текста. Внешние сервисы не используются, все происходит на локальном сервере.
Плагин предоставляет кнопку, при нажатии которой, появляется диалог типографа. В нем вы можете просмотреть обработанный текст, а также внести быстрые правки к исходный вариант.
Если вы этого давно ждали и вас переполняет радость, вы можете конвертировать свою благодарность на кошелек Z739117869357. В предверие нового года обещаю потратить эти деньги только на веселье и выпивку :D
В любом случае, можете активно коментировать это событие, так как эта страница станет ссылкой-demo-версией на drupal.org.
Идея данного модуля витала у меня в мозгу уже довольно давно. Я приверженец идеи "зеленой" установки сайта, которая подразумевает наличие на сайте как минимум трех ролей:
Супер-админа — он же uid=1
Админа — uid>1, большинство административных прав
Пользователя — uid>1, только права на создание контента и комментариев
Если взять, к примеру, однопользовательский блог, то получим и три аккаунта на каждую из ролей. Причем, в идеале, все статьи и комментарии должны быть написаны от пользователя. Но часто так бывает, что выполнив какую-то работу под админом и, забыв поменять аккаунт, вы приступаете к модерации комментариев и ответов на них. И только потом, опомнившись, замечаете промах.
Конечно, здесь нет никакой трагедии, ибо при ручном редактировании нод и комментариев, авторство можно без труда изменить на пользователя. Но вот отосланные уведомления о новых комментариях уже не исправить. Да и лень потом перелогиниваться и делать рутину.
Долгое время у меня в системе было установлено 3 раскладки — английская, русская и украинская. Так как, преимущественно, я использую английскую и русскую, лишнее переключение раскладки меня стало раздражать, и украинская раскладка была снесена. Для редких случаев, когда она была нужна, я устанавливал ее заново. Но проблема решилась лишь частично. Когда украинский был нужен — его не было под рукой.
Совсем недавно я подумал, почему бы не дополнить типографскую раскладку Бирмана недостающими буквами из украинского алфавита (коих всего 4). Вооружившись Microsoft Keyboard Layout Creator, я создал такую раскладку. Теперь, для набора украинских букв мне стоит лишь зажать правый альт и набирать их как обычно (ї = Alt + ъ, Ї = Alt + Shift + ъ, ...)
Порадовавшись немножко, я создал еще и обратную раскладку на основе украинской — для тех, кто пользуется преимущественно украинским языком (ы = Alt + і, ...). Кроме того, получившуюся украинскую раскладку я дополнил всеми типографическими цацками раскладки Бирмана, так что все сочетания значков остались на старых местах.
После этого, я вспомнил еще и о белорусских братьях, у которых наверняка были те же проблемы, что и у меня. Для них я подготовил еще два варианта раскладок — русскую с белорусскими буквами и обратную ей — белорусскую «типографскую» с отсутствующими русскими буквами. И напоследок, я совместил и украинские, и белорусские буквы в одной русской раскладке, дабы помочь тем, кто пишет на всех трех языках.
Внутри топика вы найдете интерактивную схему этих раскладок, ссылки на скачку, а также информацию о том, как установить раскладки в системе.
Первое знакомство с модулем Token, любой друпаллер начинает с включения таких модулей как PathAuto или Auto Node Titles. Этот модуль служит для подстановки различных значений в шаблоны строк других модулей.
Модуль предоставляет великое множество возможных шаблонов, но все же, довольно часто, при построении сайта не хватает специфических шаблонов. Например, у вас есть соц. сеть. Вы хотите, чтобы у топиков в личном блоге УРЛы были вида http://site.com/vasya-pupkin/post-title, а у тех же топиков, принадлежащих группе — http://site.com/group-title/post-title. Так как для одного типа контента можно прописать только один шаблон Токена, то вы можете создать либо [user-raw][title], либо [group-title][title], но не все вместе. Большинство пользователей Друпала на этом шаге зайдет в тупик и подумает, что проблему решить невозможно.
Однако, это не так. Тем более теперь, когда решение находится внутри этой статьи.
Друпал содержит множество всевозможных форм. Иногда, не все они выглядят так, как бы вам хотелось. Изменение друпаловских форм это тема, которую многие разработчики встречают дружными стонами неудовольствия и непонимания. Между тем, достаточно уяснить всего два метода их изменения и все становится намного яснее и проще.
С выходом релиз-кандидатов модулей Views 2 и CCK 2 для шестой версии друпала, стоит уже серъезно задуматься о переходе на Drupal 6.
Чтобы дать толчок этому процессу, я решил окончательно раскрыть тему темизации этих модулей, сначала, для пятой ветки, а затем и для шестой.
Итак, начнем с темизации вьюсов.
Наверное первым камнем преткновения разработчика, познавшего начальные прелести Друпала, является темизация модуля Views. Этот процесс содержит минимум документации, так что, порой, некоторые начинающие разработчики вообще не догадываются, что с вьюсами можно что-то делать.