gpt4 book ai didi

security - Grails - 默认的安全编码

转载 作者:行者123 更新时间:2023-12-02 14:14:22 25 4
gpt4 key购买 nike

我将数据提交给 Grails 中的 Controller 并进行了有效的 javascript 注入(inject)。我很惊讶,因为我认为默认设置是在参数进入 Controller 时对其进行编码。我可以轻松设置它,以便在所有参数到达 Controller 时对其进行编码吗?另外,我可以安全地做一个 GORM create与文本一起出现,或者这是否容易受到 SQL 注入(inject)的影响?我看到了in the guide如何防止 find 的 SQL 注入(inject)查询,但是对象创建呢?

我还看到有一个encodeAsHTML我可以在返回客户端的途中调用该方法进行编码。难道我不想在它进入数据库之前这样做,这样我只需要编码一次吗?谢谢!

最佳答案

用户输入

“清理您的输入”(或预编码或预转义)您的内容的想法是一个糟糕的想法。当您真正需要它时,它实际上并不能保护您,并导致各种设计难题。甚至 PHP 也最终放弃了这项技术。

最好通过适当的 API 正确处理数据,从而消除风险。例如,使用准备好的语句或带有内容占位符的语句绝对可以消除 SQL 注入(inject)。这种技术已经存在了很长时间(只要我使用 Java 和 SQL)。

Grails (GORM) 自动处理通过对象保存的任何内容的编码,包括设置单个属性、创建新对象并保存它,或通过 obj.properties = params 设置属性或类似的东西。

只要你使用的是 GORM,就没有 SQL 注入(inject)的风险。

内容存储

此外,将已经编码的信息存储在数据库中通常被认为是不正确的,因为该编码仅对给定的显示类型(例如 HTML)是正确的。如果您想使用 JSON 来呈现它,则 HTML 编码不正确。 XML 也略有不同,有时您也可能更喜欢纯文本。

相反,您通常应该将原始(UTF8 或类似)数据存储在数据库中,并在呈现以供显示时将其转换为正确的显示类型。请注意,它在渲染时会被转换——这并不一定意味着每次将其发送给客户端。您可以使用各种缓存技术来确保这种情况不会经常发生 — 包括 new cache plugin added to Grails 2.1 .

预防XSS Attacks

然而,一种强烈推荐的技术是将默认 View 编解码器设置为 HTML,使用 grails.views.default.codec option , 像这样:

grails.views.default.codec = 'html'

这只会影响 GSP,并且只会影响使用美元符号语法 ( ${foo}) 回显的内容。这使您可以灵活地使用标签(推荐的方式)或 <%= %> 覆盖此行为。一次性情况的语法。但是,它应该提供一个不错的捕获来防止一般的 XSS 攻击。

性能注意事项

最后一点:将内容编码为 HTML 是性能问题的担忧将被视为过早优化。机会是 非常高,任何性能瓶颈都将在其他地方,而不是在内容的编码中。首先构建您的应用程序 - 使用一个好的设计 - 然后在您可以对正在运行的应用程序进行基准测试和分析之后进行优化。

关于security - Grails - 默认的安全编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com