2012-12-02 12 views
1

因此,通常在我使用的大型網站中,您希望將一些會話信息保存到數據庫,以便Cookie不會輕易重複。令牌記得我保存在數據庫中的flask-login?

使用flask-login有一種方法可以使用token_loader來實現查詢Session表的功能,例如將token映射到id。

但這意味着會話表將與用戶表的大小相同。

id = db.Column(db.Integer, primary_key=True) 
token = db.Column(db.String(250), unique=True) 
uid = db.Column(db.Integer, unique=True) 


@login_manager.token_loader 
def token_load(token): 
    return User.sessions.first().token 

我已經看到有8 MB充滿用戶表信息的網站。例如,Drupal中的會話錶行被塞滿了網站。以這種方式存儲令牌是否明智?每個用戶告訴我們他們的令牌價值只是一排?

基本上它就像一個密碼錶,確定誰擁有餅乾用戶,而不是實際登錄。

任何人看到瓶中登錄這個隨時隨地的實現?

+0

我不確定我是否理解這個問題,但是如果是關於爲用戶保存令牌信息的話,那麼......您可以將令牌保存到同一個用戶表中,您已經有了ID它。這將只是一個額外的領域。或者可以是用戶配置文件表,或者...是的,帶有映射的單獨表(如果由於某種安全性,您想將用戶表與這些數據分開,那麼您就沒有其他選擇了) 。如果我誤解了這個問題 - 對不起:) –

+0

是的,我只是要求最好的方法來做到這一點。我的意思是,我甚至不確定這是否是100%的安全性,如果我們正在做的是向cookie添加散列並檢查散列是否與用戶匹配。從本質上講,一旦黑客得到你的哈希,他可以登錄爲你(這是很多的安全嗎?) – Dexter

回答

1

我只想去用戶表中的附加字段。這將避免數據在另一個表中被複制。如果您只保存身份證和令牌,我沒有看到有任何意見要單獨列出。但是,如果你打算向它添加更多的信息(比如創建令牌的時間,其他一些更安全的東西,以後再驗證令牌,來自令牌的IP地址被生成或者別的),那麼當然你將需要單獨的表格。我的2c :)

+0

但做ip /令牌驗證,真的提高安全性? – Dexter

+0

如果你的令牌是短期的(分鐘,小時),我會說是。但是,如果您希望用戶在幾天後自動登錄,那麼IP地址沒有意義,只有cookie中的哈希值可能會有幫助。無論如何,我覺得值得存儲的是你爲用戶發佈令牌的時間。我認爲值得有可能要求重新登錄,例如令牌是2個月大,或者如果用戶從未在一個月內使用該令牌。無論如何,如果cookie被盜 - 安全故事的結尾:D –

+1

是的,這是我的擔憂。我的意思是,remember_me cookie的全部要點是記住用戶365天。如果是這樣的話,那麼威脅是什麼? 1.他們偷了你的餅乾,然後無論你放入什麼東西,它都不安全。 2.他們複製你擁有的cookie,但是如果你對它進行哈希處理,那麼它就不能被複制。 3。他們通過wifi嗅探您的cookie,在這種情況下,您需要解密cookie和IP來檢查cookie,但用戶必須重新登錄每次IP更改。 (這可能是銀行從未通過cookies登錄人的原因)。 – Dexter

0

我想你可能會過於複雜的事情。如果你想使用存儲在服務器端而不是cookie中的會話,你也可以使用類似redis的東西來存儲會話。所有你所要做的就是寫你自己的會話inteface使用例如如下面:

http://flask.pocoo.org/snippets/75/

現在,如果你想使用「記住我」爲365天,然後就做你的燒瓶應用

from datetime import timedelta 
app.secret_key = 'some secret random string' 
session.permanent = True 
app.permanent_session_lifetime = timedelta(days=365) 
+0

我認爲使用像redis這樣的新概念是過分複雜的。查看該代碼段的大小。我甚至不認爲你必須將會話永久化,flask-login正在使用一個cookie來完成這項任務。 – Dexter

相關問題