Javascript Rails-如何使用sprocket动态混淆js文件
我最近不得不在我的rails应用程序中混淆js资产。我不想对每个文件都手工操作,而是想动态地操作。问题:没有太多的js模糊器与rails一起运行,并且是可定制的 最后我决定使用 我强调,在任何情况下,我都不打算将其用于生产。它严格限制了开发,当我推进到prod时,我将“rakeassets:precompile” 首先,我在Rails.root中安装了node+javascript模糊器Javascript Rails-如何使用sprocket动态混淆js文件,javascript,ruby-on-rails,node.js,obfuscation,sprockets,Javascript,Ruby On Rails,Node.js,Obfuscation,Sprockets,我最近不得不在我的rails应用程序中混淆js资产。我不想对每个文件都手工操作,而是想动态地操作。问题:没有太多的js模糊器与rails一起运行,并且是可定制的 最后我决定使用 我强调,在任何情况下,我都不打算将其用于生产。它严格限制了开发,当我推进到prod时,我将“rakeassets:precompile” 首先,我在Rails.root中安装了node+javascript模糊器 npm install --save-dev javascript-obfuscator 在applica
npm install --save-dev javascript-obfuscator
在application.rb中,我添加了:
Sprockets.register_postprocessor('application/javascript', Transformer.new)
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
在application.rb中,我还添加了:
Sprockets.register_postprocessor('application/javascript', Transformer.new)
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
这将在链轮处理js代码(post_processor)后捕获它,将其写入tmp文件,在tmp_out js文件中对其进行模糊处理,并将其内容返回到管道
我只是把这个限制在我的几个文件里。如您所知,只有在正在处理的javascript包含字符串“to_be_compiled”时,才会执行该过程
请注意,我的文件是由Babel在链轮之前预处理的js.jsx。因此,Babel使我能够添加选项:{comments:false,compact:true},用于删除所有注释,\n和\t。您需要确保js文件符合此格式
希望有帮助