對(duì)于大多數(shù)用例來(lái)說(shuō),默認(rèn)配置下的 Tomcat 都是相當(dāng)安全的。有些環(huán)境可能需要更多(或更少)的安全配置。本文統(tǒng)一介紹了一下可能影響安全性的配置選項(xiàng),并適當(dāng)說(shuō)明了一下修改這些選項(xiàng)所帶來(lái)的預(yù)期影響。目的是為了在評(píng)價(jià) Tomcat 安裝時(shí),提供一些應(yīng)值得考慮的配置選項(xiàng)。
注意:本章內(nèi)容畢竟有所局限,你還需要對(duì)配置文檔進(jìn)行深入研究。在相關(guān)文檔中有更完整的屬性描述。
Tomcat 配置不應(yīng)成為唯一的防線(xiàn),也應(yīng)該保障系統(tǒng)(操作系統(tǒng)、網(wǎng)絡(luò)及數(shù)據(jù)庫(kù),等等)中的其他組件的安全。
不應(yīng)該以根用戶(hù)的身份來(lái)運(yùn)行 Tomcat,應(yīng)為 Tomcat 進(jìn)程創(chuàng)建并分配一個(gè)專(zhuān)門(mén)的用戶(hù),并為該用戶(hù)配置最少且必要的操作系統(tǒng)權(quán)限。比如,不允許使用 Tomcat 用戶(hù)實(shí)現(xiàn)遠(yuǎn)程登錄。
文件權(quán)限同樣也應(yīng)適當(dāng)限制。就拿 ASF 中的 Tomcat 實(shí)例為例說(shuō)明吧(禁止自動(dòng)部署,Web 應(yīng)用被部署為擴(kuò)張的目錄。),標(biāo)準(zhǔn)配置規(guī)定所有的 Tomcat 文件都由根用戶(hù)及分組用戶(hù)所擁有,擁有者具有讀寫(xiě)特權(quán),分組只有讀取特權(quán),而 World 則沒(méi)有任何特權(quán)。例外之處在于,logs、temp 以及 work 目錄的權(quán)限都由 Tomcat 用戶(hù)而不是根用戶(hù)所擁有。這意味著即使攻擊者破壞了 Tomcat 進(jìn)程,他們也不能改變 Tomcat 配置,無(wú)法部署新應(yīng)用,也無(wú)法修改現(xiàn)有應(yīng)用。Tomcat 進(jìn)程使用掩碼 007 來(lái)維護(hù)這種權(quán)限許可。
對(duì)于網(wǎng)絡(luò)層面,需要使用防火墻來(lái)限制進(jìn)站與出站連接,只允許出現(xiàn)那些你希望的連接。
Tomcat 安裝時(shí)自帶了一些默認(rèn)啟用的 Web 應(yīng)用。過(guò)去一段時(shí)間內(nèi)發(fā)現(xiàn)了不少關(guān)于這些應(yīng)用的漏洞。用不到的應(yīng)用就該刪除,以避免給系統(tǒng)帶來(lái)相關(guān)漏洞而產(chǎn)生的安全風(fēng)險(xiǎn)。
ROOT 應(yīng)用帶來(lái)安全風(fēng)險(xiǎn)的可能性非常小,但它確實(shí)含有正在使用的 Tomcat 的版本號(hào)。應(yīng)該從可公開(kāi)訪(fǎng)問(wèn)的 Tomcat 實(shí)例中清除 ROOT 應(yīng)用,不是出于安全性原因,而是因?yàn)檫@樣能給用戶(hù)提供一個(gè)更適合的默認(rèn)頁(yè)面。
Documentation 帶來(lái)安全風(fēng)險(xiǎn)的可能性非常小,但》它標(biāo)識(shí)出了當(dāng)前正使用的 Tomcat 版本。應(yīng)該從可公開(kāi)訪(fǎng)問(wèn)的 Tomcat 實(shí)例中清除該應(yīng)用。
應(yīng)該從安全敏感性安裝中移除 examples 應(yīng)用。雖然 examples 應(yīng)用并不包含任何已知的漏洞,但現(xiàn)已證明,它所包含的一些功能可以被攻擊者利用,特別是一些顯示所有接收內(nèi)容,并且能設(shè)置新 cookie 的 cookie 范例。攻擊者將這些公關(guān)和部署在 Tomcat 實(shí)例中的另一個(gè)應(yīng)用中的漏洞相結(jié)合,就能獲取原本根本不可能得到的信息。
由于 Manager 應(yīng)用允許遠(yuǎn)程部署 Web 應(yīng)用,所以經(jīng)常被攻擊者利用,因?yàn)閼?yīng)用的密碼普遍強(qiáng)度不夠,而且大多在 Manager 應(yīng)用中啟用了 Tomcat 實(shí)例可公開(kāi)訪(fǎng)問(wèn)的功能。Manager 應(yīng)用默認(rèn)是不能訪(fǎng)問(wèn)的,因?yàn)闆](méi)有配置能夠執(zhí)行這種訪(fǎng)問(wèn)的用戶(hù)。如果啟用 Manager 應(yīng)用,就應(yīng)該遵循 保證管理型應(yīng)用的安全性 一節(jié)中的指導(dǎo)原則。
Host Manager 應(yīng)用能夠創(chuàng)建并管理虛擬主機(jī),包括啟用虛擬主機(jī)的 Manager 應(yīng)用。Host Manager 應(yīng)用默認(rèn)是不能訪(fǎng)問(wèn)的,因?yàn)闆](méi)有配置能夠執(zhí)行這種訪(fǎng)問(wèn)的用戶(hù)。如果啟用 Host Manager 應(yīng)用,就應(yīng)該遵循 保證管理型應(yīng)用的安全性 一節(jié)中的指導(dǎo)原則。
在配置能夠?yàn)?Tomcat 實(shí)例提供管理功能的 Web 應(yīng)用時(shí),需要遵循下列指導(dǎo)原則:
/META-INF/context.xml
中的限制訪(fǎng)問(wèn) localhost 的RemoteAddrValve 取消注釋。如果需要遠(yuǎn)程訪(fǎng)問(wèn),使用該值可限制到特定的 IP 地址。啟用安全管理器能讓 Web 應(yīng)用運(yùn)行在沙盒中,從而極大限制 Web 應(yīng)用執(zhí)行惡意行為的能力——比如調(diào)用 System.exit()
,在 Web 應(yīng)用根目錄或臨時(shí)目錄外建立網(wǎng)絡(luò)連接或訪(fǎng)問(wèn)文件系統(tǒng)。但應(yīng)注意的是,有些惡意行為是安全管理器所無(wú)法阻止的,比如利用無(wú)限循環(huán)產(chǎn)生 CPU 極大開(kāi)銷(xiāo)。
啟用安全管理器經(jīng)常用來(lái)限制潛在影響,比如防止攻擊者通過(guò)某種方式危害受信任的 Web 應(yīng)用。安全管理器也可能被用來(lái)減少運(yùn)行不受信任的 Web 應(yīng)用(比如在托管環(huán)境中)所帶來(lái)的風(fēng)險(xiǎn),但它只能減少這種風(fēng)險(xiǎn),并不能終止不受信任的 Web 應(yīng)用。如果運(yùn)行多個(gè)不受信任的 Web 應(yīng)用,強(qiáng)烈建議將每個(gè)應(yīng)用都部署為獨(dú)立的 Tomcat 實(shí)例(理想情況下還需要部署在獨(dú)立的主機(jī)上),以便盡量減少惡意 Web 應(yīng)用對(duì)其他應(yīng)用產(chǎn)生的危害。
Tomcat 已經(jīng)過(guò)安全管理器的測(cè)試。但大多數(shù) Tomcat 用戶(hù)卻沒(méi)有運(yùn)行過(guò)安全管理器,所以 Tomcat 也沒(méi)有相關(guān)的用戶(hù)測(cè)試過(guò)的配置。現(xiàn)在已經(jīng)(并會(huì)繼續(xù))報(bào)告指出了一些關(guān)于運(yùn)行安全管理器時(shí)產(chǎn)生的 Bug。
安全管理器在運(yùn)行時(shí)所暴露出的限制可能在于中斷很多應(yīng)用。所以,在未經(jīng)大量測(cè)試前,還是不要使用它為好。理想情況下,安全管理器應(yīng)該在開(kāi)發(fā)前期使用,因?yàn)閷?duì)于一個(gè)成熟的應(yīng)用來(lái)說(shuō),啟用安全管理器后,記錄修補(bǔ)問(wèn)題會(huì)極大浪費(fèi)時(shí)間。
啟用安全管理器會(huì)改變下列設(shè)置的默認(rèn)值:
deployXML
屬性默認(rèn)值會(huì)被改為 false
。默認(rèn)的 server.xml 包含大量注釋?zhuān)热缫恍┍蛔⑨尩舻姆独M件定義。去掉這些注釋將會(huì)使其更容易閱讀和理解。
如果某個(gè)組件類(lèi)型沒(méi)有列出,那么該類(lèi)型也沒(méi)有能夠直接影響安全的相關(guān)設(shè)置。
將 port
屬性設(shè)為 -1
能禁用關(guān)閉端口。
如果關(guān)閉端口未被禁用,會(huì)為 shutdown 配置一個(gè)強(qiáng)密碼。
如果在 Solaris 上使用 gcc 編譯 APR 生命周期偵聽(tīng)器,你會(huì)發(fā)現(xiàn) APR 生命周期偵聽(tīng)器并不穩(wěn)定。如果在 Solaris 上使用 APR(或原生)連接器,需要用 Sun Studio 編譯器進(jìn)行編譯。
應(yīng)該啟用并恰當(dāng)?shù)嘏渲?Security 偵聽(tīng)器。
默認(rèn)配置了一個(gè) HTTP 和 AJP 連接器。沒(méi)有用到的連接器應(yīng)從 server.xml 中清除掉。
address
屬性用來(lái)控制連接器在哪個(gè) IP 地址上偵聽(tīng)連接。默認(rèn),連接器會(huì)在所有配置好的 IP 地址上進(jìn)行偵聽(tīng)。
allowTrace
屬性可啟用能夠利于調(diào)試的 TRACE 請(qǐng)求。由于一些瀏覽器處理 TRACE 請(qǐng)求的方式(將瀏覽器暴露給 XSS 攻擊),所以默認(rèn)是不支持 TRACE 請(qǐng)求的。
maxPostSize
屬性控制解析參數(shù)的 POST 請(qǐng)求的最大尺寸。在整個(gè)請(qǐng)求期間,參數(shù)會(huì)被緩存,所以該值默認(rèn)會(huì)被限制到 2 MB大小,以減少 DOS 攻擊的風(fēng)險(xiǎn)。
maxSavePostSize
屬性控制在 FORM 和 CLIENT-CERT 驗(yàn)證期間,saving of POST requests。在整個(gè)驗(yàn)證期間(可能會(huì)占用好幾分鐘),參數(shù)會(huì)被緩存,所以該值默認(rèn)會(huì)被限制到 4 KB大小,以減少 DOS 攻擊的風(fēng)險(xiǎn)。
maxParameterCount
屬性控制可解析并存入請(qǐng)求的參數(shù)與值對(duì)(GET + POST)的最大數(shù)量。過(guò)多的參數(shù)將被忽略。如果想拒絕這樣的請(qǐng)求,配置FailedRequestFilter。
xpoweredBy
屬性控制是否 X-Powered-By HTTP 報(bào)頭會(huì)隨每一個(gè)請(qǐng)求發(fā)送。如果發(fā)送,則該報(bào)頭值包含 Servlet 和 JSP 規(guī)范版本號(hào)、完整的 Tomcat 版本號(hào)(比如 Apache Tomcat/8.0)、JVM Vendor 名稱(chēng),以及 JVM 版本號(hào)。默認(rèn)禁用該報(bào)頭。該報(bào)頭可以為合法用戶(hù)和攻擊者提供有用信息。
server
屬性控制 Server HTTP 報(bào)頭值。對(duì)于 Tomcat 4.1.x 到 8.0.x,該報(bào)頭默認(rèn)值為 Apache-Coyote/1.1。該報(bào)頭為合法用戶(hù)和攻擊者提供的有用信息是有限的。
SSLEnabled
、scheme
和 secure
這三個(gè)屬性可以各自獨(dú)立設(shè)置。這些屬性通常應(yīng)用場(chǎng)景為:當(dāng) Tomcat 位于反向代理后面,并且該代理通過(guò) HTTP 或 HTTPS 連接 Tomcat 時(shí)。通過(guò)這些屬性,可查看客戶(hù)端與代理間(而不是代理與 Tomcat之間)連接的 SSL 屬性。例如,客戶(hù)端可能通過(guò) HTTPS 連接代理,但代理連接 Tomcat 卻是通過(guò) HTTP。如果 Tomcat 有必要區(qū)分從代理處接收的安全與非安全連接,那么代理就必須使用單獨(dú)分開(kāi)的連接,向
Tomcat 傳遞安全與非安全請(qǐng)求。如果代理使用 AJP,客戶(hù)端連接的 SSL 屬性會(huì)經(jīng)由 AJP 協(xié)議傳遞,那么就不需要使用單獨(dú)的連接。
sslEnabledProtocols
屬性用來(lái)確定所使用的 SSL/TLS 協(xié)議的版本。從 2014 年發(fā)生的 POODLE 攻擊起,SSL 協(xié)議被認(rèn)為是不安全的,單獨(dú) Tomcat 設(shè)置中該屬性的安全設(shè)置為 sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"
。
ciphers
屬性控制 SSL 連接所使用的 cipher。默認(rèn)使用 JVM 的缺省 cipher。這往往意味著,可用 cipher 列表將包含弱導(dǎo)出級(jí) cipher。安全環(huán)境通常需要配置更受限的 cipher 集合。該屬性可以利用 OpenSSL 語(yǔ)法格式來(lái)包括/排除 cipher 套件。截止
2014 年 11 月 19 日,對(duì)于單獨(dú) Tomcat 8 與 Java 8,可使用 sslEnabledProtocols
屬性,并且排除非 DH cipher,以及弱/失效 cipher 來(lái)指定 TLS 協(xié)議,從而實(shí)現(xiàn)正向加密(Forward Secrecy)技術(shù)。對(duì)于以上這些設(shè)定工作來(lái)說(shuō),Qualys SSL/TLS test是一個(gè)非常不錯(cuò)的配置工具。
tomcatAuthentication
和 tomcatAuthorization
屬性都用于 AJP 連接,用于確定 Tomcat 是否應(yīng)該處理所有的認(rèn)證和授權(quán),或者是否應(yīng)委托反向代理來(lái)認(rèn)證(認(rèn)證用戶(hù)名作為 AJP 協(xié)議的一部分被傳遞給 Tomcat),而讓 Tomcat 繼續(xù)執(zhí)行授權(quán)。
allowUnsafeLegacyRenegotiation
屬性提供對(duì) CVE-2009-3555 漏洞(一種 TLS 中間人攻擊)的應(yīng)對(duì)方案,應(yīng)用于 BIO 連接器中。如果底層 SSL 實(shí)現(xiàn)易受 CVE-2009-3555 漏洞影響,才有必要使用該屬性。參看
Tomcat 8 安全文檔可詳細(xì)了解這種缺陷的當(dāng)前狀態(tài)及其可使用的解決方案。
AJP 連接器中的 requiredSecret
屬性配置了 Tomcat 與 Tomcat 前面的反向代理之間的共享密鑰,從而防止通過(guò) AJP 協(xié)議進(jìn)行非授權(quán)連接。
Host 元素控制著部署。自動(dòng)部署能讓管理更為輕松,但也讓攻擊者更容易部署惡意應(yīng)用。自動(dòng)部署由 autoDeploy
和 deployOnStartup
屬性來(lái)控制。如果兩個(gè)屬性值為 false
,則 server.xml 中定義的上下文將會(huì)被部署,任何更改都將需要重啟 Tomcat 才能生效。
在 Web 應(yīng)用不受信任的托管環(huán)境中,將 deployXML
設(shè)置為 false
將忽略任何包裝 Web 應(yīng)用的 context.xml,可能會(huì)把增加特權(quán)賦予 Web 應(yīng)用。注意,如果啟用安全管理器,則 deployXML
屬性默認(rèn)為 false
。
server.xml
、默認(rèn)的 context.xml
文件,每個(gè)主機(jī)的 context.xml.default
文件、Web 應(yīng)用上下文文件
crossContext
屬性能夠控制是否允許上下文訪(fǎng)問(wèn)其他上下文資源。默認(rèn)為 false
,而且只應(yīng)該針對(duì)受信任的 Web 應(yīng)用。
privileged
屬性控制是否允許上下文使用容器提供的 servlet,比如 Manager servlet。默認(rèn)為 false
,而且只針對(duì)受信任的 Web 應(yīng)用。
內(nèi)嵌 Resource 元素中的 allowLinking
屬性控制是否允許上下文使用鏈接文件。如果啟用而且上下文未經(jīng)部署,那么當(dāng)刪除上下問(wèn)資源時(shí),也會(huì)一并將鏈接文件刪除。默認(rèn)值為 false
。在大小寫(xiě)敏感的操作系統(tǒng)上改變?cè)撝?,將?huì)禁用一些安全措施,并且允許直接訪(fǎng)問(wèn) WEB-INF 目錄。
強(qiáng)烈建議配置 AccessLogValve。默認(rèn)的 Tomcat 配置包含一個(gè) AccessLogValve。通常會(huì)對(duì)每個(gè) Host 上進(jìn)行配置,但必要時(shí)也可以在每個(gè) Engine 或 Context 上進(jìn)行配置。
應(yīng)通過(guò) RemoteAddrValve 來(lái)保護(hù)管理應(yīng)用。注意:這個(gè) Valve 也可以用作過(guò)濾器。allow 屬性用于限制對(duì)一些已知信任主機(jī)的訪(fǎng)問(wèn)。
默認(rèn)的 ErrorReportValve 在發(fā)送給客戶(hù)端的響應(yīng)中包含了 Tomcat 版本號(hào)。為了避免這一點(diǎn),可以在每個(gè) Web 應(yīng)用上配置自定義錯(cuò)誤處理器。另一種方法是,可以配置 ErrorReportValve
,將其 showServerInfo
屬性設(shè)為 false
。另外,通過(guò)創(chuàng)建帶有下列內(nèi)容的
CATALINA_BASE/lib/org/apache/catalina/util/ServerInfo.properties 文件,可以改變版本號(hào)。
server.info=Apache Tomcat/8.0.x
根據(jù)需要來(lái)改變?cè)撝?。注意,這也會(huì)改變一些管理工具所報(bào)告的版本號(hào),可能難于確定實(shí)際安裝的版本號(hào)。CATALINA_HOME/bin/version.bat|sh
腳本依然能夠報(bào)告版本號(hào)。
當(dāng)出現(xiàn)錯(cuò)誤時(shí),默認(rèn)的 ErrorReportValve
能向客戶(hù)端顯示堆棧跟蹤信息以及/或者 JSP 源代碼。為了避免這一點(diǎn),可以在每個(gè) Web 應(yīng)用內(nèi)配置自定義錯(cuò)誤處理器。另一種方法是,可以顯式配置一個(gè) ErrorReportValve
,并將其 showReport
屬性設(shè)為 false
。
MemoryRealm 并不適用于生產(chǎn)用途,因?yàn)橐胱?Tomcat-users.xml 中的改動(dòng)生效,就必須重啟 Tomcat。
JDBCRealm 也不建議用于生產(chǎn)環(huán)境,因?yàn)樗械恼J(rèn)證和授權(quán)選項(xiàng)都占用一個(gè)線(xiàn)程。可以用 DataSourceRealm 來(lái)替代它。
UserDatabaseRealm 不適合大規(guī)模安裝。它適合小規(guī)模且相對(duì)靜態(tài)的環(huán)境。
JAASRealm 使用并不廣泛,因此也不如其他幾個(gè) Realm 成熟。在未進(jìn)行大量測(cè)試之前,建議不采用這種 Realm。
默認(rèn),Realm 并不能實(shí)現(xiàn)賬戶(hù)鎖定。這就給暴力破解者帶來(lái)了方便。要想防范這一點(diǎn),需要將 Realm 包裝在 LockOutRealm 中。
manager 組件用來(lái)生成會(huì)話(huà) ID。
可以利用 randomClass
屬性來(lái)改變生成隨機(jī)會(huì)話(huà) ID 的類(lèi)。
可以利用 sessionIdLength
屬性來(lái)改變會(huì)話(huà) ID 的長(zhǎng)度。
將系統(tǒng)屬性 org.apache.catalina.connector.RECYCLE_FACADES
設(shè)為 true
,將為每一個(gè)請(qǐng)求創(chuàng)建一個(gè)新的門(mén)面(facade)對(duì)象,這能減少因?yàn)閼?yīng)用 bug 而將一個(gè)請(qǐng)求中數(shù)據(jù)暴露給其他請(qǐng)求的風(fēng)險(xiǎn)。
系統(tǒng)屬性 org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH
和 org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH
允許對(duì)請(qǐng)求 URI 的非標(biāo)準(zhǔn)解析。使用這些選項(xiàng),當(dāng)處于反向代理后面時(shí),攻擊者可以繞過(guò)由代理所強(qiáng)制設(shè)定的各種安全限制。
如果禁用系統(tǒng)屬性 org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER
可以會(huì)帶來(lái)不利后果。許多違反 RFC2616 的用戶(hù)代理在應(yīng)該使用 ISO-8859-1 的規(guī)范強(qiáng)制默認(rèn)值時(shí),試圖猜測(cè)文本媒體類(lèi)型的字符編碼。一些瀏覽器會(huì)解析為 UTF-7 編碼,這樣做的后果是:如果某一響應(yīng)包含的字符對(duì) ISO-8859-1 是安全的,但如果解析為 UTF-7,卻能觸發(fā) XSS 漏洞。
如果Web 應(yīng)用中默認(rèn)的 conf/web.xml
和 WEB-INF/web.xml
文件定義了本文提到的組件,》》
在配置 DefaultServlet 時(shí),將 readonly
設(shè)為 true
。將其變?yōu)?false
能讓客戶(hù)端刪除或修改服務(wù)器上的靜態(tài)資源,進(jìn)而上傳新的資源。由于不需要認(rèn)證,故而通常也不需要改變。
將 DefaultServlet
的 listings
設(shè)為 false
。之所以這樣設(shè)置,不是因?yàn)樵试S目錄列表是不安全之舉,而是因?yàn)橐獙?duì)包含數(shù)千個(gè)文件的目錄生產(chǎn)目錄列表,會(huì)大量消耗計(jì)算資源,會(huì)容易導(dǎo)致 DOS 攻擊。
DefaultServlet
的 showServerInfo
設(shè)為 true
。當(dāng)啟用目錄列表后,Tomcat 版本號(hào)就會(huì)包含在發(fā)送給客戶(hù)端的響應(yīng)中。為了避免這一點(diǎn),可以將 DefaultServlet
的 showServerInfo
設(shè)為 false
。另一種方法是,另外,通過(guò)創(chuàng)建帶有下列內(nèi)容的 CATALINA_BASE/lib/org/apache/catalina/util/ServerInfo.properties
文件,可以改變版本號(hào)。
server.info=Apache Tomcat/8.0.x
根據(jù)需要來(lái)改變?cè)撝?。注意,這也會(huì)改變一些管理工具所報(bào)告的版本號(hào),可能難于確定實(shí)際安裝的版本號(hào)。CATALINA_HOME/bin/version.bat|sh
腳本依然能夠報(bào)告版本號(hào)。
可以設(shè)置 FailedRequestFilter
來(lái)拒絕那些請(qǐng)求參數(shù)解析時(shí)發(fā)生錯(cuò)誤的請(qǐng)求。沒(méi)有過(guò)濾器,默認(rèn)行為是忽略無(wú)效或過(guò)多的參數(shù)。
HttpHeaderSecurityFilter
可以為響應(yīng)添加報(bào)頭來(lái)提高安全性。如果客戶(hù)端直接訪(fǎng)問(wèn) Tomcat,你可能就需要啟用這個(gè)過(guò)濾器以及它所設(shè)定的所有報(bào)頭(除非應(yīng)用已經(jīng)設(shè)置過(guò)它們)。如果通過(guò)反向代理訪(fǎng)問(wèn) Tomcat,該過(guò)濾器的配置需要與反向代理所設(shè)置的任何報(bào)頭相協(xié)調(diào)。
BASIC 與 FORM 驗(yàn)證會(huì)將用戶(hù)名及密碼存為明文。在不受信任的網(wǎng)絡(luò)情況下,使用這種認(rèn)證機(jī)制的 Web 應(yīng)用和客戶(hù)端間的連接必須使用 SSL。
會(huì)話(huà) cookie 加上已認(rèn)證用戶(hù),基本上就將用戶(hù)密碼擺在攻擊者面前了,無(wú)論何時(shí)給予跟密碼級(jí)別相同的保護(hù)。通常這就需要經(jīng)過(guò) SSL 來(lái)認(rèn)證,或者在整個(gè)會(huì)話(huà)期間都使用 SSL。
更多建議: