2009-01-08 65 views
3

我正在使用在線遊戲網站。有一些事件會調用一個javascript函數,並且該函數有一些回調行爲。不允許地址欄中的javascript函數調用

這樣的事情,

<input type="button" onclick="changeSomething"/> 


function changeSomething() { 
     /// some call back, which changes something 
} 

現在任何人誰知道這一點可以從瀏覽器的地址欄中,我不想把這種changeSomething。

不太可能有人會這樣做,但我想允許它。

反正有防止這種情況嗎?

謝謝。

P.S.我試過了,但仍然不確定我是否足夠好地解釋了它。請讓我知道你是否沒有得到什麼。

+1

或者更容易,他們可以從他們的螢火蟲控制檯調用它! – 2009-01-08 15:04:12

+0

這聽起來像通過默默無聞的經典安全。它從來沒有工作。如果這是重要的(防止作弊等),請考慮更改您的架構。 – 2009-01-08 15:05:22

回答

4

您將永遠無法獲得任何您嘗試使用的技巧的100%保護。這是一場失敗的比賽。

說了這麼一個辦法來接近你的目標是消除完全onclick屬性,並通過JavaScript綁定你的點擊處理程序(即「changeSomething」):

HTML:

<input id="foo" type="button" /> 

JS:

addEvent(document.getElementById("foo"), 'click', function() { 
    /// some call back, which changes something 
}) 

回調成爲匿名的,然後(如沒有 「changeSomething」 功能了)。如果這些惡意用戶不知道它的名字,他們將無法直接調用它!

還有圍繞這一技術太辦法,但我們不會提那些免得我們給惡人的想法:)

(BTW的addEvent只是添加事件處理程序樣本庫的功能。我如果不是here you go

-2

你可以通過一個ID檢查點擊來源:

<input id="good' type="button" onclick="changeSomething(this.id)"/> 

function changeSomething(myId) { 
    if(myId!='good') { 
    return; 
    } 

//......code 
} 

修改爲:

<input id="good' type="button" onclick="changeSomething(this)"/> 

    function changeSomething(myId) { 
     if(myId.id!='good') { 
     return; 
     } 

    //......code 
    } 
+0

javascript:changeSomething('good')有同樣的問題 – 2009-01-08 15:05:09

+0

對不起,但這沒有幫助。這與通過身份證一樣容易欺騙。 – 2009-01-08 15:06:35

3

我不認爲有什麼可以做這件事。客戶可以在自己的瀏覽器中運行他們想要的任何東西。唯一要做的是驗證服務器端的所有內容。這是所有網絡編程中的一個重要概念。客戶端代碼可以自由修改,應該被視爲額外的檢查來加快速度,而不是安全方法。

0

任何「解決方案」都將與禁用網頁中的右鍵單擊一樣高效......對於後一個問題,我發現至少有十幾種解決方法,包括在Opera中查看頁面!

如果禁用此,一個將與螢火蟲,Greasemonkey的解決辦法,甚至有些代理在飛行中改變HTML,而不是使用頁面的本地副本提等

1

你必須在處理這個問題無論您接受請求的後端如何。假設您在特定條件下僅向用戶提供doSomething()的選項,那麼您可能在數據庫(或其他)中具有此信息。

不要擔心被調用的JavaScript(沒有辦法繞過它),並且在後端的前端執行相同的檢查。這樣,您可以簡單地忘記保護您的前端,因爲您無法繼續......但您仍然可以防止惡意用戶在他們不應該的時候進入。

如果您需要進一步說明我的意思,請告訴我,但我需要更多關於您的應用程序體系結構的詳細信息。