Author: Рамиль Юналиев

Правильное удаление элементов [bitrix api]

Есть такая уязвимость, когда атакующий может удалить элемент, каталог, или даже инфоблок. Для этого нужно найти страницу или скрипт который выполняет эти действия.

После чего ему нужно всего навсего добавить картинку, например на форум, и в адрес url картинки подставить определенно сформированный адрес.

Например есть функционал вывода новостей, причем пользователь может как добавлять так и удалять новости. Ссылка на удаление новости  выглядит у нас вот так.

www.site.ru/news/detail.php?ID=777&del=Y

Теперь если мы добавим пост на форум или блоги, и добави картинку с ссылкой,

<img src=»www.site.ru/news/detail.php?ID=777&del=Y» />

то администратор будучи авторизованным благополучно удалить элемент в ID 777. Проблема думаю ясна, теперь как это предотвратить.

Continue reading

Создаем опции для пользователя. cохранение настроек страницы для авторизованных пользователей [bitrix api]

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

Итак класс находится в файле require_once($_SERVER[«DOCUMENT_ROOT»].BX_ROOT.»/modules/main/classes/».$GLOBALS[«DBType»].»/favorites.php»);

Основные методы записи и чтения

function CUserOptions::SetOption($category, $name, $value, $bCommon=false, $user_id=false)

function CUserOptions::GetOption($category, $name, $default_value=false, $user_id=false)

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

2 титла на странице как?… Элементарно Ватсон…

Зачастую юные разработчики очень не внимательно относятся к документации тех средств с которыми они работают. В этом случае начинают появляться мутированные строки кода в web приложении. Это очень плохо, это просто очень очень плохо.

Конечно все через это прошли, и на клепали свою десятку, а то и сотню костылей дабы заработало сцуко.

Continue reading

Комплексные компоненты, маленький баг [bitrix api]

Если кто использует комплексные компоненты в битриксе то возможно сталкивался с тем что метод CComponentEngine::ParseComponentPath который делает практически всю работу по разбору и подмену для ЧПУ возвращает false.

Это происходит потому что может стоять лишний слеш, приведу правильный и не правильный массив описаний URL из документации.

Правильно :

$arUrlTemplates = array("list" => "index.php");

Не правильно:

$arUrlTemplates = array("list" => "/index.php");

Мелочь, а может отнять кучу времени. В доках оставил коммент, так что
надеюсь что вспоткунтся меньше людей.

Компоненты 2.0::Кеширование в компоненте

Хотел написать про кэширование в компонентах по просьбам читателей, но нашел вполне понятное описание в официальной документации . Если честно я его раньше почему-то не видел и не читал, все пришло с опытом.

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

Парсинг прямых ссылок

Задача состоит в том чтобы пропарсить контент и заменить все прямые ссылки вида

http://yunaliev.ru/

на http://yunaliev.ru/redirect.php?goto=http://yunaliev.ru/

В WordPress есть плагины для этого, которые делают все автоматически. Я не смотрел их код и как там реализовано не могу сказать, возможно чуть позже найду время для этого. В битриксе это нет к сожалению, по крайне мере я этого не нашел в стандартном API классе парсинга для форума и доп функциях для работы с текстом и html. Возможно решение не самое лучшее, но оно работает.

Continue reading

Кэш [bitrix api]

Хочу выложить маленький снипет кода для кэширования.

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

Этот код можно использовать если вы пишите на голом API битрикса обвертки для какого -то сложного функционала.

Continue reading

XML парсер битрикса [bitrix api]

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

Continue reading