2016-12-01 83 views
0

我在'functions'目錄下的NodeJS靜態HTML網站中有函數。這些函數達到像「登錄」這樣的終點,並通過XMLHTTPRequest獲取'/ user'信息。nodejs:允許客戶端使用腳本,但隱藏最終用戶的腳本

我不喜歡將終端用戶公開給我的想法。是否有可能把我的「功能」目錄我的靜態html目錄以外的,如:

HTML 
    index.html 
FUNCTIONS 
    my_func.js 

尚未從index.html的訪問我的功能HTML這樣的:

<script type="text/javascript" src="../FUNCTIONS/my_func.js"></script> 

我已經知道這是不可能,因爲我試過這個,我只是得到一個404的:www.mywebsite.com/functions/my_func.js

但真的,這不是網址,因爲沒有網址,因爲我不想要將我的'功能'目錄保存在可公開訪問的URL中。

我嘗試這樣做:How do I prevent Node.js/Express serving up my application's source code?

創建一個「路線」,這樣,如果「功能」像我的路看到:

<script type="text/javascript" src="../functions/my_func.js"></script> 

它應該重定向到一個目錄外公開託管HTML上的NodeJS,但它沒有工作

我也沒有在NGINX級別:https://serverfault.com/questions/310124/nginx-redirect-url-containing-php

if ($request_uri ~ .*.functions.*) 
{ 
    return 410; 
} 

這可以防止在函數目錄中看到js(當我將FUNCTIONS目錄放在HTML目錄中時)。但是,這也會阻止index.html也能夠加載js函數。

+0

你爲什麼要隱藏你的API函數?如果用戶使用您的網頁,他可以輕鬆地在各種瀏覽器的網絡選項卡中檢查api端點呼叫,那麼您的api本身應該是安全的,通過令牌或會話 – DZDomi

+0

偏執狂我想。並且好奇是否有更好的方法來至少讓它看起來更難以看到端點以及它們如何被使用。還有腳本使用像sessionStorage這樣的東西,我知道這應該是安全的,但我不喜歡暴露變量名稱的想法,如果可能 – user1709076

+0

我可以理解你,但用戶需要連接到你的API,所以瀏覽器,例如即使您將其隱藏在JavaScript代碼等中,最終用戶也會始終看到對您的端點提出的請求。我同意@rsp – DZDomi

回答

2

您的問題的答案是:不,這是不可能的。

如果您在靜態目錄之外託管「函數」腳本,則無人能夠訪問它。如果你把它放在可以訪問的地方,用戶也可以讀取它。

有沒有辦法解決它。客戶端運行的任何代碼都可能被客戶端讀取。即使二進制文件也可以反彙編,所以它不僅適用於JavaScript等語言,還適用於編譯語言。

即使人們看不到自己的代碼,他們也總是能夠在瀏覽器的開發者工具中看到網絡流量,在那裏他們可以看到發送和接收的所有端點,參數和數據。

但是,你可以做的是確保每個人都只能做你想讓他們處理這些端點的事情。因此,您的端點應始終使用例如「檢查」來檢查誰在進行請求。一個認證令牌和強制誰可以做什麼的規則。這樣人們就可以訪問你的端點,但他們將只能做到他們可以用你的前端做的事情。

+0

Thnx的迴應。如果我只允許訪問函數目錄(如果IP地址是xyz),那麼在NGINX代理級別如何?我想這沒有意義......想法? (我確實有oauth2訪問令牌) – user1709076

+0

您只能爲具有特定IP的人提供這些功能,但其他IP的人將無法使用您的應用。任何人都可以使用您的應用程序的前端將能夠看到您的端點和整個流量,請求,響應,參數,標題和一切。這只是按Ctrl + Shift + I的問題。 – rsp