ska*_*kaz 1 security xss grails groovy sql-injection
我将数据提交到Grails中的控制器并进行了javascript注入.我很惊讶,因为我认为默认是在参数进入控制器时对其进行编码.我可以轻松设置它,以便所有参数在到达控制器时进行编码吗?另外,我可以安全地create
使用文本进行GORM ,或者是否容易受到SQL注入攻击?我在指南中看到如何为find
查询阻止SQL注入,但是对象创建呢?
我还看到有一种encodeAsHTML
方法可以在返回客户端的路上调用编码.我不想在它进入数据库之前这样做,这样我只需编码一次吗?谢谢!
"清理您的输入"(或预先编码或预先转发)您的内容的想法是一个可怕的想法.当你真正需要它时,它实际上并没有保护你,并导致各种设计难题.甚至PHP终于抛弃了这项技术.
通过正确的API正确处理数据总是更好,这样可以消除风险.例如,使用带有内容占位符的预处理语句或语句,绝对可以消除SQL注入.这种技术已经存在了很长时间(只要我使用Java和SQL).
Grails(GORM)自动处理对通过对象保存的任何内容进行编码,包括设置单个属性,创建新对象并保存,或通过obj.properties = params
类似设置属性.
只要您使用GORM,就不存在SQL注入的风险.
此外,它通常被认为是不正确的存储在数据库中的已编码的信息,作为编码将仅对于一个给定的显示类型(诸如HTML)正确.如果您想使用JSON渲染它,则HTML编码不正确.XML也略有不同,有时您也可能更喜欢纯文本.
相反,你一般应存储在数据库中的原始(UTF8或类似)的数据,并将其转换为当它被渲染为显示正确的显示类型.请注意,它在渲染时会被转换- 这并不一定意味着每次将其发送到客户端.您可以使用各种缓存技术来确保不会经常发生这种情况 - 包括添加到Grails 2.1的新缓存插件.
但是,一种强烈推荐的技术是使用grails.views.default.codec
选项将默认视图编解码器设置为HTML ,如下所示:
grails.views.default.codec = 'html'
Run Code Online (Sandbox Code Playgroud)
这只会影响GSP,并且只使用美元符号语法(${foo}
)回显内容.这使您可以灵活地使用标记(推荐方式)或<%= %>
一次性情境的语法来覆盖此行为.但是,它应该提供一个很好的捕获来防止XSS攻击.
最后一点注意事项:将HTML内容编码为性能问题的内容编程问题将被视为过早优化.任何性能瓶颈都可能存在于其他地方,而不是内容的编码,这可能性非常高.首先构建应用程序 - 使用良好的设计 - 然后在对基准测试运行的应用程序进行基准测试和分析后进
归档时间: |
|
查看次数: |
1232 次 |
最近记录: |