Javascript Socket.io-Don';不允许客户端使用main.js文件查看文件
我目前正在做一个项目,它使用Javascript Socket.io-Don';不允许客户端使用main.js文件查看文件,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我目前正在做一个项目,它使用socket.io和NodeJS来控制其他东西。这是我目前的代码: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var fs = require('fs'); var contents = fs.readFileSync("data.json");
socket.io
和NodeJS
来控制其他东西。这是我目前的代码:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require('fs');
var contents = fs.readFileSync("data.json");
var remoteLayout = JSON.parse(contents);
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
app.get('/edit', function(req, res) {
res.sendFile(__dirname + '/edit.html');
});
app.use(express.static(__dirname));
io.on('connection', function(socket) {
console.log('a user connected');
socket.on('disconnect', function() {
console.log('user disconnected');
});
});
http.listen(8080, function() {
console.log('listening on *:8080');
});
这是我的代码缩短到相关的部分
所以我的问题是,当我在node中运行这个代码时,我打开页面[myIPAddress]:8080
它会像它应该打开的那样打开index.html
,在Chrome的顶部,它说[myIPAddress]:8080
。现在,如果我转到顶部显示页面URL的栏,并将其更改为[myIPAddress]:8080/handler.js
,它会打开一个页面,上面打印出我的js脚本。我该如何使该人无法进入该[myIPAddress]:8080/handler.js
页面
我不确定这是否重要,但是带有main.js
文件的文件夹也有index.html
、edit.html
、和handler.js
问题是:
app.use(express.static(__dirname));
当您这样做时,您已经公开了\uuu dirname
目录中的所有文件,包括位于该目录中的服务器文件。相反,您应该将您希望公众能够访问的静态文件移动到其他目录,然后使用:
app.use(express.static(someOtherPath));
这将使您的服务器文件在\uuu dirname
中保持私有,并仅公开您在其他路径中定位的要公开的文件
如果handler.js实际上用于您的网页,因此必须提供给浏览器,那么您不能阻止任何人查看它。如果您的网页需要使用它,那么浏览器必须能够下载它,如果浏览器必须能够下载它,那么您不能阻止他人看到它。你可以做各种各样的事情,比如把它弄模糊,让人看不懂,但是对于任何有决心的黑客来说,逻辑仍然存在,你不能隐藏任何打算在浏览器中运行的Javascript 要保护的逻辑必须仅在服务器上,可能可以通过Ajax调用使用。必须在浏览器中运行的代码不能保密。问题在于:
app.use(express.static(__dirname));
当您这样做时,您已经公开了\uuu dirname
目录中的所有文件,包括位于该目录中的服务器文件。相反,您应该将您希望公众能够访问的静态文件移动到其他目录,然后使用:
app.use(express.static(someOtherPath));
这将使您的服务器文件在\uuu dirname
中保持私有,并仅公开您在其他路径中定位的要公开的文件
如果handler.js实际上用于您的网页,因此必须提供给浏览器,那么您不能阻止任何人查看它。如果您的网页需要使用它,那么浏览器必须能够下载它,如果浏览器必须能够下载它,那么您不能阻止他人看到它。你可以做各种各样的事情,比如把它弄模糊,让人看不懂,但是对于任何有决心的黑客来说,逻辑仍然存在,你不能隐藏任何打算在浏览器中运行的Javascript
要保护的逻辑必须仅在服务器上,可能可以通过Ajax调用使用。您不能对必须在浏览器中运行的代码保密。当请求.js文件时,您必须检查
referer
头并适当处理响应。当然,使用开发人员工具,任何人都可以在页面中看到加载的js,所以,为什么要尝试隐藏js代码呢?你不能让它不可见,我需要为每个文件检查这一点吗?另外,我是新手,所以我如何检查referer标题-是app.get(…)
?我意识到开发人员工具允许查看者查看代码,但这更多是出于我的好奇心…我本以为你在app.get中执行签入操作,使用正则表达式捕获以“.js”结尾的文件作为第一个参数-但是,这只是猜测谢谢,我明白了。。。如果有一个socket.io预定义的方法来解决这个问题,我将保留这个问题。当请求.js文件时,您必须检查referer
头并适当地处理响应。当然,使用开发人员工具,任何人都可以在页面中看到加载的js,所以,为什么要尝试隐藏js代码呢?你不能让它不可见,我需要为每个文件检查这一点吗?另外,我是新手,所以我如何检查referer标题-是app.get(…)
?我意识到开发人员工具允许查看者查看代码,但这更多是出于我的好奇心…我本以为你在app.get中执行签入操作,使用正则表达式捕获以“.js”结尾的文件作为第一个参数-但是,这只是猜测谢谢,我明白了。。。我将保留这个问题,以防有一个socket.io预定义的方法来解决它。