当前位置: 首页 > 知识库问答 >
问题:

将spring表单htmlEscape属性行为迁移到Thymeleaf

娄振
2023-03-14

我目前正在从事一个Spring MVC项目,我们正在将所有jsp文件迁移到thymeleaf。我知道spring表单标记有一个htmlEscape属性,在呈现时会转义用户输入,例如当用户提交无效表单并且用户输入被绑定到表单时。例如:

 <form:form method="post" id="someForm" modelAttribute="${commandName}" htmlEscape="true" autocomplete="off">
        <div class="form-group">
            <input type="text" id="username" value="<c:out value='${inputValue}'/>"/>
            <input type="password" id="password" />
            <input type="submit" class="btn btn-lg btn-block-sm" value="<spring:message code="header.content.close"/>" tabindex="0" />
            <input type="hidden" name="_eventId" value="continue"/>
        </div>
</form:form>

这适用于输出转义,这是在处理模板进行渲染时在服务器端发生的事情。

这可以防止xss攻击的一个例子是,如果用户输入<代码>

有没有一种标准的方法可以在胸腔中实现同样的功能?

我看到了一些可能性:

  1. 这已经内置在胸腺中了。

我知道spring thymeleaf包使用unbecase对一些属性执行输出转义,例如SpringValueTagProcessor,我认为它会对th:value属性转义输出。然而,我不确定这是等效的,并且担心如果这样做的方式只能部分缓解spring表单htmlEscape完全缓解的问题,那么可能会有未填补的安全漏洞。

如果是这样,请解释这如何涵盖与htmlEscape相同的情况。

如果是,什么?

如果是,请解释。

这里有一篇简短的文章,让你了解我关于Spring形式行为的意思。关于本文,似乎在web中将defaultHtmlEscape全局设置为false。xml只覆盖HtmlEscapeTag的默认值,该值似乎仅适用于spring标记。因此,我不认为该解决方案可以应用于thymeleaf。

如果你能给我指路,我将不胜感激。

共有2个答案

柳宾实
2023-03-14

最后,我在这里得到了关于Thymeleaf项目GitHub讨论的答案,我将对此进行总结和澄清:

超文本标记语言转义默认内置于Thymeleaf表单元素中。

th:输入处理器源代码证明了这一点。注意getDisplayString的使用,它通过org执行html输出转义。springframework。网状物util。HtmlUtils公司

我查看并手动检查了getDisplayString的所有用法,其中htmlEscape为false,可以验证在这些情况下,输出是在显示之前转义的HTML(在SpringErrorTagProcessor和SpringUserRorStagProcessor的情况下),它们不输出任何要转义的内容(SpringSelectedValueComparator返回布尔值),或者表达式是绑定对象(SPELVariableExpressionEvaluator)。

有关相应更新的文档的信息,请参阅GitHub问题thymeleaf/thymeleaf-docs#84。

侯博裕
2023-03-14

如果您使用th: text,输出文本的转义会自动完成。在极少数情况下,如果您想使用未转义的文本,您可以使用th: utext,但您必须注意安全隐患。有关更多信息,请参阅将thymeleaf变量作为html代码而不是文本处理。

 类似资料:
  • 我从获得了以下连接池配置。从Spring2开始,默认值为。如何将以下属性迁移到hikari挂件?我找不到他们:

  • 我正在将一个项目从spring Boot1.5.10迁移到spring Boot2.0.3,我安装了依赖项“spring-boot-properties-migrator”,它告诉我属性改变了,一切都很好,但现在我出现了这个错误,我不知道如何修复它,我尝试了所有的方法。 上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.beanCreat

  • 我有一个使用log4j的java应用程序,配置如下。 log4j.properties 我想使用与上面相同的配置迁移到log4j2。尚未找到任何与log4j2属性配置文件相关的内容,因为最近包含了此支持。 谁能帮我弄清楚我的log4j2怎么样。属性文件是否具有上述相同的配置?

  • 尝试了以下方法:1)使用spring kafka注释(@kafkalistener),但它不允许我们控制轮询。2)创建了“ConcurrentMessageListenerContainer”,并且setupMessageListener将记录添加到队列中进行轮询。这给了我们对使用者的控制。 我想知道,我的方向是正确的吗?使用Spring-Kafka有什么更好的解决方案来达到上述要求呢?

  • 我正在使用OpenJDK 12中的Nashorn JS引擎。纳肖恩似乎遭到了反对。我正在寻找可用的替代方案。我找到了GraalVM,但我不确定这是不是最好的。如何从Java执行GraalVM JavaScript?你有什么例子吗? Nashorn用的是Java: 在Nashorn中,我创建了一个WrappedMongoDatabase,它扩展了AbstractJSObject。在那里,我添加了一些

  • 我有一个基于Java/Spring的web应用程序,它使用Oracle11g。当前,用户在登录时直接通过用户名/密码对系统表进行身份验证。 这不得不改变,所以我们创建了一个(常规的)新表,在那里存储所有的用户数据。我们将所有现有密码插入到新创建的表中。然而,密码似乎是以本站点描述的方式加密/散列的 我使用了ora_hash和dbms_obfuscation_toolkit.desdecrypt,但