【发布时间】:2014-12-11 00:38:18
【问题描述】:
在研究如何使 JavaScript 源代码更安全时,我发现了很多“解决方案”。但大多数人都说同样的话; “不可能让你的源代码 100% 安全”、“尝试混淆”、“运行你的代码服务器端”等。在阅读了 stackoverflow 和其他网站上的很多帖子后,我得出的结论是缩小和混淆的组合可以完成这项工作(对我来说)。
但问题是:我们目前正在使用带有依赖注入的 soma.js,而我们设置它的方式不适用于混淆。基本上是这样的:
var session = function(id, sessionModel){
this._sessionmodel = sessionModel;
}
映射:
injector.mapClass("sessionModel", project.SessionModel, true);
然后混淆会将函数中的 sessionModel 重命名为例如“A”,但注入器在 SessionModel 上完成的映射仍然是“sessionModel”而不是“A”,这基本上会破坏代码。
我读过这篇关于同一主题 Dependency Injection and Code Obfuscation 的帖子,但它并没有为我的问题提供真正的答案,所以我决定写我自己的问题。
欢迎任何提示/提示/建议。 提前致谢。
编辑
您似乎可以通过将“提示”放入如下文件中来告诉 Yuicompressor 排除某些标识符:“identifier:nomunge, identifier2:nomunge”。
var session = function(id, sessionModel){
"sessionModel:nomunge";
this._sessionmodel = sessionModel;
}
我对此进行了测试,它确实有效,但这意味着您必须自己动手,如果您必须为每个脚本都这样做,这将是一项繁重的工作,尤其是当您有一个非常大的项目时..
会进一步研究,如果有新的弹出来更新这篇文章
编辑 2
已经有一段时间了,我每周只在这个 =S 上工作 1 天。 如前所述,您可以通过告诉它要排除哪些标识符来使其工作。 为此,我研究了正则表达式以编程方式获取“映射类”,因为手工操作实在是太疯狂了。
我基本上所做的不是手动输入每个提示,而是制作了一个标识符,例如“#nomunge”;并使用一个简单的 replaceregexp 任务找到它并将其替换为包含所有标识符的字符串。该字符串是通过加载脚本并使用令牌过滤器来构建的。
<target name="build hints">
<loadfile property="hints" srcFile="${temp.loc}/all.js">
<filterchain>
<tokenfilter delimoutput=":nomunge,">
<ignoreblank/>
<containsregex pattern="${regexp}"/>
</tokenfilter>
</filterchain>
</loadfile>
<echo message="${hints}"/>
</target>
<replaceregexp file="${temp.loc}/all.js"
match="#nomunge"
flags = "g"
replace = "target:nomunge, dispatcher:nomunge, injector:nomunge,${hints}"
/>
这似乎可以完成这项工作,现在......
【问题讨论】:
-
简单的一点是,客户端上的任何事情都不是 100% 安全的,因为您无法了解用户的环境。如果有疑问,或者如果对数据做任何稍微重要的事情,请始终先在服务器端验证它。
-
嘿,我不是想让我的代码 100% 安全,我只是想通过混淆来降低它的可读性。问题是它目前无法正常工作,我希望其他人知道解决方案。感谢您的意见。
标签: javascript dependency-injection obfuscation