建議添加鹽的原因很簡單。一般來說,當你創建這個「指紋」時 - 如果你只使用一個有限數據集的數據項,那麼它會使外部黑客更容易產生這個數據,並劫持會話。
在上例中,如果攻擊者同時擁有「指紋」和用戶代理,則他們將能夠劫持會話。
加入鹽只能使得攻擊者更難生成指紋,它是:「如果他們都只有一個資料片,那麼信息的最後一塊毫無用處)
我的情況下, d建議你在vBulletin(一個我曾經使用過的項目)中添加更多的東西,會話ID散列(基本上與指紋相同)用下面的代碼生成:
define('SESSION_IDHASH', md5($_SERVER['HTTP_USER_AGENT'] . $this->fetch_substr_ip($registry->alt_ip))); // this should *never* change during a session
此外,會話哈希使用
md5(uniqid(microtime(), true));
這些都是當試圖
所以識別會話,劫持會話時,人會需要知道服務器上的以下
- 的時間(精確地)託運時創建會話是
- 用戶的瀏覽器代理字符串
- 用戶的IP地址
他們也必須欺騙IP地址(或至少前2/3個八位字節)才能做到這一點。
如果他們確實處於能夠獲得上述信息的地步,那麼他們可能會以其他方式進行攻擊,而不僅僅是會話劫持。 vBulletin實際上並沒有使用「salt」本身,但在上面的例子中,鹽只是添加了有限的熵,最好總能找到儘可能多的熵。
例如,在我正在用python編寫的東西中,我使用XSRF保護生成哈希值。以下是我使用的。
self.key = sha1(
self.user.username +
self.user.password +
settings.SECRET_KEY +
strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
).hexdigest()
這取用戶的用戶名和密碼,當前時間,以及預設的鹽來生成這個。對於攻擊者而言,由於鹽和時間的緣故,攻擊者很難生成(儘管如此,請注意,只有在它被使用後纔會發生變化,隨着時間的推移,如果它沒有改變,爲特定用戶破解這個)
來源
2009-03-05 21:47:34
Mez
包括會話指紋中的IP地址是不好的,因爲它會阻止用戶合法更改IP地址,例如斷開 – Guss 2009-03-05 21:40:29
@Guss的DSL線路:發生這種情況時(或用戶代理的瀏覽器自動更新時),則I會話失效。沒什麼大不了的,用戶必須重新登錄。 – cherouvim 2009-03-05 21:42:51