Отображение символов htmlspecials, которые оказались в поле базы данных utf8 - PullRequest
0 голосов
/ 17 января 2020

У меня есть поле базы данных utf8mb4, которое заканчивается htmlspecials, например 's

Это данные, введенные пользователем через форму html. Чтобы отобразить это поле в laravel blade, я использую {{ $profile }}, но он работает через функцию phps htmlspecialschars, чтобы предотвратить xss-атаку (https://laravel.com/docs/6.x/blade#displaying -data ), и поэтому я получаю вывод 's

Я знаю, что могу отображать их как неэкранированные данные, используя {!! $profile !!}, но так как это введенные пользователем данные, есть риск, что что-нибудь может быть получено.

Каков наилучший способ приблизиться к этому. Есть ли способ очистить его на уровне базы данных без потери или повреждения данных. Или есть лучший метод на уровне представления, избегающий рисков XSS?

Обратите внимание, что это данные из устаревшей базы данных.

Любая помощь приветствуется.

* ОБНОВЛЕНИЕ *

Я пытался использовать этот пакет htmlpurify: https://github.com/stevebauman/purify, который, кажется, делает то же самое, что и htmlspecialchars($value, ENT_QUOTES,'UTF-8',true);, например:

{{ Purify::clean($value) }} or {{ htmlspecialchars($value, ENT_QUOTES,'UTF-8',true) }}  

Однако, если у меня есть что-то вроде следующего в базе данных:

 Jobs & Work  

Тогда использование htmlpurify или htmlspecialchars, как в примере выше, все равно заканчивается как:

 Jobs & Work

1 Ответ

0 голосов
/ 17 января 2020

Вывод как неэкранированный, а затем через Purify, кажется, исправляет, например:

{!! Purify::clean($value) !!}

вместо:

{{ Purify::clean($value) }} 
...