Java HTML输入转义-什么';这是正确的方法吗?
考虑申请: JS框架前端(例如AngularJS)和 RESTAPI后端(例如Jackson+SpringREST)和一些HTML邮件模板 从XSS全局保护整个系统的正确方法是什么 第一件事是保护前端上的web组件不从输入字段中暴露HTML实体 第二件事是防止后端服务创建HTML模板(例如HTML邮件),这些模板将包含来自用户字段的恶意值 想象一下,像post/comment这样的字段将包含Twitter样式的标记-#标记将自动转换为指向someurl/tags/tag的超链接,该超链接将在呈现时通过创建HTML标记来构建,然后,最后的div将附加到网站。这种div的其他用途是将其嵌入HTML邮件模板中,该模板将通过SMTP发送给其他用户 像这样的应用领域会有很多 我不想禁止用户通过regex或后端验证从这些字段输入非字母数字字符。但是,此输入将以默认允许XSS攻击的方式公开 什么是保护这类油田的正确方法?在将字段值发布到后端时,是否应该使用Jackson过滤器/转换器/转义器全局执行此操作?或者,当暴露在前端或邮件模板中的每个位置时,是否应该每次都进行转义?您应该:Java HTML输入转义-什么';这是正确的方法吗?,java,angularjs,jackson,xss,Java,Angularjs,Jackson,Xss,考虑申请: JS框架前端(例如AngularJS)和 RESTAPI后端(例如Jackson+SpringREST)和一些HTML邮件模板 从XSS全局保护整个系统的正确方法是什么 第一件事是保护前端上的web组件不从输入字段中暴露HTML实体 第二件事是防止后端服务创建HTML模板(例如HTML邮件),这些模板将包含来自用户字段的恶意值 想象一下,像post/comment这样的字段将包含Twitter样式的标记-#标记将自动转换为指向someurl/tags/tag的超链接,该超链接将在呈现
- 渲染前端上的值时对其进行转义。这应该通过全局实用程序或设置来完成。一些前端框架默认会这样做(例如React)
- 在提交到后端时验证值,并在适当的情况下防止使用字符。例如,名称字段可能不需要
- 提供在请求时返回转义值的端点(即
)。我个人并不喜欢这个,但也许它适合你的情况&escapeHtml=true
- 在存储到后端之前转义所有数据。这可能是个人偏好,但转义数据用于html呈现是假定数据仅用于此目的(例如,如果有人直接调用API将数据转换为CSV或html转义不适用的其他格式,会发生什么情况)