#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. вы должны были написать так в своем ответе 🙂