[PHP] przesyłanie danych między serwisami

Witam, potrzebuję poprawić kod, który ma przesyłać dane nt rezerwacji między serwisami bookującymi. Ja w kodzie nie widzę błędu, być może po prostu mam za mało doświadczenia w temacie żeby zobaczyć o co chodzi. Kod ma przesyłać link z edytowanej przeze mnie strony do serwisu Travanto wg wytycznych opisanych tutaj: https://connect.travanto.de/wiki/api:services:occupancies
Jeśli ktoś miałby ochotę zajrzeć, mógłby coś podpowiedzieć byłoby super, sam próbuję więcej doczytać w temacie, ale dobry tip na pewno usprawniłby dojście do celu :wink:
Kod przesyłający obecnie wygląda tak (serwis jest stary, wersja php kodu 5.3.3):

<?php error_reporting(0); include 'config/config.php'; $jahr = 0; $tag = 0; $monat = 0; $vacancy = 0; if (isset ($_GET['objid'])) { $obj_id = $_GET['objid']; mysql_connect("$dbhost", "$dbuser", "$dbpass")or die("cannot connect"); mysql_select_db("$dbname")or die("kann DB nicht öffnen!"); $result = mysql_query("SELECT jahr, tag, monat, vacancy FROM travanto_vacancy WHERE obj_id = '$obj_id'"); while($row = mysql_fetch_array($result)) { $jahr = $row["jahr"]; $tag = $row["tag"]; $monat = $row["monat"]; $vacancy = $row["vacancy"]; } $dom = new DOMDocument('1.0', 'iso-8859-1'); $root = $dom->createElement('Response'); $dom->appendChild($root); $root->appendChild($firstNode = $dom->createElement("StartDate" , $jahr.'-'.$monat.'-'.$tag)); $root->appendChild($firstNode = $dom->createElement("Vacancy" , $vacancy)); header('Content-type: text/xml; iso-8859-1'); echo $dom->saveXML(); } ?>

PHP 5.3 jest niewspierane od 6 lat. Od 2014 roku.
Używanie go jest nie do przyjęcia, a pomoc z kodem w tej wersji niemorlana. Najpierw zaktualizuj PHP i dopasuj kod do wspieranej wersji PHP.

Dlaczego tak twierdzisz?

Bo od 6 lat nie są do niego wydawane poprawki bezpieczeństwa.

A jakie niebezpieczeństwo ma ta wersja PHP przy poprawnie skonfigurowanym serwerze i bezpiecznie napisanym skrypcie?
Głównym wektorem ataków są błędy konfiguracyjne w infrastrukturze i dziury w kodzie samego skryptu.

Zupełnie nie rozumiesz problemu. Serwer może być skonfigurowany bezbłędnie, skrypt może być napisany poprawnie ale całość nadal nie będzie odporna na podatności w samym interpreterze PHP, który można atakować z różnych stron.

To jest skandal.

1 polubienie

Przy wyżej wymienionych założeniach w jaki sposób chciałbyś wykorzystać tą podatność? Żeby to zrobić musiałbyś umieścić swój kod na serwerze a potem go wykonać, a żeby to zrobić musi albo serwer mieć lukę w konfiguracji, albo skrypt. Przy czym jeśli masz taką lukę to po co wykorzystywać błąd w parserze PHP? Jak masz możliwość wgrania i wykonania swojego kodu na serwer to są inne bardziej efektywne wektory ataków niż parser PHP.

Jako, że nie mam ochoty na uczenie Cię podstaw security przemyśl sobie choćby jeden z wielu możliwych scenariuszy. Pomyśl, że PHP ma błąd w przetwarzaniu argumentów skryptu, którego nie da się odsiać na poziomie webservera, bo wycięcie musiałby być zbyt ogólne. Załatwione, poprawność skryptu nie ma znaczenia, bo bug następuje poziom wyżej, konfiguracja serwera nie ratuje, bo nie można jej ograniczyć nie psując istotnej funkcjonalności. A to tylko jeden z wielu scenariuszy zarówno lokalnych jak i zdalnych.

Czy jeśli kod przesyła/pobiera informacje spoza tak super zabezpieczonego i skonfigurowanego serwera, to nie jest już wektor ataku? Choćby głupie przepełnienie bufora, albo inna podatność?

F*ck my life … założyłem w pośpiechu że ma najnowszą wersję 5.3 gdzie prawie wszystkie takie podatności już były wykryte i zostały poprawione, ale teraz widzę, że używa jednego z pierwszych wydań 5.3. W tym wypadku nawet nie trzeba mocno grzebać bo wystarczy przejrzeć changelog dla wersji wyższych niż 5.3.3 i faktycznie takie kwiaty nietrudno będzie znaleźć.

To co pisałem, pisałem z założeniem że używa najnowszej wersji 5.3 czyli 5.3.29. W tedy jeśli dla niej nie ma już odkrytych luk to jest tak samo bezpieczna jak jakaś nadal wspierana wersja. Jest też jeszcze jeden aspekt którego nie wzięliście pod uwagę. Ataki mogę nie być skierowane na tak starą wersję parsera, a nie zawsze jest łatwo dowiedzieć się jaka wersja php jest używana na serwerze.

1 polubienie

Nie, oczywiście, że nie jest i nigdy nie będzie.
https://www.cvedetails.com/vulnerability-list/vendor_id-74/product_id-128/version_id-238618/PHP-PHP-5.3.29.html
Te błędy już nigdy w gałęzi 5.3 nie zostaną załatane. A mamy tam np przepełnienia bufora np. Podobnie jak kolejne, które zostaną odkryte w przyszłości. Dodatkowo część problemów odkryta w nowszych wersjach będzie też występować w starszych a nie zawsze ktokolwiek to weryfikuje więc znanych błędów jest na pewno więcej niż na tej liście.

W ogóle to nie wiem po co w ogóle cała ta dyskusja. Używanie niewspieranego oprogramowania produkcyjnie jest debilne i powinno być piętnowane.

Ostatnio mam jakiś problem na interfejsie komunikacyjnym bo to nie pierwszy raz kiedy nie byłem w stanie w klarowny sposób przekazać co mam na myśli drugiej stronie :frowning:. Albo trzeba wybrać się na urlop albo do neurologa … :confused: