Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


Lynx е един от първите текстови браузъри. Не поддържа таблици и JavaScript. Работи бързо, предлага голямо количество настройки и се явява незаменим помощник в терминала. Например, така изглежда предната тема в моя блог.
Командата за целта е:
lynx [адрес на сайта]

текстови браузър lynx


Някои дизайнери по такъв начин проверяват своите уеб-проекти и как същия е възприеман от ботове и сканиращи паяци.

Резултатът от следната команда стана повод за тази среща.
lynx -head -mime_header https://www.google.ru/

По този начин успяваме да прочетем заглавките (headers), които изпраща сървърът към нашия браузър.

текстови браузър lynx


От горе на долу може да се каже, че Google ползва по-стар протокол (вер. 1.0), за сървър обявява лаконичното gws (Google Web Server). Никакъв намек за сървърен език. Останалото е скучна бисквитка и плява.

Хайде да видим отговора на локалния ми сървър, като ползваме споменатата команда.
lynx -head -mime_header http://prodesktop/index.php

браузър lynx-заглавки от Localhost


Издайнически лъсват две заглавки, които информират за версия на сървър Apache и версия на PHP. Тази информация е жокер за недоброжелатели на вашия сайт и логично ще скрием. Тук се връщам към тема Базова защита на Ubuntu Server 10.04, където бегло засегнах файл security и ще се опитам, да направя ревизия.

ОК, нека започнем и определим какво точно имаме на борда.

Версия OS
lsb_release -a
profruit@prodesktop:~$ lsb_release -a
Description: Ubuntu 10.04.4 LTS
Release: 10.04
Codename: lucid
Версия PHP
php --version
profruit@prodesktop:~$ php --version
PHP 5.4.17-1~lucid+1 (cli) (built: Jul 17 2013 16:42:57) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Версия Apache
apache2 -v

или така, въпрос на вкус:
/usr/sbin/apache2ctl status | grep 'Server Version'
profruit@prodesktop:~$ apache2 -v
Server version: Apache/2.2.14 (Ubuntu)

Спиране на заглавка X-Powered-By

За нагледност на резултата ще ползвам вграден снифер LiveHTTPHeaders в браузър Firefox 24.0 и помощен файл headers.php.

headers.php
<?php header("X-Powered-By: ASP.NET"); ?>
<?php /*header('Content-Type:text/html; charset=UTF-8' );*/ ?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>X-Powered-By</title>
    </head>
    <body>
  
 <?php 
  echo '<pre>'.print_r(headers_list(), true).'</pre>';
 ?>

    </body>
</html>
Съдържанието в заглавката от първи ред е подвеждащо. Лъже, че се движи от ASP.NET. Резултатът на това действие ще извежда функция на протокола HTTP в PHP - headers_list.

Резултат.
LiveHTTPHeaders

Желаното е постигнато, но някак детски изглежда заглавката да показва едно, а в адресната лента на браузъра, да се вижда разширение *.php.

И още, разработчиците на PHP облекчават подхода ни в този случай с функция header_remove. Тази функция премахва предварително установени заглавки, от което нашия файл придобива този вид.

headers.php
<?php header("X-Powered-By: ASP.NET"); ?>
<?php /*header('Content-Type:text/html; charset=UTF-8' );*/ ?>
<?php header_remove(); ?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>X-Powered-By</title>
    </head>
    <body>
  
 <?php 
  echo '<pre>'.print_r(headers_list(), true).'</pre>';
 ?>

    </body>
</html>
Нека видим резултата в LiveHTTPHeaders. За целта копирам на готово.
HTTP/1.1 200 OK
Date: Fri, 20 Sep 2013 20:08:24 GMT
Server: Apache/2.2.14 (Ubuntu) PHP/5.4.17-1~lucid+1
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 166
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
X-Pad: avoid browser bug

Няма помен от заглавка X-Powered-By, но се появи нежелана X-Pad.

Като цяло тези начини са непрактични. Налага се в всеки файл от сайта да се добавят въпросните заглавки, за да се прикрие версията на PHP. Генерално решение на проблема е изключване на директива expose_php в php.ini. За целта:

Отваряме с редактор php.ini
sudo gedit /etc/php5/apache2/php.ini

и редактираме
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no 
; security threat in any way, but it makes it possible to determine whether 
; you use PHP on your server or not.
; http://php.net/expose-php
expose_php = Off
след което рестартираме индианеца.
sudo /etc/init.d/apache2 restart

Премахваме всички header() в началото на файл headers.php, от което остава един HTML.

Отново гледаме в снифера и ето резултата.
LiveHTTPHeaders

А в браузъра, функция headers_list() печати само това.
Array
(
    [0] => Content-type: text/html
)
Отлично! Целта е постигната. Сървърът не изпраща повече заглавка X-Powered-By, а функцията на PHP не я чете. Това е моят избор!

Пореден начин за спиране на заглавка X-Powered-By

Накратко. PHP в системи Debian/Ubuntu е инсталиран като модул на сървър Apache. Това е php5_module (shared). Този начин предполага сървър Apache, да филтрира заглавка X-Powered-By подавана от PHP, респективно php5_module. За целта е нужен Apache-модул headers.

активация на модул headers
sudo a2enmod headers

след което добавяне на този израз в файл /etc/apache2/conf.d/security
#
# Hide X-Powered-By and Server headers
Header unset X-Powered-By
и нужен рестарт на сървъра, за да влязат промените в сила. В резултат получаваме това.
Header unset X-Powered-By

Получаваме дран-дран, недоклан. Няма X-Powered-By, но пък пръква X-Pad, отделно PHP я вижда.


Модификация на заглавка Server


Това става лесно и се свежда до редакция на директива в познатия файл
/etc/apache2/conf.d/security.

Но нека първо допълним спомената горе стара тема. Реч иде как да скрием подписа на сървъра завинаги от раз. За това са нужни супер привилегии, като условие.

Ако не е забранен преглед на каталозите (листинг на директориите) в вашия сайт, то обръщение към каталог без index файл ще даде тази възможност през уеб. Това е нежелателно и пореден жокер за недоброжелател.

Най-отдолу се вижда подписа на сървъра.
подпис на Apache

За целта редактираме така
#
#ServerSignature
ServerSignature Off

Модификация на заглавка Server постигаме след редакция на ServerTokens. Коментарите на възможните опции говорят сами за себе си, какво предлагат.
#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of:  Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Prod
Рестарт на сървъра.

Резултат.
без подпис на Apache

Веднага възниква въпрос - а може ли изобщо да се премахне заглавка Server? Краткия отговор е не.

"A number of the Apache HTTP Server developers do not want users to be able to suppress the Server header without modifying the source code or adding third-party modules. The issue comes up from time to time and is subject to change".

И за десерт.
#
# Trace Off
# изключване режим TRACE, под когото са възможни XSS атаки.
#
TraceEnable Off





до нови срещи   ^.^
21.09.2013 profruit 

0 Response to "Модификация на заглавките"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога