2008-10-29 91 views
5

如何正確確保用戶未篡改查詢字符串值或操作url值?例如,您的CommentController上可能有一個帶有CommentID的刪除註釋操作。動作url可能類似於/ Comments/Delete/3刪除ID爲3的評論。Asp.net MVC中的QueryString值的安全性

現在顯然你不希望任何人能夠刪除評論3.通常在評論的所有者或管理員許可這樣做。我見過這種安全措施的執行方式不同,想知道你們中的一些人是如何做到的。

您是否通過多次數據庫調用來檢索評論並檢查評論的作者是否與調用刪除操作的用戶相匹配?

您是否將CommentID和UserID向下傳遞給執行刪除操作的存儲過程,並執行刪除,其中UserID和CommentID等於傳入的值?

加密查詢字符串值是否更好?

回答

18

你不知道。

這是編程的基本規則,尤其是在當今這個時代,那你永遠不要相信它來自用戶,瀏覽器,客戶端等

任何輸入這也是一個基數編程規則,你可能不應該嘗試自己實現加密和安全性,除非你真的知道你在做什麼。即使你確實知道自己在做什麼,你也只會比簡單的餅乾早一步。聰明的人仍然會嘲笑你。

執行額外的查詢以確保登錄用戶擁有正確的權限集。這會讓每個人的生活變得更簡單。

0

我做時髦的事情需要查詢字符串,壓縮,Base64編碼或只是十六進制編碼,所以說,「commentid = 4 &用戶id = 12345」變爲「碼= 1a2b23de12769」

它基本上是「安全通過默默無聞「,但它確實爲試圖破解網站的人做了很多工作。

0

你不能輕易做到這一點。

我對使用動作網址進行刪除的網站有着美好的回憶。

一切都很好,直到他們開始搜索內部網。

哎呀,再見數據。

我會推薦一種解決方案,即不使用querystrings來處理任何你不想編輯的東西。

+0

那你怎麼建議我修改/刪除的東西然後?請記住我正在使用Asp.net MVC – Vyrotek 2008-10-29 03:02:45

+0

您應該發送到您的控制器方法來調用刪除 - 並在執行刪除操作之前驗證請求憑據(cookie /用戶名/密碼/無論)。請參閱@ Schotime的帖子。 – 2008-12-19 00:30:11

3

Vyrotek:輸入法並不重要。 GET,POST,加密/模糊GET - 沒有真正的區別。無論您的應用程序如何接收命令,執行管理操作,都必須確保發佈用戶可以執行他想要的任務。權限檢查必須在收到命令後執行,然後才能執行。否則,它根本就沒有安全性。

6

Enrypting和解密的查詢參數是一個簡單的過程,也有如何這樣做使用一些很好的例子,HTTP模塊這裏在StackOverflow。

「你不這樣做」,「你不能」,或者「這並不容易」在這個時代根本不能接受的反應......