我创建了一个联系页面,供用户添加消息。我使用表格tinymce
。如何防止Laravel 4注入js?
问题是我在哪里显示所有消息。我无法使用{{{ $message->body }}}
,因为它将html标记转换为字符串。如果我使用{{ $message->body }}
,它会执行JavaScript
,这可能很危险。
如果包含脚本标记,我需要某些内容才能通过表单验证。那么如何在Laravel 4中做到这一点?有没有“laravelic”的方式来做到这一点?
我创建了一个联系页面,供用户添加消息。我使用表格tinymce
。如何防止Laravel 4注入js?
问题是我在哪里显示所有消息。我无法使用{{{ $message->body }}}
,因为它将html标记转换为字符串。如果我使用{{ $message->body }}
,它会执行JavaScript
,这可能很危险。
如果包含脚本标记,我需要某些内容才能通过表单验证。那么如何在Laravel 4中做到这一点?有没有“laravelic”的方式来做到这一点?
我想你可以试试这个(这里看它User Contributed Notes):
$tagsToStrip = array('@<script[^>]*?>.*?</script>@si'); // you can add more
$message = preg_replace($tagsToStrip, '', $message->body);
当然,所有用户提供的数据应该被转义或纯化。为了避免输出,可以使用三重大括号语法:
Hello,{{{$ name}}}。
最好的办法是使用HTML过滤包Laravel 4像https://github.com/mewebstudio/Purifier
这允许您指定允许的HTML标签和属性(INC CSS样式),并剔除任何不必要的标签(公司)。
您还可以使用其他字段的常规输入验证,以确保它们只是例如阿尔法
不要重新发明轮子。使用[** HtmlPurifier **](https://packagist.org/packages/mews/purifier) – itachi
'{{$ message-> body}}'真的执行JavaScript吗?因为当我写'hello world '和查看来源,'<' and '>'分别转换为'<'和'$ gt;'。 – Razor