Очистка XSS в kohana 3.1

#php #kohana

#php #kohana

Вопрос:

Я вижу документацию по использованию xss clean для старой версии kohana http://docs.kohanaphp.com/general/security

Но как добиться этого в kohana 3.1 с помощью htmlpurifier и альтернативы

 $this->input->get('my_var','default_value', true);
  

Комментарии:

1. Вам никогда не нужно изменять данные из get. Вам необходимо очистить данные во время вывода с помощью HTML::chars() . И получите доступ к переменным get с помощью $_GET напрямую.

2. $this->request->query() так лучше 😉

3. @biakaveron: или $this->request->param() . По какой-то причине никогда не использовал его. Виноват.

4. @^ Я использую ckeditor. Итак, я хочу разрешить пользователю иметь некоторые html-теги. но с помощью query это будет удалено правильно?

Ответ №1:

Расмус предложил удалить черный список XSS из Kohana, чтобы избежать вывода с помощью htmlspecialchars() - HTML::chars() или использовать HTMLPurifier на случай, если вам действительно нужно ввести немного HTML.

Начиная с версии 3.1, в системе безопасности по умолчанию нет xss_clean() метода, вам придется установить модуль shadowhand HTMLPurifier от shadowhand для защиты входных строк (добавив подмодуль из github, поместив его в модули и включив в bootstrap).

Сам модуль переопределит класс безопасности по умолчанию и добавит xss_clean() метод, который использует HTMLPurifier для экранирования. Существует также конфигурационный файл для модуля, где вы можете настроить все на уровне вашего приложения. Экранирование входных данных не выполняется «автоматически» по многим причинам; накладные расходы, согласованность и т.д.

Поскольку запрос был в значительной степени переписан в этой версии, чтобы соответствовать RFC 2616 и получить еще более мощный HMVC, вы будете обращаться к переменным строки запроса с помощью Request::query() [ $this->request->query() внутри ваших контроллеров ], но с этой стороны по-прежнему не выполняется экранирование (каждый запрос может иметь свои собственные заголовки, POST, GET и т.д.)

Самый простой способ избежать текущих переменных POST — это выполнить:

 $safe = Arr::map('Security::xss_clean', $this->request->post());
  

P.S.
Не обращайте слишком много внимания на ерунду, написанную здесь о $this->request->param() , это только для доступа к параметрам соответствующего маршрута, а не к вашим переменным GET или POST.

Ответ №2:

Модуль HTMLPurifier для фреймворка Kohana: https://github.com/shadowhand/purifier

Загрузите модуль в bootstrap и протестируйте:

 $my_test = '<a href="#" onclick="window.location.href = 'http://google.com'"></a>';
echo Security::xss_clean($my_test);
  

Комментарии:

1. вы действительно знаете php, что вы передаете этому методу?

2. echo Security::xss_clean($my_test);

3. вы должны были написать так в своем ответе 🙂