Cross site scripting битрикс как исправить

Цитата
Николай написал:
сканер безопасности на нее ругается как отключить.

Вы хотите отключить доп.опцию которую сделал программист? или чтобы сканер не ругался на этот файл?

Чтобы сканер не ругался нужно добавить страницу в исключения(!):
1) Админка — Настройки — Проактивная защита — Проактивный фильтр
2) Админка — Настройки — Проактивная защита — Веб-антивирус
3) Админка — Настройки — Проактивная защита — Защита от фреймов

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

При проверке обнаружена уязвимость Cross-Site Scripting

ID статьи: 154
, создана 28 окт 2016

При анализе уязвимостей было обнаружено проблемное место.


Решение

Внимание! Статья предназначена для пользователей решения, владеющими основами веб-разработки. Если вы не обладаете базовыми знаниями в программировании и хотите скрыть предупреждение, свяжитесь с нами через поддержку.

Обычно предупреждение отображается со следующим сопроводительным текстом:

Статический анализ уязвимостей обнаружил 1 проблемных мест Важно!

Cross-Site Scripting

Файл: /_!/bitrix/tmp/templates/__bx_preview/components/aspro/oneclickbuy/shop/template.php

53:  $arSkuProps  =  explode ( ";" , $_REQUEST [ 'OFFER_PROPS' ] )

55:  echo   serialize ( $arSkuProps )

Необходимые условия:

52:  if ( $_REQUEST [ 'OFFER_PROPS' ] )

Разрешено подключение файлов по URL (URL wrappers) Важно!

Эта опция php крайне противопоказана

Данный код не опасен и является частью решения.  Код отвечает за передачу свойств торговых предложений в заказ из формы покупки в 1 клик. 

При появлении предупреждения вы можете указать в настройках php следующий код: 

allow_url_include = Off Свернуть



Запустил сканер безопасности который выявил проблемы такого рода

Cross-Site Scripting
Файл: /home/bitrix/ext_www/sitename/bitrix/templates/market_column_1/bxready/library/elements/ecommerce_v1/element.php

303: echo $_COOKIE['_ym_uid']
Необходимые условия:
90: if($arElement['IBLOCK_SECTION_ID'] !== "869")
Аналогично:
311: echo $_COOKIE['_ym_uid']
319: echo $_COOKIE['_ym_uid']

и таких косяков статический анализатор нарыл 10 штук

Что это означает и как вы с этим боретесь?

ps: всем желаю крепкого здоровья, много любви и денег, а ещё не сталкиваться с битриксом

да читал — сейчас список рекомендаций напротив тестов
1. Используется проактивная защита. Минимальный уровень — «Стандартный» — Выявлены следующие недочеты:
1. Уровень безопасности административной группы не является повышенным — хотя я в настройках поставил уровень повышенный?
2. Административные учетные записи — защищены —
В разделе «Настройки > Пользователи > Группы пользователей > Администраторы (ID группы = 1) на вкладке «Безопасность» в списке «Предопределенные настройки уровня безопасности» должно быть установлено значение «Повышенный» (или выше).

Там же на вкладке «Параметры» в разделе «Пользователи в группе» проверьте, какие учетные записи включены в группу «Администраторы». Для них необходимо включить использование одноразовых паролей.

В разделе «Настройки > Проактивная защита > Одноразовые пароли» должно быть включено использование одноразовых паролей.
В форме редактирования параметров каждой административной учетной записи: «Настройки > Пользователи > Список пользователей» на вкладке «Одноразовые пароли» должно быть настроено и включено их использование.
Также рекомендуется, при необходимости, использовать повышенный уровень безопасности (и возможно одноразовые пароли) для учетных записей других привилегированных групп, таких как администраторы магазина, администраторы каталогов и т.п.

5. Настроены политики безопасности по работе с БД — 1. Пароль к БД не содержит знаков препинания
6. Отключен вывод ошибок и предупреждений посетителям проект -1 1. Включен вывод ошибок пользователям — как Отключить?
8. Проверена безопасность кода (статический анализ уязвимостей)
Файл: /extranet/pk/ajax_cell_change.php

