2017-05-05 111 views
1

考虑应用:HTML输入转义 - 正确的方法是什么?

JS框架前端(例如AngularJS)和 REST API后端(例如杰克逊+弹簧安置)和一些HTML邮件模板。

从XSS全局保证整个系统的正确方法是什么?

第一件事是通过从输入字段中暴露HTML实体来保护前端的Web组件。

第二件事是阻止后端服务创建包含来自用户字段的恶意值的HTML模板(例如HTML邮件)。

想象一下包含Twitter风格标签的帖子/评论字段 - #tag会自动转换为指向someurl/tags/tag的超链接,这将通过在呈现时创建HTML标签来构建,然后,最终div会被附加到网站上。这种div的其他用途是将其嵌入到HTML邮件模板中,该邮件模板将通过SMTP发送给其他用户。

像这样的应用程序会有各种各样的领域。

我不想禁止用户通过正则表达式或后端验证从这些字段输入非字母数字字符。但是,这些输入将会以默认允许XSS攻击的方式暴露。

确保这类字段的正确方法是什么?是否应该在全球范围内使用Jackson过滤器/转换器/助手,将字段值发布到后端?还是应该每次都逃脱,当暴露在前台或邮件模板中的每个地方?

回答

2

你应该:

  • ,当他们被渲染逃脱前端的值。这应该使用全局实用程序或设置来完成。一些前端框架默认是这样做的(例如React)。
  • 在提交到后端时验证值并在适当的位置阻止字符。例如。名称字段可能不需要<>

你可以考虑:

  • 提供返回溢出值,如果有此要求的端点(即&escapeHtml=true)。我个人不是这方面的粉丝,但也许它适合你的情况。

我不建议:

  • 在后端存储之前逃离的所有数据。也许这是个人偏好,但为HTML呈现转义数据假设数据只会用于此类(例如,如果有人直接调用API将数据转换为CSV或其他格式的html,则会发生什么情况请勿应用)。
相关问题