2010-05-06 112 views
2

當我回頭看我寫的代碼時,我發現了一些非常糟糕的東西。 每當我要在數據庫中刪除記錄,我不喜歡這樣的:ajax安全性?

$.post("deleteAction.do",{recordId:10}); 

我不能阻止惡意用戶訪問直接我的數據庫操作的網址:

deleteAction.do?recordId=10 

什麼是對這種解決方案問題?

回答

3

這實際上取決於您的數據和您在服務器端執行的檢查。例如。如果您檢查用戶是否被允許在該記錄上執行刪除操作,那麼這不是一個很大的問題。如果你不這樣做,這意味着用戶也可以刪除其他用戶的數據。我的建議是:

  1. 在服務器端添加額外的檢查,以防止用戶刪除自己的其他數據。
  2. 而不是使用整數,你也可以使用類似GUID或另一個很難改變的標識符(閱讀:不可預知)。這可以防止「smartheads」試圖分解你的應用程序。
1

您的服務器端代碼應檢查當前登錄的用戶,並確保他們有權刪除東西。這將防止陌生人的惡意行爲,但將需要添加一些授權/許可的東西到您的網絡應用程序。

1

防止這種情況的唯一方法是在您的網站上使用身份驗證,並且只允許一些用戶執行這些操作。任何公共行爲都可以被任何惡意用戶訪問。

2

如果涉及到Ajax或不涉及。如果一個URI在服務器上做了一些敏感的事情或者暴露敏感數據,那麼你需要保護它。通常採用某種形式的身份驗證+授權。基於cookie的技術對此是正常的。實現它的具體細節取決於後端系統的設計。

另外,您不應該允許non-safe actions的GET請求。由於您的請求是一個POST,但您使用GET示例的問題,這表明您只需添加一個「這是一個POST請求?」檢查服務器端腳本。請注意,這本身並不具有足夠的保護能力,惡意用戶可以像任意GET請求那樣容易地執行任意POST請求。 (這將我們帶回到Authen/Authz)