2016-11-21 49 views
1

我目前正在使用socket.ioNodeJS來控制別的東西。這是我的代碼到目前爲止:Socket.io - 不允許客戶端使用main.js文件查看文件

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像它應該在Chrome瀏覽器上,它說[myIPAddress]:8080。現在,如果我進入顯示頂部網頁網址的欄,然後將其更改爲[myIPAddress]:8080/handler.js,它會打開一個頁面,並在其上打印出我的js腳本。我該怎麼做才能讓這個人不能去[myIPAddress]:8080/handler.js頁面?

我不確定它是否重要,但文件夾main.js也有index.html,edit.htmlhandler.js

+0

當爲.js文件提出請求並正確處理響應時,您必須檢查referer頭。當然,使用開發者工具,任何人都可以看到js加載在頁面中,所以,爲什麼要試圖隱藏js代碼 - 你不能使它看不見 –

+0

所以我必須檢查每個文件?此外,我對此很陌生,那麼如何檢查引用標頭 - 是否是'app.get(...)'?我意識到,開發人員工具允許觀衆查看代碼無論如何,但這更多是爲了我的好奇心... –

+0

我會認爲你在app.get中使用正則表達式進行檢查以捕獲以''結尾的文件。 js'作爲第一個參數 - 但是,這只是一個猜測 –

回答

0

問題是這樣的:

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

當你這樣做,你已經暴露了__dirname目錄中的所有文件,任何人都可以看到包括位於該目錄服務器的文件。相反,你應該將你的,你打算讓公衆有一些其他目錄的訪問靜態文件,然後使用:

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

這將保持在__dirname您的服務器上的文件私人和只露出你想讓你的文件公開你已經找到了一些其他路徑。


如果handler.js實際上是用於在Web頁中使用,因此必須提供給瀏覽器,那麼你不能阻止任何人看它。如果你的網頁需要使用它,那麼瀏覽器必須能夠下載它,如果瀏覽器必須能夠下載它,那麼你不能阻止一個人看到它。你可以做各種各樣的事情,比如模糊它,使其對於一個人來說變得不那麼容易理解,但對於任何確定的黑客來說,邏輯將仍然存在,並且你無法隱藏任何旨在在瀏覽器中運行的Javascript。

您要保護的邏輯必須只在您的服務器上,也許可以通過Ajax調用使用。您無法保留必須在瀏覽器中運行的密碼。

相關問題