2013-06-28 143 views
18

我正在設計一個網站,如果允許宏允許自由運行,那麼它會有問題。JavaScript可以模擬按鈕點擊?

我想過一種方法來阻止通過模擬來自按鈕點擊的HTTP請求而產生的宏,但如果他們能夠插入只是「點擊」按鈕並以普通用戶身份繼續進行的JavaScript腳本,這將是徒勞的。

通過模擬按鈕單擊,我的意思是,該按鈕被按下,並且該按鈕所在的Form按鈕與其相關聯的php代碼運行。

邏輯告訴我,JavaScript可以做到這一點,但我想肯定知道,謝謝你的任何輸入!

〜Andrew

+0

你是什麼意思與宏,你的意思是在表單中注入JavaScript代碼?或者[this](http://blog.creativeitp.com/posts-and-articles/javascript/javascript-injection-form-editing/)你的意思是 –

+0

是的,如果有人在我的網站上添加了自己的javascript,模擬我的網站上的按鈕被按下。我想知道他們是否可以(有能力)這樣做。 – AndrewB

+1

他們將始終能夠插入JavaScript來處理您的頁面,包括髮送http請求。你無法避免它。 –

回答

36

一個按鈕可能以編程方式被全部點擊。例如,你可能有一些頁面,這樣的形式:

<form> 
    <input type="text" /> 
    <button>Do something</button> 
    <input type="submit"> 
</form> 

比它可能只是打開調試cosole並鍵入

document.getElementsByTagName('button')[0].click(); 

將點擊按鈕,或

document.getElementsByTagName('input')[1].click(); 

它會點擊表格的提交按鈕,或者只是

document.forms[0].submit(); 

無需點擊按鈕即可提交表單。

無法阻止用戶在客戶端上掌握JavaScript代碼。您必須在服務器端添加一些驗證,以防止不需要的用戶操作。

+1

感謝您的簡潔回答,感謝您的努力! – AndrewB

+0

是的,很好的答案。 – Yster

2

您唯一能做的就是驗證服務器上的請求。

一旦您將頁面交給客戶端,您無法控制如何使用它。

比如,你可以做什麼,from

假設你正在做的JavaScript遊戲。您使用AJAX將播放器的分數發送到 服務器進行記錄。看過腳本後,惡意用戶可以運行你的AJAX代碼 發送1,000,000的分數,即使他們只獲得5,000分。

你不能防止在javascript方面發生這種情況。但是,應該通過某種方式在服務器端對AJAX請求進行身份驗證,您可能會將安全「令牌」傳遞給JavaScript,黑客無法獲取該信息。

+0

我正在考慮讓服務器端的變量每隔一段時間都會變化一次。變量是用戶輸入的鹽值,在分數的例子中,他們有1000分,使用sha512加密,將該數字與服務器端變量進行比較,然後知道期望的結果。如果代碼正確,更新分數,否則不要。 顯然,如果這是所有的PHP方面,他們只需點擊按鈕提交他們的分數,而不是改變分數。然而,我希望這是不可能的,甚至提交他們的分數(在這種情況下) – AndrewB

+0

我想我在這裏有點太有希望了,即使我想不惜一切代價避免他們,我仍然必須與CAPTCHAS解決:P儘管我會給你贊成的! – AndrewB

+0

當我開始使用移動應用程序時,我有時會使用ssh庫來加密和保護數據傳輸,也許可以爲您的情況做類似的事情...... –