通常主要表現爲使用未經過校驗的字符串,解析不安全的JSON數據等。
一般流程表現爲通過客戶端提交請求給服務器,請求參數中帶有特殊構造的惡意參數(以下會舉例說明),請求發送到服務器有可能將惡意的參數保存到數據庫造成服務器安全漏洞,或者參數返回到頁面後造成導致頁面結構被破壞,引入了不期望的代碼到頁面中。
以ZCMS2.1版本中的一個XSS漏洞爲例:
在ZCMS2.2之前的版本都存在一個動態zaction地址的XSS漏洞,由於未對zaction的請求做參數處理導致所有的前端的所有zaction的動態頁面可以通過URL參數構造跨域腳本進行攻擊。
例如:http://localhost/zcms/member/login?SiteID=14&Referer= "><img%20src=@%20οnerrοr=alert(2580)%20/
訪問此地址時由於Referer參數爲進行過濾處理,導致參數被原封不動輸出到了登錄頁面,造成頁面格式錯誤,引入了不期望的代碼到頁面中。ZCMS2.2及以後的版本中修復了此問題。
2. 網站路徑泄露
主要表現爲在網站的頁面中包含了服務器的路徑信息,最常見的是由於未進行404或者500等異常錯誤的處理,導致錯誤信息直接輸出到了頁面中,可能會暴露服務器的一些路徑信息。
這類問題一般比較容易處理,危害性也比較小,主要是獲取到路徑後可能配合其他的網站漏洞實施進一步攻擊。
解決辦法:添加對404或者500等異常狀態的錯誤頁面配置,避免直接顯示錯誤日誌在頁面中。注意對頁面信息的處理,避免返回的頁面數據中包含系統路徑信息。
3. 服務器端應用程序錯誤
系統有時候會發生一些未預知到的錯誤異常,未對錯誤頁面處理可能導致異常信息被直接輸出到頁面中,異常信息會泄露系統程序的相關信息。
解決辦法:添加對404或者500等異常狀態的錯誤頁面配置,避免直接顯示錯誤日誌在頁面中。
4. Email地址泄露
主要表現在頁面中存在Email地址,可能會導致Email地址被網頁爬蟲之類的掃描工具獲取到。
解決辦法:對頁面中的Email地址在輸出錢進行特殊處理,例如將@替換成#,通過js將Email地址輸出到頁面中,或者直接將Email地址轉成圖片輸出到頁面中等等。
5. HTTP方法評估
表中標記爲危險的HTTP方法建議關掉。
HTTP |
方法 |
建議說明 |
HEAD |
安全 |
HEAD方法與GET方法的行爲類似,但服務器在響應中只返回首部。不會返回請求主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。也被認爲是安全的方法。 |
TRACE |
危險 |
服務端發起一個請求時,這個請求可能要穿過防火牆,代理,網關或其他一些應用程序。每個中間節點都可能會修改原始的HTTP請求。TRACE方法允許客戶端在最終將請求發送給服務器時,獲得請求的最終形態。 |
GET |
安全 |
GET是最常用的HTTP請求方法。通常用於 請求服務器獲取某個資源,被認爲是安全的方法。 |
PUT |
安全 |
與GET從服務器讀取文檔相反,PUT方法會向服務器寫入文件。PUT方法的語義就是讓服務器用請求的主體來創建一個由請求的URL命名的新文檔。 |
POST |
安全 |
POST方法起初是用來向服務器輸入數據的。實際上,通常會用它來支持HTML的表單。表單中填好的數據會被POST方法提交到服務器中並做進一步處理。 |
OPTIONS |
危險 |
OPTIONS方法請求Web服務器告知其支持的各種功能。可以詢問服務器通常支持哪些方法,或者對某些特殊資源支持哪些方法。該方法能夠讓客戶端不用實際訪問那些資源就能判定訪問各種資源的最優方式。 |
DELETE |
安全 |
DELETE方法能夠請求服務器刪除請求URL所指定的資源。 |
解決辦法:
apache中關閉TRACE方法:
在配置文件http.conf中添加Trace_Enable off即可,也可以在ServerRoot中配置。
apache中關閉OPTIONS方法:配置文件中添加以下配置。
1
2
3
4
5
|
< Location
/> < Limit
OPTIONS> Deny from all </ Limit > </ Location > |
nginx中關閉TRACE、OPTIONS方法:
在nginx的配置文件nginx.conf的Server段裏面添加如下代碼
1
2
3
|
if
($request_method !~* GET|POST|HEAD) { return
403; } |
重啓nginx,這樣就屏蔽了除GET/POST/HEAD以外的其他方法。
tomcat中配置方法:在web.xml中添加如下配置即可自定義需要開啓的HTTP METHODS。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< security-constraint > < web-resource-collection > < web-resource-name >fortune</ web-resource-name > < url-pattern >/*</ url-pattern > < http-method >PUT</ http-method > < http-method >DELETE</ http-method > < http-method >HEAD</ http-method > </ web-resource-collection > < auth-constraint ></ auth-constraint > </ security-constraint > < login-config > < auth-method >BASIC</ auth-method > </ login-config > |