Любопытный эффект, пофиксил по-быстрому - блокируются изображения содержащие logout (интересно какие ещё вредные ссылки можно вызвать?) и не содержащие расширения. Больше не отлогинивает.
Это уже к модулю рейтинга нодов. Значит в нём не проверяется ввод пользователя, что печально. Для img блокировку сделал отдельным модулем (прикрепляю в аттаче, может кому пригодится).
Именно так. Просто сделал защиту от этого разлогинивания. В регвыражение фильтра несложно добавить защиту от других вредных ссылок, либо ограничить доступ локальным картинкам определёнными путями. В любом случае тут не нужна правка чего либо в ядре - подобный фильтр на img src решает проблему.
А если сделать обработчик вывода, который анализирует атрибут src для изображений и фильтрует все изображения, которые ссылаются на файлы вне каталогов тем и files ?
А если сделать обработчик вывода, который анализирует атрибут src для изображений и фильтрует все изображения, которые ссылаются на файлы вне каталогов тем и files ?
А если изображение не с сайта а с фликра ?
Поидее ничто не мешает анализировать является ли прикрепляемый файл картинкой или нет
А как вообще это в деталях работает? Браузер просто так обрабатывает тэг image тупо обращаясь куда угодно?
Поидее так можно и куки воровать вызывая удалённый пхп скрипт или я не прав?
Нас, как я понимаю, в первую очередь интересует защита от вызова скриптов (в том числе и административных) на НАШЕМ сервере.
Соответственно, все пользовательские изображения должны быть в каталоге files, все изображения модулей и тем должны находиться в каталоге sites. Все обращения за изображением в другие каталоги должны быть пресечены как провокаторские.
Внешние ресурсы нас мало интересуют, хотя вполне возможна и такая атака - если у посетителя открыта сессия на другом сайте, код которого вызывается при помощи IMG.
А по поводу обработки тэга IMG - браузеру все равно, какой URI указан в атрибуте src - его задача обратиться по указанному адресу, поптыаться получить документ и если документ можно отобразить - то отобразить его. Т.е. если в атрибуте src указан правильно сформированный адрес - то браузер обратиться по нему.
просто не нужно использовать html-теги, они же потенциально небезопасны... заткнули одну дырку, появится другая... гораздо лучше использовать механизмы, которые уже есть, типа BBCode и тд... их же не зря придумали...
В принципе этим способом можно запустить любой скрипт. Другое дело, что запустит его только привилегированный пользователь (правда узнает об этом опосля когда зайдёт на страницу с фиктивным адресом (не сидите под рутом в *nix'ах и под админом в друпале!
Комментарии
для тех кто не понял: обратите внимание, что вас разлогинило.
это самое безобидное, что можно сделать...
добавил еще бяку. для пущей наглядности.
вру! разлогинело!
Любопытный эффект, пофиксил по-быстрому - блокируются изображения содержащие logout (интересно какие ещё вредные ссылки можно вызвать?) и не содержащие расширения. Больше не отлогинивает.
Но к хабрахабру это отношения не имеет.
В тему топика http://webplanet.ru/news/security/2008/01/23/habr_ddos.html
logout ты пофиксал, а вторую бяку? посмотри внутрь топика и на его рейтинг.
P.S. ты все пропустил. до ddos-а на хабре таким развлекались.
Это уже к модулю рейтинга нодов. Значит в нём не проверяется ввод пользователя, что печально. Для img блокировку сделал отдельным модулем (прикрепляю в аттаче, может кому пригодится).
ну, решение, скажем так: "в лоб"..
Именно так. Просто сделал защиту от этого разлогинивания. В регвыражение фильтра несложно добавить защиту от других вредных ссылок, либо ограничить доступ локальным картинкам определёнными путями. В любом случае тут не нужна правка чего либо в ядре - подобный фильтр на img src решает проблему.
добавь тогда наверное еще и от содержащих: "/vote_up_down/", а то видишь как у топика рейтинг ростет
Че-то меня не разлогинило.
Так уже исправленно
мда, реитинг зашкаливает
После хабра т оже подумал, о том что это же и в друпале вероятно осуществимо
Мда, а можно мне код (для изучения) по мылу ?
да нет никакого кода. есть тэг img с нужным src. сделайте view source и все увидите
весьма интересно
мда глянул код
Все элементарно, на орг то отправили репорт?
http://drupal.org/node/213682
А если сделать обработчик вывода, который анализирует атрибут src для изображений и фильтрует все изображения, которые ссылаются на файлы вне каталогов тем и files ?
А если изображение не с сайта а с фликра ?
Поидее ничто не мешает анализировать является ли прикрепляемый файл картинкой или нет
А как вообще это в деталях работает? Браузер просто так обрабатывает тэг image тупо обращаясь куда угодно?
Поидее так можно и куки воровать вызывая удалённый пхп скрипт или я не прав?
Нас, как я понимаю, в первую очередь интересует защита от вызова скриптов (в том числе и административных) на НАШЕМ сервере.
Соответственно, все пользовательские изображения должны быть в каталоге files, все изображения модулей и тем должны находиться в каталоге sites. Все обращения за изображением в другие каталоги должны быть пресечены как провокаторские.
Внешние ресурсы нас мало интересуют, хотя вполне возможна и такая атака - если у посетителя открыта сессия на другом сайте, код которого вызывается при помощи IMG.
А по поводу обработки тэга IMG - браузеру все равно, какой URI указан в атрибуте src - его задача обратиться по указанному адресу, поптыаться получить документ и если документ можно отобразить - то отобразить его. Т.е. если в атрибуте src указан правильно сформированный адрес - то браузер обратиться по нему.
Поидее так можно и куки воровать вызывая удалённый пхп скрипт или я не прав?
Не прав. Куки устанавливаются для домена
- А если изображение не с сайта а с фликра ?
Анализировать откуда изображение и запрещать все что не с файлс и темс
- Поидее ничто не мешает анализировать является ли прикрепляемый файл картинкой или нет
Конечно ничего. Но я что-то не припомню таких функций в пхп.
просто не нужно использовать html-теги, они же потенциально небезопасны... заткнули одну дырку, появится другая... гораздо лучше использовать механизмы, которые уже есть, типа BBCode и тд... их же не зря придумали...
чтобы защитить и vote_up_down линки:
case 'process':
$strings_to_block = 'logout|vote_up_down';
return preg_replace("//iU", "[ИЗОБРАЖЕНИЕ $1 БЛОКИРОВАНО]", $text);
?>
В принципе этим способом можно запустить любой скрипт. Другое дело, что запустит его только привилегированный пользователь (правда узнает об этом опосля когда зайдёт на страницу с фиктивным адресом (не сидите под рутом в *nix'ах и под админом в друпале!
2B.X: При чём тут BBCode? Вот так это будет для BBCode:
[img]http://site.ru/logout[/img]
Какими ещё способами можно заставить браузер обратиться по нужному адресу (кроме JS)?
а вообще то делать лог-аут get`ом - глупо. только POST! ну это баг друпала
Интересно а рейтинг юзеров таким способом то;е можно........