У меня сейчас странная проблема, и я ищу любую информацию о том, как с этим справиться.
В настоящее время я принимаю ввод HTML с помощью редактора Basecamp Trix.
Когда я отправляю ввод в свое приложение Laravel, он сохраняется в моей базе данных как:
<div><script>alert('test');</script></div>
Однако проблема в том, что когда я вставляю это в свойство Vue с помощью блейда Laravel, оно каким-то образом фактически преобразует его обратно в действительный HTML:
<reply :data-reply="{{ $reply }}"></reply>
Результат:
Кажется, что Laravel преобразует теги script в действительный HTML, используя операторы Blade echo?
Мой вид:
{{ $reply }}
Результат:
{"id":63,"created_at":"2017-09-07 13:30:53","updated_at":"2017-09-07 13:35:05","user_id":1,"body":"<div><script>alert('test');<\/script><\/div>","options":null}
Проблема в том, что я не могу дезинфицировать это, потому что данные HTML на самом деле экранированы в моей базе данных, но когда Laravel преобразует мой ответ в JSON, он фактически не экранирует теги script и фактически запускается во Vue при использовании директивы v-html
.
Я знаю, что не должен принимать пользовательский ввод при использовании директивы v-html
, но мне нужна поддержка HTML для ответов, и я не могу дезинфицировать уже экранированный HTML в своем приложении Laravel.
У кого-нибудь есть идеи, как я могу каким-то образом очистить контент Трикс?
<reply :data-reply="{!! $reply !!}"></reply>
? - person Quezler   schedule 07.09.2017