Socket.io - 不允许客户端使用main.js文件查看文件

时间:2016-11-21 00:17:22

标签: javascript node.js socket.io

我目前正在开展一个项目,该项目使用NodeJSvar 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'); }); 来控制其他内容。到目前为止,这是我的代码:

[myIPAddress]:8080

我的代码缩写为相关的部分。

所以我的问题是,当我在节点中运行此代码时,我打开页面index.html它会打开[myIPAddress]:8080,就像它应该的那样,在Chrome的顶部,它会显示{{1} }。现在,如果我到顶部显示页面URL的栏,并将其更改为[myIPAddress]:8080/handler.js,则会打开一个打印出我的js脚本的页面。我该怎么做才能让这个人不能去那个[myIPAddress]:8080/handler.js页面?

我不确定这是否重要,但包含main.js文件的文件夹还有index.htmledit.htmlhandler.js

1 个答案:

答案 0 :(得分:0)

问题在于:

app.use(express.static(__dirname));

执行此操作时,您已公开__dirname目录中的所有文件,供任何人查看,包括位于该目录中的服务器文件。相反,您应该移动您打算让公众访问其他目录的静态文件,然后使用:

app.use(express.static(someOtherPath));

这会使您的服务器文件保持在__dirname私有状态,并且只公开您在someOtherPath中公开的文件。

如果handler.js实际上是用于您的网页,因此必须可供浏览器使用,那么您无法阻止任何人查看它。如果您的网页需要使用它,那么浏览器必须能够下载它,如果浏览器必须能够下载它,那么您无法阻止某人看到它。你可以做各种各样的事情,比如模糊它以使人们不易理解,但对于任何坚定的黑客,逻辑仍然都存在,你不能隐藏任何打算在浏览器中运行的Javascript。

您要保护的逻辑必须仅在您的服务器上,也许可以通过Ajax调用使用。您不能保留必须在浏览器中运行的密码。