我目前有一个奇怪的问题,我正在寻找有关如何处理这个问题的任何见解。
我目前正在使用Basecamp Trix 编辑器接受 HTML 输入。
当我将输入发送到我的 Laravel 应用程序时,它会保存到我的数据库中:
<div><script>alert('test');</script></div>
然而,问题在于,当我使用 Laravel 的刀片将其插入 Vue 属性时,它实际上以某种方式将其转换回有效的 HTML:
<reply :data-reply="{{ $reply }}"></reply>
结果:
似乎 Laravel 使用刀片回显语句将脚本标签转换为有效的 HTML?
我的观点:
{{ $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 时,它实际上取消了脚本标签,并且在使用v-html
指令时它实际上是在 Vue 中运行的。
我知道在使用指令时我不应该接受用户输入v-html
,但我需要 HTML 支持来回复,而且我无法在我的 Laravel 应用程序中清理已经转义的 HTML。
有谁知道如何以某种方式对 Trix 的内容进行消毒?