1. 程式人生 > 實用技巧 >Web 常見漏洞

Web 常見漏洞

檢測到目標URL存在http host頭攻擊漏洞

描述:為了方便的獲得網站域名,開發人員一般依賴於HTTP Host header。例如,在php裡用_SERVER["HTTP_HOST"]。但是這個header是不可信賴的,如果應用程式沒有對host header值進行處理,就有可能造成惡意程式碼的傳入。

解決辦法

web應用程式應該使用SERVER_NAME而不是host header。
在Apache和Nginx裡可以通過設定一個虛擬機器來記錄所有的非法host header。在Nginx裡還可以通過指定一個SERVER_NAME名單,Apache也可以通過指定一個SERVER_NAME名單並開啟UseCanonicalName選項。

檢測到目標站點可能存在跨站請求偽造漏洞

描述:跨站請求偽造(CSRF)漏洞是指攻擊者通過其他方法(如社會工程學),誘導web應用的合法授權使用者在不知情的情況下執行攻擊者預期的操作。成功的跨站請求偽造攻擊可造成攻擊者以其他使用者的許可權執行指定的操作,如修改使用者資料,竊取使用者資訊等等。
跨站請求偽造攻擊的嚴重性依賴於被攻擊使用者的許可權和目標web應用的具體業務。

解決方法

對於重要操作,建議採用POST方法替代GET方法,可有效提高攻擊者利用的難度。 或者在表單中增加csrf驗證欄位或驗證碼,並在完成操作前給予使用者提示資訊。 在伺服器端增加Referer請求欄位的驗證。

檢測到目標URL啟用了不安全的HTTP方法

描述:檢測到目標Web伺服器配置成允許下列其中一個(或多個)HTTP 方法:DELETE, SEARCH,COPY,MOVE, PROPFIND, PROPPATCH, MKCOL ,LOCK ,UNLOCK 。
這些方法表示可能在伺服器上使用了 WebDAV。由於dav方法允許客戶端操縱伺服器上的檔案,如果沒有合理配置dav,有可能允許未授權的使用者對其進行利用,修改伺服器上的檔案。

解決方法

修改WEB應用的web.xml部署檔案。在裡面插入下面幾行程式碼就搞定了,把需要遮蔽的方法加在裡面。如果應用包比較多也沒必要一個個改,直接修改Tomcat的web.xml就可以了,這樣在Tomcat中執行的例項都會有效。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>baseproject</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>HEAD</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint></auth-constraint>
</security-constraint>

<security-constraint>用於限制對資源的訪問;

<auth-constraint>用於限制那些角色可以訪問資源,這裡設定為空就是禁止所有角色使用者訪問;

<url-pattern>指定需要驗證的資源

<http-method>指定那些方法需要驗證

檢測到目標伺服器啟用了OPTIONS方法

描述:OPTIONS方法是用於請求獲得由Request-URI標識的資源在請求/響應的通訊過程中可以使用的功能選項。通過這個方法,客戶端可以在採取具體資源請求之前,決定對該資源採取何種必要措施,或者瞭解伺服器的效能。OPTIONS方法可能會暴露一些敏感資訊,這些資訊將幫助攻擊者準備更進一步的攻擊。

解決方法

修改web.xml檔案的協議

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">	

在web.xml新增如下程式碼

