Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTML输入转义-什么';这是正确的方法吗?_Java_Angularjs_Jackson_Xss - Fatal编程技术网

Java HTML输入转义-什么';这是正确的方法吗?

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的超链接,该超链接将在呈现

考虑申请:

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过滤器/转换器/转义器全局执行此操作?或者,当暴露在前端或邮件模板中的每个位置时,是否应该每次都进行转义?

您应该:

  • 渲染前端上的值时对其进行转义。这应该通过全局实用程序或设置来完成。一些前端框架默认会这样做(例如React)
  • 在提交到后端时验证值,并在适当的情况下防止使用字符。例如,名称字段可能不需要
你可以考虑:

  • 提供在请求时返回转义值的端点(即
    &escapeHtml=true
    )。我个人并不喜欢这个,但也许它适合你的情况
我不建议:

  • 在存储到后端之前转义所有数据。这可能是个人偏好,但转义数据用于html呈现是假定数据仅用于此目的(例如,如果有人直接调用API将数据转换为CSV或html转义不适用的其他格式,会发生什么情况)