名稱:X-Frame-Options Header未配置
漏洞描述:X-Frame-Options HTTP響應頭可以指示瀏覽器是否允許當前網頁在“frame”或“iframe”標籤中顯示,以此使網站內容不被其他站點引用和免於點擊劫持攻擊.
修復方法:設置X-Frame-Options頭,三個可選值:1、DENY:無論如何不在框架中顯示;2、SAMEORIGIN:僅在同源域名下的框架中顯示;3、ALLOW-FROM uri:僅在指定域名下的框架中顯示
具體操作方法:
//X-Frame-Options 設置
Apache :
引入mod_header模塊,配置 Header always append X-Frame-Options SAMEORIGIN
Nginx :
add_header X-Frame-Options SAMEORIGIN;
名稱:Apache http server 版本信息泄露
漏洞描述:可以獲取遠程apache http服務器的版本號
修復方法:隱藏Apache版本號以及重新編譯Apache
具體操作方法:
//server版本信息泄露
Apache:
1)、隱藏版本號:
ServerTokens Prod
ServerSignature off
隱藏版本號的缺點是在http的響應頭中還是可以看到server頭裏顯示的web服務的類型。
2)、在apache源碼包中的include/ap_release.h中找到如下信息,將BaseProduct中的名稱改變,若將洗面的version號改變,則可以不在配置文件中設置隱藏版本,起到迷惑作用。
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
#define AP_SERVER_BASEPRODUCT "Apache"
#define AP_SERVER_MAJORVERSION_NUMBER 2
#define AP_SERVER_MINORVERSION_NUMBER 4
#define AP_SERVER_PATCHLEVEL_NUMBER 32
#define AP_SERVER_DEVBUILD_BOOLEAN 0
Nginx:
隱藏版本信息:
nginx.conf http段中加入 server_tokens off;
重新編譯:
1、修改源文件 src/http/ngx_http_header_filter_module.c
static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
2、修改源文件:src/core/nginx.h
#define nginx_version 1013003
#define NGINX_VERSION "1.13.3"
#define NGINX_VER "nginx/" NGINX_VERSION
#ifdef NGX_BUILD
#define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")"
#else
#define NGINX_VER_BUILD NGINX_VER
#endif
#define NGINX_VAR "NGINX"
重新編譯安裝
名稱:http響應頭未使用x-xss-protection進行XSS過濾
參考鏈接:https://www.freebuf.com/articles/web/138769.html
漏洞描述:如果瀏覽器檢測到了含有惡意代碼的輸入被呈現在HTML文檔中,那麼這段呈現的惡意代碼要麼被刪除,要麼被轉義,惡意代碼不會被正常的渲染出來,當然了,瀏覽器是否要攔截這段惡意代碼取決於瀏覽器的XSS防護設置。
至於怎麼設置瀏覽器的XSS防護機制,其實很簡單,只要在HTTP響應報文的頭部增加一個X-XSS-Protection 字段,明確地告訴瀏覽器XSS filter/auditor該如何工作。 X-XSS-Protection 的字段有三個可選配置值:
0:表示關閉瀏覽器的XSS防護機制
1:刪除檢測到的惡意代碼, 如果響應報文中沒有看到X-XSS-Protection 字段,那麼瀏覽器就認爲X-XSS-Protection配置爲1,這是瀏覽器的默認設置
1; mode=block:如果檢測到惡意代碼,在不渲染惡意代碼
注意:設置爲1是默認選項,此選項默認設置擴大了攻擊面, 比如攻擊者可以利用這個默認設置選擇性的刪除頁面中某些腳本,且會引入新的漏洞,容易被繞過
設置爲1;mode=block 也會導致產生新的漏洞,但相對較小,一般建議設置此項
修復方法:通過web服務器,指定響應頭中設置X-XSS-protection:1;mode=block;來告訴瀏覽器該如何進行防護XSS攻擊
—具體操作方法:
Apache:Header set X-XSS-Protection "1; mode=block"
Nginx: add_header X-XSS-Protection '1; mode=block';
名稱:http響應頭x-content-options
漏洞描述:未設置此響應頭,可以導致不符合MIME類型的文件類型的響應
修復方法:通過設置"X-Content-Type-Options: nosniff"響應標頭,對 script 和 styleSheet 在執行是通過MIME 類型來過濾掉不安全的文件,需要寫的頁面指定的MIME類型必須正確且符合規範,例如:text/javascript
具體操作方法:
Apache:Header set X-Content-Type-Options nosniff
Nginx: add_header X-Content-Type-Options 'nosniff';
名稱:未禁用不安全的HTTP方法
漏洞描述:
修復方法:禁用不安全的http方法,如:option、trace、delete
具體操作方法:
//禁用不安全的HTTP請求方法
Apache:
通用方法:
1)、使用limit禁止,或者使用limitExcept允許可以被使用的方法
<LimitExcept GET POST HEAD>
Allow from all
</Limit>
...
...
2)、使用rewrite重寫規則
LoadModule rewrite_module ***/modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
版本大於2.3以上的可以使用如下方法放行允許的http請求方法:
啓用mod_allowmethods模塊
<Location "/">
AllowMethods GET POST HEAD
</Location>
Nginx禁用辦法:
server段中加入如下判斷,即可禁用除get、post、head以外的方法:
if ($request_method !~* GET|POST|HEAD) {
return 403;
}
Tomcat 禁用方式:修改web.xml
<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>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint></auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>