GWT编译器优化:什么情况下是安全的?

4
以下编译器优化何时才安全/合理添加:
-XdisableClassMetaData
-XdisableCastChecking
compiler.stackMode
compiler.enum.obfuscate.names
CssResource.obfuscationPrefix
CompilerParameters.gwt.xml.*

在开发模式(或生产模式)下有些东西才有意义吗?它们是否存在安全漏洞?

1个回答

5
-XdisableClassMetaData - 当您不使用Object.getClass()方法时是安全的。
-XdisableCastChecking - 我个人不会使用它。但如果您完全不使用多态,可以尝试使用。
compiler.stackMode - "strip"用于生产环境,"emulated"用于开发环境
compiler.enum.obfuscate.names - 建议在生产环境中使用。
CssResource.obfuscationPrefix - 当您需要部分混淆css时使用。
对于最后一个问题,您可以在此处找到一些文档
只有compiler.enum.obfuscate.names会影响安全漏洞(因此在生产中将其设置为true)。希望能对您有所帮助。

4
我在生产中使用XdisableCastChecking,因为无论如何都应该在开发阶段检测到ClassCastException(它们不是某种代码异味的标志吗?),请注意,我的意思是保持原意不变但让语言更通俗易懂。 - Thomas Broyer
1
我认为你说的有道理,但只适用于小型项目。即使你有相当好的测试代码覆盖率,在中大型系统开发过程中,也无法尝试每个可能的执行路径。在生产环境中出现类转换异常要比没有类转换检查时引发奇怪的JavaScript错误要好得多,因为对于前者来说,更容易找出原因。 - Volodymyr Shtenovych
2
我的观点是,即使对于大型项目,风险也足够小。当然,你的情况可能有所不同。(我几乎可以确定Google使用XdisableCastChecking,否则他们为什么要添加它呢?而且他们拥有比我更大、更重要的用户群,规模更大的项目) - Thomas Broyer
这可能是真的,但 Google 对大多数项目都有几个级别的测试,而其他公司并非总是如此(至少对于我的经验来说)。 - Volodymyr Shtenovych

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接