PHP
#bitrix#php#security#ajax#csrf#sessid#Context#CUser

Bitrix: безопасный AJAX-обработчик (prolog_before.php, Context, sessid)

Минимально безопасный кастомный обработчик: только POST, check_bitrix_sessid(), авторизация через CUser, валидация ввода. По документации 1С-Битрикс (Context, Request).

Как использовать

  1. Разместите файл в /local/php_interface/ или подключаемом каталоге; вызывайте только через POST с передачей sessid.
  2. В форме/JS передавайте sessid из BX.bitrix_sessid() или из скрытого поля с bitrix_sessid.
  3. Для публичных действий авторизацию можно не требовать — но проверка sessid и POST обязательна.

Безопасный кастомный AJAX-обработчик для 1С-Битрикс: подключается через prolog_before.php, использует D7 Context и Request, проверку сессии check_bitrix_sessid() и при необходимости авторизацию через глобальный $USER. Соответствует рекомендациям по безопасности на dev.1c-bitrix.ru и API Context::getCurrent(), getRequest().

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

use Bitrix\Main\Context;

$request = Context::getCurrent()->getRequest();

// Только POST
if (!$request->isPost()) {
    die('Access denied');
}

// Обязательная проверка сессии Bitrix (CSRF)
if (!check_bitrix_sessid()) {
    die('Access denied');
}

// Если обработчик только для авторизованных пользователей
global $USER;
if (!$USER->IsAuthorized()) {
    die('Access denied');
}

$data = $request->getPost('data');
if ($data === null || $data === '') {
    die('Invalid input');
}

// Вывод только после проверки и при необходимости — экранирование
echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8');

Когда не требовать авторизацию

Если обработчик доступен гостям (например, отправка формы обратной связи), блок с $USER->IsAuthorized() можно убрать. Проверки метода (POST) и check_bitrix_sessid() оставляйте всегда.

Замечания

  • check_bitrix_sessid() проверяет параметр sessid из запроса; без него обработчик не вызывайте.
  • Context::getCurrent()->getRequest() — официальный D7 API; $request->isPost(), $request->getPost('data') — методы объекта Request.
  • Глобальный $USER (CUser) и $USER->IsAuthorized() описаны в документации главного модуля.