跳到主要內容

Apache Http Header

安裝了Apache後,總是要注意安全設定,而每次重灌後,總是容易忘東忘西...,所以就把一些基礎的筆記紀錄一下。

這次要設定的是標頭(Header)資訊,為了不讓別人知道自己伺服器資訊,至少要把Header中與伺服器相關的資訊關閉或是不顯示詳細資訊。

要如何知道自己傳送出去的Header呢?
以下用php簡單寫了一個範例程式
<?php
//要測試的網址
$url = 'www.google.com';
$timeout = 5;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

$header = curl_exec($ch);
curl_close($ch);

echo $header;
?>

這樣就可以取得header資訊 :P。(curl_setopt詳細內容
如果不想寫程式,當然有現成的工具可測試。
http://www.webconfs.com/http-header-check.php

一般預設的顯示資料如下(以目前使用的伺服器為範例)
Date: Fri, 22 Feb 2013 12:15:03 GMT
Server: Apache/2.2.15 (CentOS)
Location: index.v
Content-Length: 0
Content-Type: text/html; charset=UTF-8

設定完Apache設定檔後顯示的資料如下。
Date: Fri, 22 Feb 2013 12:17:29 GMT
Server: Apache
Location: index.v
Content-Length: 0
Content-Type: text/html; charset=UTF-8

很明顯的在Server這裡Apache少了詳細資訊,只保留Apache。
要怎樣才能做到呢?

請在Apache設定檔加入以下幾個資訊,或是修改值。
ServerTokens Prod
ServerSignature Off
TraceEnable Off


ServerTokens - 回傳標頭資訊時,Apache顯示方式,根據官方範例(上面是設定,下面是顯示結果)
ServerTokens Prod[uctOnly]
    Server sends (e.g.): Server: Apache

ServerTokens Major
    Server sends (e.g.): Server: Apache/2

ServerTokens Minor
    Server sends (e.g.): Server: Apache/2.0

ServerTokens Min[imal]
    Server sends (e.g.): Server: Apache/2.0.41

ServerTokens OS
    Server sends (e.g.): Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified)
    Server sends (e.g.): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

ServerSignature - 是否在產生錯誤頁面或其他資訊時,顯示Apache版本。(不過在Apache 2.0.44版本後,都是由ServerTokens控制。)

TraceEnable - 預設是開啟,允許 Trace request (RFC 2616)。關閉後只會造成405 error(找不到內容)

如果還想要進一步去設定Header資訊,可以參考mod_headers

附註:如果有顯示PHP的資訊,可以在PHP的設定檔加入expose_php = Off,就不會顯示PHP的資訊囉!

留言

這個網誌中的熱門文章

What is phpize

What is phpize According to the PHP official document : The phpize command is used to prepare the build environment for a PHP extension. If you need to build such an extension that from github or another code repositories, you can use  build tools to perform the build manually.