跳到主要內容

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. 

Android 6.0 權限問題

因為總總原因,直到現在才重視這個問題 首先根據 官方文件所述 : 在Android 6.0 (API level 23) 之後分成兩種權限 一般權限(Normal permissions) 危險權限(Dangerous permissions) 列出危險權限的列表 Permission Group Permissions CALENDAR READ_CALENDAR WRITE_CALENDAR CAMERA CAMERA CONTACTS READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS LOCATION ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION MICROPHONE RECORD_AUDIO PHONE READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS SENSORS BODY_SENSORS SMS SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS STORAGE READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE 不論一般權限與危險權限,都一樣必須在 AndroidManifest.xml 中使用 <uses-permission> 宣告 而最大的差異在於 危險權限必須另外執行請求權限的訊息框 。 附上在 Activity 實做的儲存權限範例: ... public final static int PERMISSION_CODE = 1 ; protected boolean isStoragePermissionGranted () { if (Build. VERSION . SDK_INT >= 23 ) { String permission = android. Man...

Android 檢查GPS

首先要記得有取得GPS的權限 <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION" /> 才能檢查GPS有無開啟的狀態 public boolean isGPSEnables () { LocationManager locationManager = (LocationManager) getSystemService(Context. LOCATION_SERVICE ); return locationManager. isProviderEnabled (LocationManager. GPS_PROVIDER ); } 純粹紀錄一下檢查GPS有無開啟的程式碼~