我读了一篇关于跨站点脚本的文章,想知道我的应用程序是否容易受到这些类型操作的攻击。
我的应用程序中有一些模块需要详细描述。所以我使用summernote编辑器。在前面,为了正确显示文本,我必须使用{!!!}。在我的视图中使用它们来显示未扫描的数据有危险吗?
我的应用程序中有一些模块需要详细描述。所以我使用summernote编辑器。在前面,为了正确显示文本,我必须使用{!!!}。在我的视图中使用它们来显示未扫描的数据有危险吗?
是的。永远不要相信用户。永远不要依赖客户端逃逸。您需要在服务器端对此进行转义。
我使用的是Laravel Purifier,你可以用它来转义所有html标签,也可以定义哪些标签是允许的(例如,在文本字段上,应该允许<h1>
或<strong>
之类的东西,但你需要删除所有<script>
标签。
Laravel包括开箱即用的csrf令牌管理,因此您可以保存为跨侧附件。
编辑
正如TE在评论中所问,这就是你如何使用净化器:
安装后,您可以在配置中为转义定义多个配置(例如,如果您有不同的textares,其中一个要允许<h1>
,另一个不允许)。在HTML.Allowed =>
中编写所有允许使用的标记,在CSS.AllowedProperties =>
中设置允许的样式更改(例如color
)。
要转义输入,只需使用clean($input, 'Configurationname');
,其中Configurationname
是配置的名称。默认值为default
。
在视图中显示未显示的数据是很危险的,尤其是来自用户输入的数据。例如,用户可以通过在该页面上运行的表单保存JS脚本。
在无法使用{{}}防止XSS攻击的情况下,可以在将输入数据存储到数据库之前对其进行筛选。例如,使用regexp,您可以删除<script>
标记,也可以首先使用not_regex:pattern
验证请求输入。
除非您非常确定所显示的内容是完全安全的,否则不要使用{!!!}。请改用{{}}。还要确保您使用的是laravel的csrf令牌。