导轨 – 如何用链轮混淆js文件

我最近不得不在我的Rails应用程序中混淆js资产。 我不想每个文件都手工完成,我想立即执行。 问题:没有太多的js混淆器运行轨道和可定制的。

最后我决定使用https://github.com/javascript-obfuscator/javascript-obfuscator

我强调,绝不打算在生产中使用它。 它严格限制开发,当我推动产品时,我会“耙资产:预编译”。

首先,我在Rails.root中安装了node + javascript-obfuscator

npm install --save-dev javascript-obfuscator 

在application.rb我补充说:

 Sprockets.register_postprocessor('application/javascript', Transformer.new) 

也在application.rb我补充说:

 class Transformer def call(input) return {data: input[:data]} unless input[:data].to_s.include?("to_be_compiled") stamp = Time.now.to_i.to_s File.open("tmp/obfuscate/tmp#{stamp}.js", "w+") do |f| f.write(input[:data]) end parameters = " --compact true" parameters += " --controlFlowFlattening true" parameters += " --controlFlowFlatteningThreshold 1" parameters += " --debugProtection true" parameters += " --debugProtectionInterval true" parameters += " --disableConsoleOutput true" parameters += " --domainLock 'localhost'" parameters += " --rotateStringArray true" parameters += " --seed #{stamp}" parameters += " --selfDefending true" parameters += " --stringArray true" parameters += " --stringArrayEncoding true" parameters += " --stringArrayThreshold 0.8" parameters += " --unicodeEscapeSequence true" order = 'node node_modules/javascript-obfuscator/bin/javascript-obfuscator.js tmp/obfuscate/tmp'+stamp+'.js --output tmp/obfuscate/tmp_out'+stamp+'.js'+parameters system(order) data = File.read("tmp/obfuscate/tmp_out"+stamp+".js") system("rm -rf tmp/obfuscate/*") return { data: data } end end 

这将捕获(post_processor)之后的js代码,它被Sprockets处理,将其写入tmp文件,在tmp_out js文件中将其混淆,并将其内容返回到pipe道。

我只是把这个限制在我的几个文件中。 所以你可以阅读,只有当正在处理的JavaScript包含string“to_be_compiled”时才会执行该进程。

请注意,我的文件是由Babel在Sprockets之前预先处理的js.jsx文件。 所以Babel使我可以添加选项:{评论:假,紧凑:真},它将删除所有评论\ n和\ t。 你会想确保你的js文件符合这个格式。

希望能帮助到你 !