PHP
1
2
3
4
Cross-Site Scripting
11: $spec_id = $_GET['spec_id']
48: echo $spec_id . $class . $val
?

Файл: /extranet/pk/ajax_cell_change.php

PHP
1
2
3
4
Cross-Site Scripting
12: $class = $_GET['class']
48: echo $spec_id . $class . $val
?

Файл: /extranet/pk/ajax_cell_change.php
Cross-Site Scripting
14:

PHP
1
2
3
 $val = $_GET['val']
48: echo $spec_id . $class . $val
?

Файл: /extranet/lector/ajax_del_publication.php
Cross-Site Scripting
90:

HTML5
1
 echo '</td><td><button type="button" class="pubbtn" href="javascript:void(0)" onclick="DelPublication(' . $arFields['ID'] . ',' . $_POST['user_id'] . ');">Удалить публикацию</button></td>'

Необходимые условия:
?
Файл: /extranet/lector/ajax_add_publication.php
Cross-Site Scripting
86:

PHP
1
echo '</td><td><button type="button" class="pubbtn" href="javascript:void(0)" onclick="DelPublication(' . $arFields['ID'] . ',' . $_POST['user_id'] . ');">Удалить публикацию</button></td>'

Необходимые условия:
?
Файл: /extranet/pk_admin/ajax_cell_change.php
Cross-Site Scripting

PHP
1
2
3
10: $spec_id = $_GET['spec_id']
31: echo $spec_id . $class . $val . "celn=" . $celn
?

Файл: /extranet/pk_admin/ajax_cell_change.php
Cross-Site Scripting
11:

PHP
1
2
3
$class = $_GET['class']
31: echo $spec_id . $class . $val . "celn=" . $celn
?

Файл: /extranet/pk_admin/ajax_cell_change.php
Cross-Site Scripting
13:

PHP
1
2
3
$val = $_GET['val']
31: echo $spec_id . $class . $val . "celn=" . $celn
?

Файл: /extranet/pk_admin/ajax_cell_change.php
Cross-Site Scripting

PHP
1
2
3
12: $celn = $_GET['celn']
31: echo $spec_id . $class . $val . "celn=" . $celn
?

Файл: /extranet/dispetcher/ajax_filter_aud.php
Cross-Site Scripting

PHP
1
2
3
4
5
15: $id = $_POST['elem_id']
48: echo 'Аудитория: <select id="' . $id . '">'
Необходимые условия:
19: if(CModule::includemodule("iblock"))
?

Файл: /extranet/dispetcher/ajax_contract_compile.php
Выполнение произвольных команд

