FacetAPI и фильтрация входных данных

Главные вкладки

Аватар пользователя t-m-p t-m-p 24 ноября 2017 в 0:33

В общем обнаружена неприятная недоработка в ФасетАПИ
Если в значение переменной фильтра передать любіе символы - то они полной строкой будут отображены в блока фасетов.
Для примера

ффф

В некоторых дополнительных модулях, к примеру , таких как 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" Smile

UUPD

Вот так будет вроде бы более правильно. Кто хорошо шарит в регулярках? Как написать чтоб отфильтровывались и цифры после символов? Будет более корректное правило Smile

<?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.png3.58 КБ