python中常見的問題是如何存儲用戶信息,如用戶名,密碼和遊戲內資金,以便以後可以訪問。這可能嗎?如果是這樣,它是如何完成的?如何在python中存儲帳戶信息以便稍後訪問?
-2
A
回答
1
這取決於安全性是多麼重要爲你們倆的工作。
通常,如果存儲的信息和讀取它的程序在同一臺機器上可用,則不可能安全地存儲數據。 在這種情況下,安全手段主要是爲了防止操縱。
只要攻擊者可以研究該程序以查看它如何存儲信息,他就可以讀取信息。你可以做的最好的事情是混淆它。
要驗證用戶輸入的憑據,您可以不存儲用戶名和密碼本身,而是存儲它們的散列。哈希函數是不可逆的,所以它不能被撤消。
In [1]: import hashlib
In [2]: data = {'user': hashlib.sha256('Roland').hexdigest(), 'password' : hashlib.sha256('mysecretpassword').hexdigest(), 'amount': 273}
In [3]: data
Out[3]: {'amount': 273, 'password': '94aefb8be78b2b7c344d11d1ba8a79ef087eceb19150881f69460b8772753263', 'user': 'a1ef7bf9b9098c49c8aa4e6e8b42b199762a55f85ec6ad215a76045088276fcc'}
要使用它,可以散列用戶輸入並將其與存儲的散列進行比較。
In [45]: hashlib.sha256('Ronald').hexdigest() == data['user']
Out[45]: False
In [46]: hashlib.sha256('Roland').hexdigest() == data['user']
Out[46]: True
存儲數據的靈活方式是使用json。您可以通過這種方式輕鬆保存並加載字典或字典列表。
In [4]: import json
In [5]: datastring = json.dumps(data)
In [6]: datastring
Out[6]: '{"amount": 273, "password": "94aefb8be78b2b7c344d11d1ba8a79ef087eceb19150881f69460b8772753263", "user": "a1ef7bf9b9098c49c8aa4e6e8b42b199762a55f85ec6ad215a76045088276fcc"}'
In [7]: json.loads(datastring)
Out[7]: {u'amount': 273, u'password': u'94aefb8be78b2b7c344d11d1ba8a79ef087eceb19150881f69460b8772753263', u'user': u'a1ef7bf9b9098c49c8aa4e6e8b42b199762a55f85ec6ad215a76045088276fcc'}
注意,儘管用戶名和密碼是不可讀,該量是可讀且可在磁盤上的改變。問題是你不能哈希數額,因爲你不能解開它。
你可以例如壓縮數據以混淆它。
In [8]: import bz2
In [9]: bz2.compress(datastring)
Out[9]: 'BZh91AY&SY\xbf\x86\x82)\x00\x00T\x99\x80P\x04\x7f\xf0?\x03\xde\x8a \x00\x8a\x88\xa9\xf8\x93\xd4\xf4\xa7\xe4\xc9!\xfa\x88\xd0\n4\xf4\x91\xfa\x81\x00\x01\xa3\x00`:\x9e\xdey?\xa2\x1e\x12\xf3\xbeC\xb9\xb1f\x80\xf6\xaa6\xc5[\xad\\\xac\xf3e\xa8\xb0\xdf:!{\xe5\x10\xae\xae\x07p\xc0\xc3\x14*.\xa0j$\xda\t\xb9K\xa7\\\x81\x11\[email protected]\x06\xc4C\x8b\xae\xbc\xc2\xa0\x0e\x1e#H\x91%\xd1\n\x9drS-\x97e_lb\x97C\x0fm\xe6\xb0\xb2\xc2V\x10\x7f\xc9\xf8\xbb\x92)\xc2\x84\x85\xfc4\x11H'
In [10]: len(bz2.compress(datastring))
Out[10]: 157
In [11]: len(datastring)
Out[11]: 171
In [12]: compressed = bz2.compress(datastring)
壓縮的數據乍一看是不可讀的。
讀取數據還是蠻簡單:
In [13]: json.loads(bz2.decompress(compressed))
Out[13]: {u'amount': 273, u'password': u'94aefb8be78b2b7c344d11d1ba8a79ef087eceb19150881f69460b8772753263', u'user': u'a1ef7bf9b9098c49c8aa4e6e8b42b199762a55f85ec6ad215a76045088276fcc'}
然而,攻擊者可以使用例如UNIX上的file
命令確定存儲數據的性質;
In [18]: with open('data.bin', 'w') as storage:
....: storage.write(compressed)
....:
> file data.bin
data.bin: bzip2 compressed data, block size = 900k
1
嘗試泡菜和SQLite ......在這種情況下:)
相關問題
- 1. ARM - 如何從存儲帳戶獲取訪問密鑰以便在稍後的模板中使用AppSettings?
- 2. 如何在ASP.NET應用程序中存儲帳戶訪問信息
- 3. 如何在spring mvc中的會話內存中存儲信息以便稍後獲取?
- 4. 如何存儲Timer對象以便稍後可以檢索它?
- 5. 如何在<img>或<a>標籤中存儲信息以便稍後發送?
- 6. [Android]如何存儲Facebook文章以便稍後顯示它
- 7. 如何在iPhone中訪問EKCalendar帳戶的詳細信息
- 8. 在Java中存儲字符串變量以便稍後使用
- 9. 將公式存儲在表中以便稍後計算?
- 10. 如何在ASP腳本中設置.data()變量,以便稍後可以訪問?
- 11. 訪問電子郵件帳戶信息
- 12. 在PayPal支付期間存儲信息以便後續處理
- 13. 如何輕鬆存儲用戶帳戶詳細信息?
- 14. 如何在UIWebView中緩存內容以便稍後加載?
- 15. 將用戶帳戶信息存儲在Windows Azure表中
- 16. 如何在驗證oauth2.0 salesforce API後通過URL訪問帳戶信息?
- 17. 如何訪問存儲在會話數組中的信息?
- 18. 緩存帳戶信息
- 19. 如何獲取我自己帳戶的訪問令牌以便在我的服務器中存儲/使用?
- 20. 如何存儲查詢執行計劃以便稍後可以使用
- 21. 如何將多個值存儲到數組中以便稍後打印出來?
- 22. 無法訪問存儲帳戶
- 23. 訪問Exchange帳戶郵件存儲
- 24. 如何在本地變量中保存地理位置詳細信息以便稍後使用
- 25. MVC3默認模板存儲用戶帳戶信息在哪裏?
- 26. 如何在全球存儲信息,以便多個TamperMonkey/GreaseMonkey腳本可以訪問它?
- 27. 如何保存來自python-requests的python HTTP請求,以便稍後執行?
- 28. 如何授予用戶帳戶訪問GCE雲存儲
- 29. 將數據存儲在WEB API中以便稍後可以使用
- 30. 存儲特定的元素以便稍後操作
什麼是用例?那裏有什麼樣的安全隱患? – Paddy3118