我目前正在开展一个项目,该项目使用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');
});
来控制其他内容。到目前为止,这是我的代码:
[myIPAddress]:8080
我的代码缩写为相关的部分。
所以我的问题是,当我在节点中运行此代码时,我打开页面index.html
它会打开[myIPAddress]:8080
,就像它应该的那样,在Chrome的顶部,它会显示{{1} }。现在,如果我到顶部显示页面URL的栏,并将其更改为[myIPAddress]:8080/handler.js
,则会打开一个打印出我的js脚本的页面。我该怎么做才能让这个人不能去那个[myIPAddress]:8080/handler.js
页面?
我不确定这是否重要,但包含main.js
文件的文件夹还有index.html
,edit.html
和handler.js
。
答案 0 :(得分:0)
问题在于:
app.use(express.static(__dirname));
执行此操作时,您已公开__dirname
目录中的所有文件,供任何人查看,包括位于该目录中的服务器文件。相反,您应该移动您打算让公众访问其他目录的静态文件,然后使用:
app.use(express.static(someOtherPath));
这会使您的服务器文件保持在__dirname
私有状态,并且只公开您在someOtherPath中公开的文件。
如果handler.js实际上是用于您的网页,因此必须可供浏览器使用,那么您无法阻止任何人查看它。如果您的网页需要使用它,那么浏览器必须能够下载它,如果浏览器必须能够下载它,那么您无法阻止某人看到它。你可以做各种各样的事情,比如模糊它以使人们不易理解,但对于任何坚定的黑客,逻辑仍然都存在,你不能隐藏任何打算在浏览器中运行的Javascript。
您要保护的逻辑必须仅在您的服务器上,也许可以通过Ajax调用使用。您不能保留必须在浏览器中运行的密码。