This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!
Programiści mają to do siebie, że uwielbiają się bawić. Żaden z nas nie jest do końca takim no-life’em, który potrafi tylko cały dzień patrzeć na tysiące linii kodu, szukając błędu bądź też programując nowe funkcje. Czasem trzeba się też “rozerwać”. ;] Jako, że propozycja oderwania się od ekranu jest zwykle przyjmowana z ciężkim westchnięciem, w cenie jest umiejętność “zabawienia się” pozostając cały czas w “swoim świecie”. Można to robić na różne sposoby, jednym nich, którego przykład opisuję w niniejszym artykule, jest umieszczanie w kodzie nieudokumentowanych funkcji, które mogą być aktywowane wyłącznie przez osoby które o nich wiedzą, bądź dogłębnie przestudiowały źródła projektu.
Twórcy PHP najwyraźniej także chcieli się “zabawić”, ponieważ interpreter tego języka reaguje na pewne specyficzne parametry podane do skryptu, wyświetlając nieco inną, niż oczekiwana, zawartość strony. Od strony kodu wygląda to następująco:
#define PHP_EGG_LOGO_GUID "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
#define ZEND_LOGO_GUID "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
#define PHP_CREDITS_GUID "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"```
Definicje zostały umieszczone w pliku:
```php-src/ext/standard/info.h```
Oznacza to, że wpisując jako query string podane niżej identyfikatory możemy otrzymać następującą zawartość: [kliknij w link, aby zobaczyć ;]]
[1] <a href="?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000">?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000</a> - wyświetla "creditsy"
[2] <a href="?=PHPE9568F36-D428-11d2-A769-00AA001ACF42">?=PHPE9568F36-D428-11d2-A769-00AA001ACF42</a> - poszarpane logo PHP
[3] <a href="?=PHPE9568F34-D428-11d2-A769-00AA001ACF42">?=PHPE9568F34-D428-11d2-A769-00AA001ACF42</a> - "zwykłe" logo PHP
[4] <a href="?=PHPE9568F35-D428-11d2-A769-00AA001ACF42">?=PHPE9568F35-D428-11d2-A769-00AA001ACF42</a> - logo Zend Engine
Od razu uspokajam tych, którzy mogą wziąć to za lukę w bezpieczeństwie skryptów, nie ma się czego bać, potencjalny napastnik będzie w stanie tylko stwierdzić, czy strona używa interpretera PHP. Może to być jednak problem w przypadku posiadania serwera ze starszą wersją, posiadającą znane błędy. Więc jeśli naprawdę komuś zależy na zablokowaniu takiego zachowania, rozwiązanie jest dosyć proste - należy wyłączyć [ustawić na "off"] dyrektywę "expose_php" bezpośrednio w pliku php.ini. Można też do tego celu wykorzystać funkcję ini_set():
```phpini_set('expose_php', 'off');```
Lub dodać dyrektywę:
```php_flag expose_php off```
w pliku .htaccess. Domyślna wartość tego ustawienia to "on".
Wiele innych programów także zawiera takie niespodzianki, jednakże ze względu na to, że sam programuję w PHP, ten temat jest mi bardzo bliski. Jeśli macie jakieś inne "smaczki", niekoniecznie związane z tym językiem, proszę, podzielcie się w komentarzach. ;]