Menghapus X-Powered-By

140
  1. Bagaimana cara menghapus header X-Powered-By di PHP? Saya menggunakan Apache Server dan saya menggunakan php 5.21. Saya tidak dapat menggunakan fungsi header_remove di php karena tidak didukung oleh 5.21. Saya menggunakan Header unset X-Powered-By, ini berfungsi di mesin lokal saya, tetapi tidak di server produksi saya.

  2. Jika php tidak mendukung header_remove () untuk ver <5.3, apakah ada alternatif lain?

Kastor
sumber
Versi PHP di produksi: PHP / 5.2.13 Versi PHP di lokal: PHP / 5.2.11 Versi Apache di produksi: Apache / 2.2.15 (Unix) Versi Apache di lokal: Apache 2.0.63 (menggunakan MAMP di Mac)
Castor
Juga hati-hati dengan telur paskah .
Pacerier

Jawaban:

240

Saya pikir itu dikendalikan oleh expose_phppengaturan di PHP.ini :

expose_php = off

Memutuskan apakah PHP dapat mengungkapkan fakta bahwa ia diinstal di server (misalnya dengan menambahkan tanda tangannya ke header server Web). Ini bukan ancaman keamanan dengan cara apa pun, tetapi memungkinkan untuk menentukan apakah Anda menggunakan PHP di server Anda atau tidak.

Tidak ada risiko keamanan langsung, tetapi seperti yang dicatat oleh David C, mengekspos versi PHP yang kedaluwarsa (dan mungkin rentan) mungkin merupakan ajakan bagi orang untuk mencoba dan menyerangnya.

Pekka
sumber
32
'Ini bukan ancaman keamanan dengan cara apapun'. Ini mungkin tidak benar untuk versi php yang lebih lama yang berjalan di server yang dihosting. Saya pernah mendengar bahwa peretas dapat mengeksploitasi 'lubang' yang terdokumentasi dengan baik di versi sebelumnya. Lebih baik menyembunyikan fakta ini ....
David
14
Menjadi "sepenuhnya up-to-date" adalah imo positif palsu. Lebih baik menonaktifkan informasi sama sekali. Ada kemungkinan bahwa versi yang dirilis kemarin sudah memiliki ancaman yang terbuka, dan bergantung pada seberapa agresif siklus peningkatan Anda, mungkin demikian untuk beberapa waktu. Lebih baik membuat mereka terus menebak-nebak. Saya menyembunyikan sebanyak yang saya bisa termasuk versi nginx juga.
Mike Purcell
2
@David, Maksudnya itu tidak menambah ancaman keamanan yang sudah kamu hadapi.
Pacerier
7
Anda dapat dan harus dengan sengaja melaporkan nilai buruk untuk header X-Powered-By. Misalnya jika Anda menjalankan PHP, Anda dapat mengirim header X-Powered-By: ASP.NET sebagai cara untuk memperlambat penyerang agar tidak mengidentifikasi konfigurasi perangkat lunak di server web Anda. Bawa penyerang Anda mengejar angsa liar untuk memperlambat pemindaian mereka.
Chaoix
3
@Pacerier, tentu saja menambah ancaman keamanan. Peretas memindai 1000 situs untuk mencari mangsa yang mudah ... memiliki tajuk ini ketika pada versi lama berarti server sekarang menjadi target ketika sebelumnya akan diabaikan. Ini menambah ancaman keamanan secara langsung. Bahkan tetap up-to-date, itu bisa menambah ancaman dalam kurun waktu singkat di mana ada pembaruan yang belum diterapkan.
Nigel B. Peck
52

Jika Anda tidak dapat menonaktifkan direktif expose_php untuk menonaktifkan banyak bicara PHP (memerlukan akses ke php.ini ), Anda dapat menggunakan arahan ApacheHeader untuk menghapus bidang header:

Header unset X-Powered-By
Gumbo
sumber
3
Itu tidak berfungsi di server produksi saya. Ini bekerja pada mesin lokal saya. Ada ide mengapa ini terjadi?
Castor
@Castor Versi server apa yang Anda gunakan secara lokal dan pada mesin produksi? Adakah perbedaan dalam pengaturan PHP?
Pekka
Versi PHP di produksi: PHP / 5.2.13 Versi PHP di lokal: PHP / 5.2.11 Versi Apache di produksi: Apache / 2.2.15 (Unix) Versi Apache di lokal: Apache 2.0.63 (menggunakan MAMP di Mac)
Castor
1
@Castor: Apakah mod_headers tersedia di kedua server? Dan apakah Anda diizinkan untuk mengganti FileInfo (lihat httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo
@ Gumbo Ya, mod_headers tersedia di kedua server. Dan ya, saya diizinkan untuk mengganti FileInfo.
Castor
25
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
luchaninov
sumber
14

Jika Anda memiliki akses ke php.ini, set expose_php = Off.

Arseni Mourzenko
sumber
3
Nah, saya mendapatkan ini bekerja dari kode php. header ("X-Powered-By:"); Menyetel tajuk X-Powered-By menjadi tidak menghapusnya. Terima kasih atas waktu dan saran Anda.
Castor
4

Jika Anda menggunakan FastCGI coba:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
sumber
4

Coba tambahkan panggilan header () sebelum mengirim header, seperti:

header('X-Powered-By: Our company\'s development team');

terlepas dari pengaturan expose_php di php.ini

Daniel Faure
sumber
0

Solusi ini berhasil untuk saya :)

Harap tambahkan baris di bawah ini dalam skrip dan periksa.

Pengaturan level Ngnix / Apache dll mungkin tidak diperlukan.

header("Server:");
Berjalan
sumber