В общем обнаружена неприятная недоработка в ФасетАПИ
Если в значение переменной фильтра передать любіе символы - то они полной строкой будут отображены в блока фасетов.
Для примера
В некоторых дополнительных модулях, к примеру , таких как facetapi_multiselect_form
Можно даже провести xss. Пропускает html
решение нашел пока только правкой url_processor_standard.inc
Функция normalizeParams(array $params, $filter_key = 'f')
Вопрос: Кто то с этим борется и как? Может кто то подскажет более оптимальное решение? Может как то более красиво можно сделать? Заранее спасибо.
Моя функция после правки такая:
<?php
public function normalizeParams(array $params, $filter_key = 'f') {
foreach(drupal_get_query_parameters($params, array('q', 'page'))[$filter_key] as $key=>$temp)
{
$val = explode(':', $temp);
$va = preg_replace('/[^0-9]/', '', $val[1]);
$va = $val[0].':'.$va;
$zzz[$filter_key][$key] = $va;
}
return $zzz;
//return drupal_get_query_parameters($params, array('q', 'page'));
}
?>
UPD
Обнаружена недоработка кода. Надо еще делать проверку на пустое значение "f"
UUPD
Вот так будет вроде бы более правильно. Кто хорошо шарит в регулярках? Как написать чтоб отфильтровывались и цифры после символов? Будет более корректное правило
<?php
public function normalizeParams(array $params, $filter_key = 'f') {
$mas = drupal_get_query_parameters($params, array('q', 'page'));
if(isset($mas[$filter_key])) {
foreach($mas[$filter_key] as $key=>$temp)
{
$val = explode(':', $temp);
$va = preg_replace('/[^0-9]/', '', $val[1]);
$va = $val[0].':'.$va;
$mas[$filter_key][$key] = $va;
} }
return $mas;
//return drupal_get_query_parameters($params, array('q', 'page'));
}
?>
Вложение | Размер |
---|---|
snimok_ekrana_ot_2017-11-23_23-25-27.png | 3.58 КБ |