這種情況有可能發生嗎?我問這是因爲有人告訴我,你聲明的函數可以在客戶端被覆蓋,所以他們希望將函數和它的功能移動到後端...假設情況:前端替換功能
你聲明一個JavaScript函數中的const函數)。在客戶端使用該功能渲染頁面(使用node.js/react.js/etc)。客戶端是否有可能覆蓋客戶端的功能,從而使您的Web應用程序調用其他某個函數/將您重定向到某個不想要的目標/ URL?
這種情況有可能發生嗎?我問這是因爲有人告訴我,你聲明的函數可以在客戶端被覆蓋,所以他們希望將函數和它的功能移動到後端...假設情況:前端替換功能
你聲明一個JavaScript函數中的const函數)。在客戶端使用該功能渲染頁面(使用node.js/react.js/etc)。客戶端是否有可能覆蓋客戶端的功能,從而使您的Web應用程序調用其他某個函數/將您重定向到某個不想要的目標/ URL?
你是否擔心開發者工具改變你的代碼或者插入惡意腳本的人?
由於這些工具非常複雜,很難保護自己免受使用開發人員工具潛入代碼中的人的影響。請記住,他們所做的更改只能代表他們進行應用,只要他們保持標籤打開並不刷新頁面即可。這不會對他人造成危險。如果您不喜歡人們閱讀您的代碼,請先將其放在服務器上,然後對其執行縮小和隱藏操作。
如果您擔心惡意代碼,儘可能少地暴露給全局名稱空間總是一個好主意。這是一個你可以採取的簡單措施。
這個例子可以通過腳本很容易覆蓋:
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'
}
嗯,是的。用戶可以自由修改在瀏覽器中運行的任何內容。您可以打開Chrome的開發工具並在頁面上更改任何您想要的內容。當然,這隻在他們的瀏覽器中。
任何在瀏覽器中完成的驗證都應該在服務器上進行驗證。 JavaScript驗證應僅爲用戶提供便利。任何登錄信息都應該僅以單向方式發送,客戶端 - >服務器。如果用戶想要更改JavaScript生成的鏈接,那麼這是他們的選擇,如果他們真的想要,他們可以更改服務器上生成的鏈接。
是;用戶可以在客戶端上做他們想做的任何事情。 – SLaks
這就是爲什麼你在任何地方設置身份驗證檢查的原因。您應該檢查當前用戶是否是有效用戶,以及他是否被允許執行他正在做的事情。 – hansTheFranz
@SLaks - 是的,他們可以,但我認爲這太簡單了。首先,他們只能在客戶端重寫javascript - 他們不能讓你的應用程序調用其他函數,或者重定向到其他任何人的不需要的目的地,除非你寫了一些令人恐懼的不安全的代碼。 –