1

考慮一個假設的銀行應用程序,我們有賬戶和一些管理員組。每個管理員都對某些帳戶擁有修改權限。要保存對帳戶所做的修改,應用程序會在編輯頁面上發送帳戶ID。管理員可以通過使用像fiddler這樣的工具來更改發佈請求。如果他/她將帳戶ID更改爲他/她未被授權的某個帳戶ID。那麼檢測它的最好方法是什麼?如何驗證web應用程序中的回發數據

我應該使用什麼策略來重新驗證每個數據以授權回發?我關心的是更多的是設計,而不是代碼。

換句話說,即使用戶正在改變任何工具的回發請求,應用程序也能夠檢測到真實世界的應用程序如何確保它。

回答

0

對於關鍵應用,如銀行,我會建議follwing安全步驟

1)發送加密後的賬戶ID 2)記住,帳戶ID在一個隱藏字段,當用戶提交數據考慮ID從隱藏字段不能形成文本框或標籤。 3)重新驗證每個數據以便在回發後進行授權。

1

我應該在post-back上重新驗證每一條授權數據嗎?

是的,這是正確的。你應該從「所有輸入是邪惡的」哲學開始,然後通過驗證每個數據點來證明這個陳述是不正確的。如果你的整個數據沒有通過你的驗證,那麼你的輸入確實是邪惡的。

智能Web應用程序採用客戶端和服務器端驗證。客戶端驗證可以在不進行服務器往返和服務器端驗證的情況下快速提醒用戶最新錯誤/丟失情況,以確保即使某人「擺弄」了客戶端驗證代碼也無法解決錯誤數據(並覆蓋它)。

不幸的是,在客戶端加密數據將無法正常工作,因爲您在客戶端(在JS代碼中)也有密鑰。這不會阻止惡意用戶加密惡意負載。像隱藏域等混淆對於惡意攻擊者來說效率低下。僅供參考,你甚至不需要提琴手來更改字段/後參數等 - 所有你需要的是firebug extension

咒語是「驗證服務器端的每一件事」。期。

+0

這確實是正確的口頭禪。 +1 – user1429080

+0

感謝您的回覆,我理解客戶端和服務器端數據驗證的重要性。在網頁上驗證數據時這很快,但通常授權規則在數據庫中,如果我必須重新驗證授權,我必須在回發時再次命中db。我之前曾問過錯誤的方法,我的問題是如何重新驗證每一條數據。例如,我可以創建一個guid,在發送guid而不是實際的帳戶ID,並在會話中存儲映射。如果用戶發脾氣,發帖回來,我不會得到實際的帳戶ID。應用程序很安全。 – Arnet11

+0

如果您確實可以確定guid未被篡改,並且guid是您希望防止篡改的唯一方法,那麼可以這樣做。 HMACing GUID是您可以保證的一種方式。不過,我仍然不確定您想要在每個請求上授權。一旦你成功登錄你的框架,爲你做會話管理。有一些會話變量存在,只要她登錄,就存儲用戶的授權/訪問級別。每次請求時都要確保使用內存會話變量驗證授權/訪問。 – CodeExpress

相關問題