2016-11-21 6 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]:8080index.htmlのように開き、Chromeの上部に表示されます。[myIPAddress]:8080と表示されます。今、ページのURLが一番上に表示されるバーに、[myIPAddress]:8080/handler.jsに変更すると、jsスクリプトが印刷されたページが開きます。その人がそのページに行くことができないようにするにはどうすればいいですか?[myIPAddress]:8080/handler.jsページ?

main.jsファイルのフォルダは、index.htmledit.html、およびhandler.jsもあります。

+0

.jsファイルが要求されたときに 'referer'ヘッダーをチェックし、適切に応答を処理する必要があります。もちろん、開発者用ツールを使用すると、誰もがページにロードされたjsを見ることができたので、なぜjsコードを隠そうとすると気になりません - それを不可視にすることはできません –

+0

これは各ファイルについてチェックする必要がありますか?また私はこれを初めて使っているので、refererヘッダーを確認するにはどうすればよいのですか?それは 'app.get(...)'ですか?とにかく、開発者用ツールではコードを見ることができますが、これは私の好奇心のためのものです。 –

+0

app.getで正規表現を使ってチェックして、 'で終わるファイルをキャッチすると思いました。 js 'を最初の引数として使用していますが、それはちょうどだと思います –

答えて

0

問題はこれです:あなたはそのディレクトリに作成され、サーバーのファイルを含む参照するには、誰のために__dirnameディレクトリ内のすべてのファイルを公開しました、それを行うとき

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

。これはプライベート__dirnameでサーバーのファイルを保持し、あなたがしようとするファイルのみを公開します

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

:代わりに、あなたは他のディレクトリへのアクセス権を持っている公共のために意図した後、使用あなたの静的ファイルを移動する必要がありますあなたがsomeOtherPathに所在していることを公開してください。 handler.jsが実際にあなたのWebページでの使用を意図しているので、あなたはそれを見てから誰も防ぐことができない、ブラウザが利用できるようにしなければならない場合


。あなたのウェブページがそれを使用する必要がある場合、ブラウザはそれをダウンロードできなければならず、ブラウザがそれをダウンロードできなければならない場合、あなたがそれを見るのを防ぐことはできません。人にはわかりにくくするためにそれをあいまいにするなどあらゆる種類のことを行うことができますが、決まったハッカーにとってはロジックはすべてそこにあり、ブラウザで実行するためのJavascriptを隠すことはできません。

保護したいロジックは、おそらくAjaxコール経由で使用できるように、サーバー上にのみ存在する必要があります。ブラウザで実行する必要があるコードを秘密にすることはできません。

関連する問題