PHP
1
2
7: $filename = "contract_" . $kaf_id_zup . "_" . $user_id . "_tutor"
23: exec('cd ' . $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/ulstu/pozhelanya.form/tex/; /usr/bin/pdflatex --shell-escape --synctex=1 -output-directory ' . $_SERVER['DOCUMENT_ROOT'] . '/upload/ulstu/student_course_contracts --interaction batchmode ' . $filename . '.tex',$r)

Аналогично:

PHP
1
2
28: print "<a href='/upload/ulstu/student_course_contracts/$filename.pdf'>Загрзите бланк договора ГПХ</a> "
?

Файл: /extranet/lector/pozhelanya/ajax_filter_aud.php
Cross-Site Scripting

PHP
1
2
3
4
5
15: $id = $_POST['elem_id']
48: echo 'Аудитория: <select id="' . $id . '">'
Необходимые условия:
19: if(CModule::includemodule("iblock"))
?

Файл: /extranet/lector/pozhelanya/ajax_contract_compile.php
Выполнение произвольных команд

PHP
1
2
116: $filename = "contract_" . $kaf_id_zup . "_" . $user_id . "_tutor"
143: exec('cd ' . $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/ulstu/pozhelanya.form/tex/; /usr/bin/pdflatex --shell-escape --synctex=1 -output-directory ' . $_SERVER['DOCUMENT_ROOT'] . '/upload/ulstu/student_course_contracts --interaction batchmode ' . $filename . '.tex',$r)

Аналогично:

PHP
1
2
148: print "<a href='/upload/ulstu/student_course_contracts/$filename.pdf'>Загрузите бланк договора ГПХ</a>"
?

Файл: /extranet/heads/shtaty/ajax_get_parent_hours.php
Cross-Site Scripting

PHP
1
2
8: $fields = getiblockelement($ib_id)
9: echo $fields['PROPERTIES']['CHASY']['VALUE']

Необходимые условия:

PHP
1
2
6: if(CModule::includemodule("iblock"))
?

Файл: /extranet/heads/shtaty/podpis_init_action.php
Cross-Site Scripting

PHP
1
2
3
4
5
5: $section_id = $_GET['id_raschet']
47: echo '</select><div id="hidden_fault' . $section_id . '" style="display:none;"><input id="fault' . $section_id . '" type="text" value="fault"></div>'
Необходимые условия:
3: if(CModule::includemodule("iblock"))
44: if($non)

Аналогично:

PHP
1
2
3
50: echo '</select><div id="hidden_fault' . $section_id . '" style="display:none;"><input id="fault' . $section_id . '" type="text" value="nofault"></div>'
56: echo '<input id="podsvetka' . $section_id . '" type="text" value=' . $je . '>'
?

Файл: /extranet/heads/shtaty/sotrudnik_init_action.php
Cross-Site Scripting

PHP
1
2
5: $kaf_id = $_GET['kaf_id']
7: echo ' <form action="" id="myform"> <table> <tr> <td>Фамилия:</td> <td><input type="text" name="SecName" id="sSecName' . $kaf_id . '" /><br></td></tr> <tr> <td>Имя:</td><td><input type="text" name="Name" id="sName' . $kaf_id . '" /> <br></td></tr> <tr> <td>Отчество:</td> <td> <input type="text" name="FazName" id="sFazName' . $kaf_id . '" /><br></td></tr> <tr> <td>Дата рождения:</td> <td> <input type="text" name="DOB" id="sDOB' . $kaf_id . '" /></td></tr> </table> </form> <div class="sotrsquare1" id=s_1_' . $kaf_id . '></div>'

Необходимые условия:

PHP
1
2
3
4
5
6
7
8
9
3: if(CModule::includemodule("iblock"))
?
Файл: /extranet/heads/shtaty/sotrudnik_search_ones.php
Cross-Site Scripting
16: $kaf_id = $_GET['kaf_id']
77: echo '<a href="javascript: submit_select_sotrudnik_Form('' . $kaf_id . '')">Выбрать</a>  </form>'
Необходимые условия:
4: if(CModule::includemodule("iblock"))
43: if((is_array($result->return->fls)) || ($result->return->fls->SecName))

Аналогично:

HTML5
1
80: echo '<form action="#n" name="theFormadd">  <label for="gender">Сотрудник не найден! </label><br>  <a href="javascript: submit_add_sotrudnik_Form('' . $kaf_id . '')">Добавить нового?</A>     <br>

Для добавления нового сотрудника заполните все поля формы! </form>’
?
Файл: /extranet/heads/shtaty/init_action.php
Cross-Site Scripting
8:

PHP
1
 echo '<a  title="Создать новый расчет штатов" class="sidebar-button" href="javascript:void(0)"  onclick="ShowForm_add_popup('' . $_GET['kaf_id'] . '', ' . $_GET['kaf_name'] . ' , ' . $_GET['creator_id_univ'] . ');">        <span class="sidebar-button-top"><span class="corner left"></span><span class="corner right"></span></span>         <span class="sidebar-button-content"><span class="sidebar-button-content-inner"> <i class="sidebar-button-create"></i><b>Новое распределение</b></span></span><span class="sidebar-button-bottom"><span class="center"></span><span class="corner right"></span></span></a> <div class="square2" id="' . $_GET['kaf_id'] . '">'

Необходимые условия:
3: if(CModule::includemodule(«iblock»))
?
Файл: /extranet/heads/shtaty/podpis_action.php
Cross-Site Scripting

PHP
1
2
3
4
10: $KAF_ID_ZUP = $_GET['kaf_id']
284: echo "Кафедра, для которой создаётся папка: " . $KAF_ID_ZUP
Необходимые условия:
3: if(CModule::includemodule("iblock"))  что исправить?

9. Проверка сканером безопасности 1

Отсутствуют критические замечания в разделе «Настройки > Проактивная защита > Сканер безопасности». Информация о результатах сканирования не является устаревшей.
Как тестировать

Платформа имеет встроенный набор автотестов для проверки на предмет наличия распространенных уязвимостей. Часть тестов проводится с внешних серверов 1С-Битрикс. Для безопасной работы веб-проекта все критические угрозы должны быть устранены.

В разделе «Настройки > Проактивная защита > Сканер безопасности» не должно быть обнаружено критических угроз.
Как решить? — напишите напротив каждого пункта?

Проблема модуля Битрикс

При сдаче одного из проектов по программе “Монитор качества” Битрикс, мы столкнулись с ошибкой в бесплатном модуле “Модуль приема платежей Тинькофф Банк”, монитор качества пожаловался на ошибку уязвимости “Проверена безопасность кода (статический анализ уязвимостей) (QSEC0080)”. А так как модуль это официальный от Тинькофф, мы во время работы над проектом не стали сразу исправлять, хотя и писали в службу поддержки. Пока проект делался, было не актуально, но при сдаче проекта, решили ее исправить и выложить решение, чтобы помочь другим.

Решение проблемы «Модуль приема платежей Тинькофф Банк»

Мы также вам можем помочь с техническим сопровождением сайтов на 1С Битрикс

Всегда будем рады вашему обращению

Заказать техподдержку

При проверке вы увидите такое сообщение в “Мониторе качества”

Предлагается решение:


Межсайтовый скриптинг (XSS) уязвимость возникает тогда, когда данные, принятые от пользователя, выводятся в браузер без надлежащей фильтрации. Уязвимость может быть использована для изменения вида HTML страниц уязвимого сайта в контексте браузера целевого пользователя, похищения COOKIE данных браузера целевого пользователя, с последующим внедрением в его сессию, под его учетной записью.

Как защищаться

Использовать htmlspecialcharsbx. Параметры тегов с динамическими значениями ограничивать двойными кавычками. Принудительно добавлять протокол (http), где это необходимо, для значений параметров тегов, таких как href или src.


В подробном отчете следующий список ошибок

Вот перечень ошибок в модуле:


Файл: /personal/order/success.php 
Cross-Site Scripting 
15: $orderID = $_REQUEST['OrderId'] 
29: echo sprintf(getmessage("SALE_TINKOFF_SUCCESS_TEXT"),$orderID,$status,$statusPageURL) 
Необходимые условия: 
26: if($order) 

Файл: /personal/order/success.php 
Cross-Site Scripting 
28: $statusPageURL = sprintf('%s/%s',getpagepath('personal/orders'),$orderID) 
29: echo sprintf(getmessage("SALE_TINKOFF_SUCCESS_TEXT"),$orderID,$status,$statusPageURL) 
Необходимые условия: 
26: if($order) 

Файл: /personal/order/success.php 
Cross-Site Scripting 
15: $orderID = $_REQUEST['OrderId'] 
31: echo sprintf(getmessage("SALE_TINKOFF_FAIL_TEXT"),$orderID) 
Необходимые условия: 
30:  else  

Файл: /personal/order/failed.php 
Cross-Site Scripting 
15: $orderID = $_REQUEST['OrderId'] 
29: echo sprintf(getmessage("SALE_TINKOFF_SUCCESS_TEXT"),$orderID,$status,$statusPageURL) 
Необходимые условия: 
26: if($order) 

Файл: /personal/order/failed.php 
Cross-Site Scripting 
28: $statusPageURL = sprintf('%s/%s',getpagepath('personal/orders'),$orderID) 
29: echo sprintf(getmessage("SALE_TINKOFF_SUCCESS_TEXT"),$orderID,$status,$statusPageURL) 
Необходимые условия: 
26: if($order) 

Файл: /personal/order/failed.php 
Cross-Site Scripting 
15: $orderID = $_REQUEST['OrderId'] 
31: echo sprintf(getmessage("SALE_TINKOFF_FAIL_TEXT"),$orderID) 
Необходимые условия: 
30:  else  

Чтобы исправить эти все ошибки одним разом, надо открыть файл:


/bitrix/modules/tinkoff.payment/install/sale_payment/tinkoff/result.php

Найти часть кода


if (!$order) { 
    $arFilter = array( 
        "ACCOUNT_NUMBER" => $orderID, 
    ); 
    $accountNumberList = CSaleOrder::GetList(array("ACCOUNT_NUMBER" => "ASC"), $arFilter); 
    $order = $accountNumberList->arResult[0]; 
} 
 
if ($order) { 
    $status = $_REQUEST['Success'] == 'true' ? GetMessage("SALE_TINKOFF_SUCCESS") : GetMessage("SALE_TINKOFF_FAIL"); 
    $statusPageURL = sprintf('%s/%s',GetPagePath('personal/orders'), $orderID); 
    echo sprintf(GetMessage("SALE_TINKOFF_SUCCESS_TEXT"), $orderID, $status, $statusPageURL); 
} else { 
    echo sprintf(GetMessage("SALE_TINKOFF_FAIL_TEXT"), $orderID); 
} 

Его заменяем на:


if (!$order) { 
    $arFilter = array( 
        "ACCOUNT_NUMBER" => $orderID, 
    ); 
    $accountNumberList = CSaleOrder::GetList(array("ACCOUNT_NUMBER" => "ASC"), $arFilter); 
    $order = $accountNumberList->arResult[0]; 
} 

if ($order) { 
    $status = $_REQUEST['Success'] == 'true' ? GetMessage("SALE_TINKOFF_SUCCESS") : GetMessage("SALE_TINKOFF_FAIL"); 
    $statusPageURL = GetMessage("SALE_TINKOFF_SUCCESS_TEXT_NEW_URL", Array("#URL1#" => GetPagePath('personal/orders'), "#URL2#" => $orderID)); 
    echo GetMessage("SALE_TINKOFF_SUCCESS_TEXT_NEW", Array("#orderID#" => $orderID, "#status#" => $status, "#statusPageURL#" => $statusPageURL)); 
} else { 
    echo GetMessage("SALE_TINKOFF_FAIL_TEXT_NEW", array("#orderID#"=>$orderID) ); 
}  

Так как мы заменили переменные языка, вам нужно будет также добавить переменные в ваш языковой файл


/bitrix/modules/tinkoff.payment/install/sale_payment/tinkoff/lang/ru/result.php

следующие переменные:


$MESS['SALE_TINKOFF_SUCCESS_TEXT_NEW'] = "Заказ с номером #orderID# оплачен #status# 
Состояние заказа можно узнать на <a href="#statusPageURL#">странице заказа"; $MESS['SALE_TINKOFF_SUCCESS_TEXT_NEW_URL'] = "#URL1#/#URL2#"; $MESS['SALE_TINKOFF_FAIL_TEXT_NEW'] = "Заказ с номером #orderID# не найден";

И все, после проверки ошибка исчезнет.

Понравилась статья? Поделить с друзьями:
  • Нет imei украли айфон как найти
  • Как найти своих клиентов начинающему мастеру маникюра
  • Как найти магнитный азимут линии
  • Колесо фортуны в 1xbet как найти
  • Как найти кубометр фундамента