我有一個問題表,該表的主鍵是「自動增量」的「ID」。 現在我正在創建一個管理問題的控制面板。控制面板中的一項功能是刪除問題。 現在我的問題是:我想把問題表的主鍵作爲HTML標籤的標識符發送給客戶端,這樣當用戶點擊HTML標籤刪除問題時,問題的主鍵就會發送到服務器進行刪除問題。在安全性方面是否危險?你有更好的解決方案嗎?我應該使用主鍵來確定要從表中刪除的記錄嗎?
回答
如果您的問題涉及使用主鍵與其他任何唯一列集合來標識要刪除的記錄,則數據庫級別的安全性沒有區別。
例如,如果你有以下的表:
id - primary key
subject -
serial_number -
...
other fields
凡subject + serial_number
或每一行都是唯一的,它使你無論做
delete from table where id = '&id'
與安全方面沒有差別
delete from table where serial_number = '&1' and subject = '&2'
使用主鍵刪除可能很好b e更快。
但是,由於這個刪除操作是從一個html頁面觸發的,所以您肯定需要考慮如何保護頁面並防止意外刪除,但這與決定使用主鍵與其他字段無關刪除記錄。
看起來像你要使用
<a href="YOUR_URL_TO_DELETE/ID_TO_DELETE">YOUR_ANCHOR</a>
主要問題thah我用這種方法遇到的是,每一個可以遵循的鏈接腳本可以在你的表中刪除記錄。考慮使用帶POST方法的表單,並在請求前向用戶顯示一個確認對話框。
這個問題非常難以遵循,但我想它也可以歸結爲「我應該使用GET來改變狀態的操作嗎?」,答案「可能不是」。雖然HTTP規範不禁止改變服務器狀態的GET請求,但他們強烈地不鼓勵 – GordonM
每個請求都必須經過驗證,無論它是以HTTP,GET或POST還是Web服務調用的形式出現。
一個正確的網站需要防止依賴於IP地址跟蹤和請求頻率分析的機器人的保護;隱藏ID可能會阻止一些人編寫shell腳本來獲得一系列對象,但還有其他方式可以通過使用某種強力攻擊來利用網站。
ICQ ID很有價值,但僅僅是因爲它們與用戶有關,並且是用戶的主要識別手段;它是用戶身份驗證的獨一無二的方法,不會被任何其他服務,程序或網站使用。
結論是的,你需要擔心刮刀和DDOS攻擊,數據保護以及其他一些東西,但隱藏id不會很好地解決任何這些問題。
- 1. 我應該使用WWW刪除我的網站記錄嗎?
- 2. 我的表不需要主鍵,我應該使用它嗎?
- 3. 我應該使用std :: remove從列表中刪除元素嗎?
- 4. SQLite使用指定的組合主鍵刪除幾條記錄
- 5. 我應該從SelectedSet中刪除SelectionKey嗎?
- 6. 刪除從SQL表中重複記錄沒有主鍵
- 7. 從表中刪除記錄,這是正確的嗎?
- 8. 使用SQLAlchemy從表中刪除記錄
- 9. 我應該從Web.config中刪除未使用的位嗎?
- 10. 我應該使用POS標記刪除停用詞嗎?
- 11. 使用密鑰刪除MySQL表中的重複記錄但不使用主鍵
- 12. 刪除沒有主鍵的表中的記錄
- 13. 不要使用已刪除的主鍵
- 14. Postgresql - 確定從級聯刪除中刪除了哪些記錄
- 15. 我應該從iOS上的Realm中刪除舊錶嗎?
- 16. 如何刪除主鍵?我得到不正確的表定義
- 17. 環回 - 刪除記錄複合主鍵
- 18. 如果表格無意義,我應該使用主鍵ID嗎?
- 19. 使用select語句刪除表中觀察其主鍵的記錄
- 20. 我應該在用戶定義表類型上使用主鍵嗎?
- 21. 我應該在`else if`中刪除不必要的`else`嗎?
- 22. 從Access中的表中刪除記錄
- 23. 使用外鍵約束刪除多個表中的記錄
- 24. 我應該在Grails中使用複合主鍵嗎?
- 25. 我如何刪除表中的記錄?
- 26. 我應該索引一個外鍵?我應該使用這張表的主鍵嗎?
- 27. 從mysql表中刪除主鍵
- 28. 需要使用row_number()刪除表中的重複記錄()
- 29. 我應該使用SQL中的觸發器來插入記錄嗎?
- 30. 我應該刪除我的MySQL記錄,還是應該有一個「is_deleted」標誌?
你的問題很難遵循,但如果歸結爲「我應該使用主鍵來確定要從表中刪除的記錄嗎?」那麼答案是「是」。至於安全性,服務器腳本有責任確定請求是由有效用戶進行的,並且該用戶有權刪除問題。 – GordonM