Wykład11PHP szczegółyintymne,str1 Udostępnianie klientom zasobów serwera SERWER programy w PHP Wykład11PHP szczegółyintymne,str2 Udostępnianie klientom zasobów serwera Serwer wykonuje obliczenia zlecone przez klienta i odsyła mu wyniki Serwer dysponuje mocami obliczeniowymi i zasobami danych niedostępnymi bezpośrednio klientom; klient dysponuje tylko przeglądarką HTML Przykład z udostępnianiem klientom działania programu gnuplot był naiwny, ale podobnie mogą być udostępniane poważniejsze usługi Zamiast programu gnuplot, serwer najczęściej obsluguje bazę danych;dlategoczęstouważasię,żephpmazwiązekzsql językiem programowania baz danych Współpraca klienta z serwerem jest wrażliwa na ataki, musi więc być oprogramowana z troską o bezpieczeństwo
Niezabezpieczona witryna Wykład11PHP szczegółyintymne,str3 strona fikcyjnej firmy Wykład11PHP szczegółyintymne,str4 Niezabezpieczona witryna cz PHP-owa <?php define("haslo","01234"); if(isset($request[ haslo ])) { if($ REQUEST[ haslo ] == constant("haslo")) { print("<span style= background-color:#aaffaa; font-size:120% >"); print("<b>masz uprawnienia administratora</b>"); print("</span><br>\n"); else { print("<span style= background-color:#ffaaaa; font-size:120% >"); print("<b>nie masz uprawnien administratora</b>"); print("</span><br>\n"); if(isset($request["co"])) include$request["co"];?>
Wykład11PHP szczegółyintymne,str5 Niezabezpieczona witryna cz HTML-owa <h1>ofermol z oo</h1> <p> Co chcesz o nas wiedziec?-- kliknij: <form action="ofermolphp" method="post"> <input type="radio" name="co" value="ofertaphp"> NASZA OFERTA<br> <input type="radio" name="co" value="kontaktphp"> KONTAKT DO NAS<br> <input type="submit" value="info"> </form><br> </p> <p> Jesli jestes administratorem, podaj haslo: <form action="ofermolphp" method="post"> <input type="text" name="haslo"><br> <input type="submit" value="zaloguj"> </form> </p> Najlepsze w kraju gwajdolnice, murkwie i patochlony! 01-234 Berdyczow Wykład11PHP szczegółyintymne,str6 Niezabezpieczona witryna atak Plik atakphp: <?php print("haslo:"haslo);?> Wpisać do przeglądarki adres: http://serwer/ofermolphp?co=atakphp Ten atak jest niepoważny, dopóki plik atakphp znajduje się na serwerze Ale include potrafi dołączyć do pliku PHP również fragmenty, umieszczone gdziekolwiek indziej; np u napastnika To jest bardzo znana luka w bezpieczeństwie(tzw wstrzykiwanie kodu code injection), więc możliwość inkludowania plików nielokalnych jest wyłączona na większości serwerów PHP
Logowanie i hasła Wykład11PHP szczegółyintymne,str7 HTML: <form action="loginphp"> Uzytkownik: <input type="text" name="user"><br> Haslo: <input type="text" name="pass"><br> <input type="submit" value="juz"> </form> ŹLE! wszyscy widzą hasło Logowanie i hasła Wykład11PHP szczegółyintymne,str8 HTML: <form action="loginphp"> Uzytkownik: <input type="text" name="user"><br> Haslo: <input type="password" name="pass"><br> <input type="submit" value="juz"> </form> DOBRZE!
Logowanie i hasła Wykład11PHP szczegółyintymne,str9 PHP: if(isset($ REQUEST[ user ])&& isset($ REQUEST[ pass ])) if($ REQUEST[ user ] =="Kasia"&& $REQUEST[ pass ],"st"=="ab1cd2") { wpuścić else { niewpuścić else { jeszczeniezalogowane Hasło na serwerze zapisane jawnie Haker może przejąć hasła wszystkich klientów i zalogować się z ich uprawnieniami Logowanie i hasła Wykład 11 PHP szczegóły intymne, str 10 PHP: if(isset($ REQUEST[ user ])&& isset($ REQUEST[ pass ])) if($ REQUEST[ user ] =="Kasia"&& crypt($ REQUEST[ pass ],"st") =="st4x5m0nyiree") { wpuścić else { niewpuścić else { jeszczeniezalogowane Hasła na serwerze zakodowane funkcją crypt(,"st") Nawet po zdobyciu wszystkich zakodowanych haseł, haker nie będzie mógł się zalogować Ale jeśli klient zapomni hasła, to administrator serwera nie może mu go przypomnieć; może tylko pozwolić mu na ustalenie nowego hasła
Przeplatanie PHP z HTML Wykład 11 PHP szczegóły intymne, str 11 <?php if(isset($ REQUEST[ jasno ])&& $ REQUEST[ jasno ]==1) {?> HTML 1 <?php else {?> HTML 2 <?php?> Kod PHP można swobodnie mieszać z kodem HTML Przełączanie na PHP(znacznik <?php) oraz na HTML(znacznik?>) może się znajdować nawet wewnątrz nawiasów {