2012-01-14 31 views
0

不是安全專家我希望你能爲我澄清一些事情。交易應用程序中可能存在的安全問題(Django)

我正在構建一個應用程序,用戶可以「交易」虛擬物品。我正在用Django構建它,以防萬一您感興趣。

一個示例方案: 愛麗絲UserID=1)具有良好-A具有一定值(X)。其中good-A基本上是具有屬性(ID, Name, Desc, Value, Owner)的「tradable items」數據庫中的數據庫條目。店主good -AAlice。現在,如果愛麗絲想給良好-A鮑勃UserID=2)她改變的良好-A Bob的UserID=2的 「Owner」 屬性。

這意味着。爲了得到愛麗絲所有物品的總價值,我做了一個數據庫查詢詢問「accumulate the Value values of all items in the tradable items database having the Owner=1

所以所有用戶的所有商品都存儲在一個數據庫中。 (邪惡)用戶是否可以將可交易物品的所​​有者屬性(不屬於他們)更改爲自己的物品,從而產生安全問題?

我知道這取決於特定的實現,但也許你在這個計劃中,一般看到的一個漏洞......

所以......這是實現這樣的情景的好辦法?或者你有更好的想法嗎?

回答

1

你是對的,它完全取決於你的實現。安全問題取決於您實際讓用戶更改物品所有權的方式。如果你有一個簡單的表單來顯示用戶擁有的所有項目,然後他們選擇一個並更改所有者,頁面將重新加載並且不再有該項目再修改。這也是你查詢的一種方式。如果UserA請求更改ItemA的所有權,但它們不是所有者,那麼您的請求就會失敗。

真的,客戶端無法更改不屬於他們的項目,只要您只顯示他們自己擁有的項目,並且只能成功更改其最初擁有的項目的所有權。

編輯

和實例的情況下這將是一個安全問題,在這裏你揭露一個REST API,客戶可以通過JavaScript的溝通,你讓他們自由地修改任何產品ID他們在他們的PUT請求數據中指定。

2

從技術角度來看,堵塞每一處泄漏。默認拒絕。

從業務風險的角度來看,假設您的技術努力只有99%的有效性並採取措施進行緩解。

1)記錄每筆交易。如果有一個安全漏洞打開,只要你還有日誌,你就可以返回並撤銷任何損害。大多數欺詐行爲將會利用前端漏洞。

2)定期進行數據庫備份。如果打開一個安全漏洞,您也可能會丟失數據庫日誌。你會想要備份回去很長的路

3)電子郵件用戶每次他們獲得/傳輸項目。 BCC自己 - 這會在兩個不同的系統上創建交易日誌的兩個冗餘副本(一個在電子郵件中,一個在db中) - 現在他們必須破解您的電子郵件服務器才能逃避欺詐。如果1失敗,您可能能夠從中恢復。它也可以讓你的用戶爲你找到問題。

4)對於高價值交易,特別是轉換爲現金,增加人工授權。讓他們每天進行兩次批量交易 - 但是當人員轉移時間通常在20-30小時範圍內時,人們知道某些事情是錯誤的,突然間5000人計算機沒有。人類在啓發式方面比計算機好得多,一次性使用它們並確保沒有什麼發生。