2011-06-30 93 views
10

https連接是否保護cookie並防止XSS攻擊。我有一個簡單的博客,允許用戶輸入JavaScript代碼作爲輸入。我希望允許用戶輸入Javascript,同時還能防止XSS攻擊和cookie被竊取。 https有助於保護cookie嗎?我只發現很少有這樣的網站,但仍有點不清楚。https安全Cookie是否可防止XSS攻擊?

+0

HTTPS本身並不防止XSS。 –

+0

允許用戶輸入Javascript是極其危險的。防止惡意用戶對其他用戶做一些非常不好的事情是非常困難的。 –

+0

@Cameron - 它是否危險是無關緊要的。鑑於瀏覽器支持* javascript *僞協議以及Greasemonkey和Firebug等附加組件,用戶可以通過頁面運行腳本,因此無法阻止用戶在其瀏覽器或任何其他用戶代理的頁面中運行所需的任何腳本。 – RobG

回答

7

HTTPS可以防止中間人攻擊,而不是XSS。不幸的是,會話cookie僅憑這一點不安全,可以通過HTTP請求一個頁面,然後相同的cookie將不受保護地發送。

要確保會話cookie只在HTTPS連接發送的,你可以在啓動會話之前使用的功能session_set_cookie_params():

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 

注意第一true,這意味着cookie將被髮送僅限於HTTPS頁面。第二個true告訴瀏覽器,JavaScript不能訪問會話cookie,這取決於瀏覽器是否正確完成。

使網站更安全的另一個好方法是使用會話cookie僅用於維護會話,並使用第二個cookie來處理身份驗證。如果您有興趣,我可以舉一個例子。

+0

是的,舉個例子。根據你的回答,如果會話cookie被強制通過https連接,那麼我們可以說它是安全的xss攻擊。 – Hussein

+0

@侯賽因 - 會話cookie不是XSS攻擊的一部分,關於XSS的一個很好的解釋你可以在這裏找到:http://shiflett.org/articles/cross-site-scripting。我編寫的示例介紹瞭如何使用混合的HTTP和HTTPS頁面,但它還顯示瞭如何將會話和身份驗證分開保存http://www.martinstoeckli.ch/php/php.html#ssl_nomim_cookie。會話cookie始終是攻擊的目標。 – martinstoeckli

+0

感謝@馬丁,你的文章中非常有用的信息。 – Hussein

4

HTTP協議(HTTPS或HTTP)對XSS沒有幫助或者確實有任何關係。您需要添加預防措施,並小心將JavaScript輸出到客戶端。

+0

@comm @cwa @jake謝謝。假設我們希望用戶在博客中輸入Google廣告代碼。谷歌代碼是JavaScript。我們不能去掉javascript,因爲它是需要的。如果我們允許javascript,那麼我們對許多xss攻擊區域開放。這是什麼解決方案。我確信有一種方法可以解決這個問題。 – Hussein

1

一旦您允許某人動態地在您的網站上存儲和執行任意JavaScript,他們就可以訪問許多您希望他們獨自離開的東西。至少,他們可以劫持您的PHP會話ID(畢竟他們將有權訪問您的Cookie),然後使用Ajax將其轉發到某個遠程服務器。一旦他們有了這些,他們可以做你的用戶各種廢話。

如果讓他們加入自己的JavaScript中,我會建議你專門禁用所有Ajax功能(XMLHTTPRequest = function(){}阻止所有的Ajax很容易地在大多數的瀏覽器,但你可能需要考慮什麼IE需要(我不知道ActiveXObject = function(){}會做什麼......))。不幸的是,如果您有任何使用它們的期望(即,如果您有會話),則無法阻止訪問cookie,因此您需要找到其他解決方法。

1

如果您希望用戶能夠輸入JavaScript 代碼,但沒有解析它,請通過htmlspecialchars運行它。 如果您希望他們能夠執行代碼,那麼不需要HTTPS,您將需要解析代碼並從中刪除任何不良內容。