如何在nodejs浏览器中的HTTP GET模糊客户端js文件?
我在nodejs中有明确的应用:
var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users);
我的浏览器的js文件在/公共文件夹。 我想在运行时自动对它们进行混淆,因此很难在浏览器中阅读它们。 是否有可能以某种方式调整这个应用程序设置?
您可以使用命令行实用程序来混淆代码,如下所示:
app.use('/javascripts',function(req,res,next){ if (process.env.OBFUSCATE != 1){ next(); } var cmd = "java -jar ./gcc/compiler.jar ./public/javascripts" + req.url;// + "> ./tmp" + req.url + ".tmp"; exec(cmd,function (error, stdout, stderr){ res.write(stdout); res.end(); if(error !== null){ console.log('exec error: ' + error); } }); });
不要在运行时混淆。 创build一个构build步骤,将您的代码混淆并在生产中提供混淆代码。
安装UglifyJS:
npm install -g uglify-js
然后,您可以运行以下命令来混淆您的代码:
uglifyjs < src/script.js > dist/script.js
或者,安装grunt和uglify插件:
npm install -g grunt-cli
npm install --save-dev grunt grunt-contrib-uglify
在项目的根目录下创build一个名为“Gruntfile”的文件,内容如下:
'use strict'; module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.initConfig({ uglify: { all: { files: { 'public/scripts.js': 'src/**/*.js' } } } }); grunt.registerTask('default', ['uglify']); };
从项目的任何地方运行grunt
来混淆你的代码。 使用<script src="scripts.js"></script>
更新public/
index.html
文件来加载混淆的连接脚本。
如果顺序很重要,请按顺序列出您的脚本:
files: { 'public/scripts.js': [ 'src/1.js', 'src/3.js', 'src/2.js' ] }
所以,当用户发送给浏览器时,实际上并不能让用户阅读你的javascript。 你可以使它变得非常困难,但是一个坚定的用户总是能够通过自动化工具和手工劳动的组合将其转化为可读的东西。
总之,JavaScript没有DRM(或者任何代码)。 如果您想保护您的脚本中的知识产权,请在其上提供版权声明。 如果你认为有人偷了他们,跟一个律师谈谈。
缩小你的JavaScript值得肯定是值得的,但在我看来,混淆它们的唯一原因是因为你的笨老板告诉你。
如果您想对其进行混淆,请查看以下问题的答案: 如何混淆(保护)JavaScript?
请注意,混淆是相当昂贵的,所以你真的不想在运行时做到这一点。 你应该简单地将它应用到你的JavaScripts,当他们改变使用像Grunt或鲍尔 (个人我宁愿咕噜)的构build工具。 这些系统有这样的插件来执行混淆。
您可以在节点应用程序中使用UglifyJs,并使用其API执行所需的操作。 查看他们的文件进一步的细节。
来自Unglify文档的示例
var jsp = require("uglify-js").parser; var pro = require("uglify-js").uglify; var orig_code = "... JS code here"; var ast = jsp.parse(orig_code); // parse code and get the initial AST ast = pro.ast_mangle(ast); // get a new AST with mangled names ast = pro.ast_squeeze(ast); // get an AST with compression optimizations var final_code = pro.gen_code(ast); // compressed code here
PS人们指出,这是缓慢的,等等,当然都是正确的,但嘿,如果你在这里需要它,我只是不明白为什么判断和张贴意见,以回应一个明确的问题。
我的提示很容易被绕过 ,但不必小心,我们可以被困住。 它只是客户端部分,不是nodejs部分。
只能实时查看页面
您可以使用JavaScriptreplace或删除脚本标记 ,以便在页面的实时视图中隐藏此标记 。 但是,如果你直接看networking,你可以很容易地看到JavaScript文件/代码。
<div id="RemoveMe0"> <script type="text/javascript"> //This code it is hidden to live view. var my_var = 5 + 5; $('#RemoveMe0').remove(); //or document.getElementById("RemoveMe0").innerHTML = ""; </script> </div>
对于包含javascript:
<div id="RemoveMe1"> <script type="text/javascript" src="Javascript/MyJS.js"></script> <script> //Your include it is hidden to live view. $('#RemoveMe1').remove(); </script> </div>
只有直接的看法
把你的文件放在一个HTML文件(myfile.js到myfile.html)中,就像这样直接查看你可以执行一个javascript函数。
function Hello() { alert("Hello"); } Hello(); //<script>document.body.innerHTML = "";</script>
结论:
对于这个提示,重命名文件或使用.htaccess。 就像第一个提示,如果你看networking,你会看到完整的文件。
或者minize /parsing你的JS
你可以使用这样的工具:
- 最小化你的js :这个工具使用eval函数,并尝试复杂你的脚本。
- Javascript混淆器 :复杂的初学者的代码,很容易绕过。
- Google Closure JS编译器 :优化,压缩和缩小您的代码。 这是生产环境的天然工具 。