Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/nginx/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io-Don';不允许客户端使用main.js文件查看文件_Javascript_Node.js_Socket.io - Fatal编程技术网

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预定义的方法来解决它。