<security-constraint>
    <web-resource-collection>
        <web-resource-name>baseproject</web-resource-name>
        <url-pattern>/*</url-pattern>
		<http-method>PUT</http-method>
		<http-method>DELETE</http-method>
		<http-method>HEAD</http-method>
		<http-method>OPTIONS</http-method>
		<http-method>TRACE</http-method>
	</web-resource-collection>
	<auth-constraint>
		<description>baseproject</description>
		<role-name>All Role</role-name>
	</auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

檢測到目標伺服器存在應用程式錯誤

描述:如果者通過偽造包含非應用程式預期的引數或引數值的請求,來探測應用程式(如以下示例所示),那麼應用程式可能會進入易受的未定義狀態。 者可以從應用程式對該請求的響應中獲取有用的資訊,且可利用該資訊,以找出應用程式的弱點。
例如,如果引數欄位應該是單引號括起來的字串(如在 ASP 指令碼或 SQL 查詢中),那麼注入的單引號將會提前終止字串流,從而更改指令碼的正常流程/語法。
錯誤訊息中洩露重要資訊的另一個原因,是指令碼編制引擎、Web 伺服器或資料庫配置錯誤。

以下是一些不同的變體:
[1] 除去引數
[2] 除去引數值
[3] 將引數值設定為空值
[4] 將引數值設定為數字溢位(+/- 99999999)
[5] 將引數值設定為危險字元,如 ' " ' " ) ;
[6] 將某字串附加到數字引數值

解決方法

[1] 檢查入局請求,以瞭解所有預期的引數和值是否存在。 當引數缺失時,發出適當的錯誤訊息,或使用預設值。
[2] 應用程式應驗證其輸入是否由有效字元組成(解碼後)。 例如,應拒絕包含空位元組(編碼為 %00)、單引號、引號等的輸入值。
[3] 確保值符合預期範圍和型別。 如果應用程式預期特定引數具有特定集合中的值,那麼該應用程式應確保其接收的值確實屬於該集合。 例如,如果應用程式預期值在 10..99 範圍內,那麼就該確保該值確實是數字,且在 10..99 範圍內。
[4] 驗證資料屬於提供給客戶端的集合。
[5] 請勿在生產環境中輸出除錯錯誤訊息和異常。

點選劫持:X-Frame-Options未配置

描述:點選劫持(ClickJacking)是一種視覺上的欺騙手段。攻擊者使用一個透明的、不可見的iframe,覆蓋在一個網頁上,然後誘使使用者在該網頁上進行操作,此時使用者將在不知情的情況下點選透明的iframe頁面。通過調整iframe頁面的位置,可以誘使使用者恰好點選在iframe頁面的一些功能性按鈕上。
HTTP 響應頭資訊中的X-Frame-Options,可以指示瀏覽器是否應該載入一個 iframe 中的頁面。如果伺服器響應頭資訊中沒有X-Frame-Options,則該網站存在ClickJacking攻擊風險。網站可以通過設定 X-Frame-Options 阻止站點內的頁面被其他頁面嵌入從而防止點選劫持。

解決方法

Nginx:

配置 nginx 傳送 X-Frame-Options 響應頭,把下面這行新增到 'http', 'server' 或者 'location' 的配置中:

add_header X-Frame-Options SAMEORIGIN;

Apache:

配置 Apache 在所有頁面上傳送 X-Frame-Options 響應頭,需要把下面這行新增到 'site' 的配置中:
1、開啟httpd.conf 找到LoadModule headers_module modules/mod_headers.so模組,去掉前面的# 號 啟用該模組
2、在此處加上 Header always append X-Frame-Options SAMEORIGIN

<IfModule headers_module>
RequestHeader unset DNT env=bad_DNT
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

檢測到目標URL存在電子郵件地址模式

描述:Spambot 搜尋因特網站點,開始查詢電子郵件地址來構建傳送自發電子郵件(垃圾郵件)的郵件列表。如果檢測到含有一或多個電子郵件地址的響應,可供利用以傳送垃圾郵件。而且,找到的電子郵件地址也可能是專用電子郵件地址,對於一般大眾應是不可訪問的。

解決方法

從 Web 站點中除去任何電子郵件地址,使惡意的使用者無從利用。

jQuery 存在 XSS 漏洞

描述:jQuery 是一個 JavaScript 庫。 jQuery 在過濾使用者輸入資料時,所使用的正則表示式存在缺陷,可能導致 location.hash 跨站漏洞。

解決方法

升級jquery版本

洩露軟體版本資訊

描述:在瀏覽器裡面洩露程式錯誤處理資訊或軟體版本等資訊,可能導致進一步的攻擊。

解決方法

隱藏apache版本資訊:

開啟 httpd.conf,加入以下兩行: 
ServerTokens ProductOnly 
ServerSignature Off

隱藏Nginx版本資訊:

開啟 nginx.conf,在http { }里加上: 
server_tokens off;