2017-07-13 31 views
0

這種情況有可能發生嗎?我問這是因爲有人告訴我,你聲明的函數可以在客戶端被覆蓋,所以他們希望將函數和它的功能移動到後端...假設情況:前端替換功能

你聲明一個JavaScript函數中的const函數)。在客戶端使用該功能渲染頁面(使用node.js/react.js/etc)。客戶端是否有可能覆蓋客戶端的功能,從而使您的Web應用程序調用其他某個函數/將您重定向到某個不想要的目標/ URL?

+3

是;用戶可以在客戶端上做他們想做的任何事情。 – SLaks

+1

這就是爲什麼你在任何地方設置身份驗證檢查的原因。您應該檢查當前用戶是否是有效用戶,以及他是否被允許執行他正在做的事情。 – hansTheFranz

+1

@SLaks - 是的,他們可以,但我認爲這太簡單了。首先,他們只能在客戶端重寫javascript - 他們不能讓你的應用程序調用其他函數,或者重定向到其他任何人的不需要的目的地,除非你寫了一些令人恐懼的不安全的代碼。 –

回答

0

你是否擔心開發者工具改變你的代碼或者插入惡意腳本的人?

由於這些工具非常複雜,很難保護自己免受使用開發人員工具潛入代碼中的人的影響。請記住,他們所做的更改只能代表他們進行應用,只要他們保持標籤打開並不刷新頁面即可。這不會對他人造成危險。如果您不喜歡人們閱讀您的代碼,請先將其放在服務器上,然後對其執行縮小和隱藏操作。

如果您擔心惡意代碼,儘可能少地暴露給全局名稱空間總是一個好主意。這是一個你可以採取的簡單措施。

這個例子可以通過腳本很容易覆蓋:

var foo = 'bar'; 

function doSomething() { 
    console.log(foo); 
} 

// evil script 
doSomething = function() { 
    window.location = 'http://evil.com' 
} 

但是通過在IEFE包裝你的代碼,你可以把它很難從外面覆蓋的功能:

(function() { // use an IEFE to wrap your code here 
    var foo = 'bar'; 

    function doSomething() { 
     console.log(foo); 
    } 
)(); 

// evil script 
doSomething = function() { // this function will not be called in your code 
    window.location = 'http://evil.com' 
} 
0

嗯,是的。用戶可以自由修改在瀏覽器中運行的任何內容。您可以打開Chrome的開發工具並在頁面上更改任何您想要的內容。當然,這隻在他們的瀏覽器中。

任何在瀏覽器中完成的驗證都應該在服務器上進行驗證。 JavaScript驗證應僅爲用戶提供便利。任何登錄信息都應該僅以單向方式發送,客戶端 - >服務器。如果用戶想要更改JavaScript生成的鏈接,那麼這是他們的選擇,如果他們真的想要,他們可以更改服務器上生成的鏈接。