PHP Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP 1
Rozszerzenia PHP Plan wykładu: Bezpieczeństwo PEAR & PECL phpgroupware 2
Bezpieczeństwo (1) System operacyjny: System plików z uprawnieniami NTFS, ext2, ext3, Serwer WWW użytkownik nieuprzywilejowany: nobody, IUSR_(nazwa) prawa użytkownika uwierzytelnionego (NTLM) Szyfrowanie (HTTPS) certyfikaty autoryzacja serwera i przeglądarki 3
Bezpieczeństwo (2) Aplikacja: Bezpieczne uwierzytelnianie: w przeglądarce lub formularz-post sprawdzać czy: $HTTPS=on Kontrola parametrów formularza uruchamianie poleceń systemowych wykonanie poleceń SQL Ograniczyć dostęp do pewnych adresów IP 4
Bezpieczeństwo (3) Baza danych: Dostęp tylko przez: potoki, localhost (na jednym komputerze) ssl / tunelowanie (na różnych komputerach) Dostęp do bazy wymaga hasła Schemat bazy widoki sprawdzanie zakresów Transakcje 5
Bezpieczeństwo (4) Środowisko PHP: Ustawienie parametru safe_mode ograniczony dostęp do plików: tylko pliki właściciela skryptu zablokowane / ograniczone funkcje: uruchamianie procesów,... zablokowane ważne funkcje: set_time_limit() ignore_user_abort() 6
Bezpieczeństwo (5) Środowisko PHP (2): Ukrywanie błędów @instrukcja error_reporting(0) Ukrywanie plików inkludowany.inc.php ściąganie ukrytych plików poprzez PHP 7
PEAR (1) Biblioteka: PEAR z ang. gruszka: owoc soczysty, miękki, intensywnie pachnący 8
PEAR (2) PHP Extension and Application Repository: Strukturalna biblioteka OpenSource System rozpowszechniania i zarządzania kodem The PHP Extension Code Library (PECL) podbiblioteka napisana w języku C (od 2003 roku osobny projekt PHP Extension Community Library) Styl programowania 9
PEAR (3) Strukturalna biblioteka: Podział na pakiety Każdy pakiet: posiada wersję, informację o stabilności zespół, który go rozwija może być powiązany z innymi pakietami 10
PEAR (4) The PHP Foundation Classes (PFC): Podzbiór pakietów: stabilne ogólne współdziałające z dowolną wersją PHP, WWW, zachowujące kompatybilność wstecz 11
PEAR (5) Nazewnictwo pakietów: <kategoria komponent> _ <nazwa> Pakiet podstawowy: PEAR.php Włączanie pakietów: include_once require_once 12
PEAR (6) Wybrane kategorie: DB XML Auth Mail Networking Log HTML 13
PEAR DB (7) DSN: phptype(dbsyntax): //username:password @protocol+hostspec/database Przykład: mysql://test:testp@localhost/db pgsql://localhost/db1 14
PEAR DB (8) Wspierane bazy danych: mysql -> MySQL pgsql -> PostgreSQL ibase -> InterBase msql -> Mini SQL mssql -> Microsoft SQL Server oci8 -> Oracle 7/8/8i odbc -> ODBC sybase -> SyBase ifx -> Informix fbsql -> FrontBase 15
PEAR DB (9) Połączenie z bazą danych require_once 'DB.php'; // połączenie (persistent:true) $db = DB::connect( dsn, true); $db->disconnect(); 16
PEAR DB (10) Wykonanie zapytania $res = $db->query( sql ); $sth = $db->prepare( "INSERT INTO n VALUES(?,?)"); $db->execute($sth, array(7,2) ); 17
PEAR DB (11) Pobranie wyników zapytania $wiersz = $res->fetchrow(); Parametr dla fetchrow: DB_FETCHMODE_ORDERED (default) DB_FETCHMODE_ASSOC DB_FETCHMODE_OBJECT 18
PEAR DB (12) Generowanie klucza sekwencje $id = $db->nextid('mysequence'); $res = $db->query( "INSERT INTO t VALUES ($id,'f')"); 19
PEAR DB (13) Sekwencje od kuchni: PostgreSQL wbudowane: SELECT NEXTVAL('${sqn}_seq') MySQL emulowane: INSERT INTO ${sqn}_seq VALUES(NULL); mysql_insert_id(...) 20
PEAR DB/DataObject (14) DataObjects: Obiekty zamiast SQL (używa DB) Automatyczne tworzenie klas API do operacji na danych AutoForm (ładowanie, walidacja formularzy) 21
PEAR DB/DataObject (15) DataObjects (2): PHP: $person = new DataObjects_Person; $person->get(12); echo $person->name; SQL: SELECT * FROM person WHERE id=12; 22
PEAR DB/DataObject (16) DataObjects (3): PHP: $person->get(12); $person->name = 'Fred'; $person->update(); SQL: UPDATE person SET name= Fred WHERE id=12; 23
PEAR XML (17) XML: Uproszczony odczyt danych i struktury Transformacje Tworzenie nowych dokumentów XML 24
PEAR XML/Tree (18) Tworzenie XML: require_once "XML/Tree.php"; $tree = new XML_Tree; $root =& $tree->addroot( root ); $foo =& $root->addchild( foo, test ); header("content-type: text/xml"); $tree->dump(); 25
PEAR XML/Tree (19) Wynikowy XML: <?xml version="1.0"?> <root> <foo>test</foo> </root> 26
PEAR Auth/Auth (20) Uwierzytelnianie (Formularz 1): require_once "Auth/Auth.php"; function loginf() { /* Pokazanie formularza z polami: username, password */ } 27
PEAR Auth/Auth (21) Uwierzytelnianie (Formularz 2): $dsn = mysql://us:pwd@serwer/db ; $a = new Auth("DB", $dsn, "loginf"); $a->start(); if ($a->getauth()) { } 28
PEAR Auth/HTTP (22) Uwierzytelnianie (HTTP, wymaga Auth/Auth): require_once "Auth/Auth_HTTP.php"; $a = new Auth_HTTP("DB", "mysql://us:pwd@serwer/baza"); $a->start(); 29
PEAR Auth (23) Uwierzytelnianie (MySQL): CREATE TABLE auth ( username VARCHAR(50) default '' NOT NULL, password VARCHAR(32) default '' NOT NULL, PRIMARY KEY (username), KEY (password) ); 30
PEAR Auth (24) Wsparcie dla baz użytkowników: PEAR database layer MDB database layer MDB2 database layer Plaintext files LDAP servers POP3 servers IMAP servers vpopmail accounts RADIUS SAMBA password files SOAP 31
PEAR MAIL (25) Mail.php Wysyłanie przez dowolny program pocztowy sendmail, SMTP Mail/mime.php Tworzenie poczty wieloczęściowej: text html załączniki 32
PEAR Networking (26) Obsługa sieci: Sprawdzanie poprawności adresu (IPv4, IPv6) Finger, Ping, Portscan Whois NNTP (Newsserver) 33
PEAR Log (27) Logi: Przechowywanie informacji o zdarzeniach: file mcal aplikacje kalendarza sql do bazy danych (DB) syslog syslog (*nix), EventLog (Win) 34
PEAR Log (28) Logi SQL (MySQL): CREATE TABLE log_table ( unix_time int NOT NULL, ident char(16) NOT NULL, priority int, message varchar(200), PRIMARY KEY (unix_time, ident) ); 35
PEAR HTML/Template... (29) Wzorce HTML: Rozdzielenie prezentacji od danych możliwość tworzenia skór niezależna praca grafika i programisty Konieczność zarządzania wzorcami 36
phpgroupware (1) Środowisko dla aplikacji PHP: OpenSource Modularna budowa Struktura stron API Zintegrowane aplikacje 37
phpgroupware (2) Modularna budowa: Katalog osobna aplikacja Zintegrowane zarządzanie: użytkownikami i grupami aplikacjami + uprawnienia do aplikacji Zintegrowane uwierzytelnianie 38
phpgroupware (3) Struktura stron: Strona konkretnej aplikacji jest otoczona stronami systemu (zagnieżdżenie) Automatyczne inkludowanie {appname}/inc/functions.inc.php {appname}/inc/header.inc.php {appname}/inc/footer.inc.php 39
phpgroupware (4) API: (LGPL, GPL) Zarządzanie sesją Abstrakcyjna baza danych (Postgres, Mysql) Uwierzytelnianie: SQL, LDAP, PAM, SMB Zaawansowana wielojęzyczność (I18N = Internationalization) Wzorce stron Pliki użytkownika (dostęp przez konto FTP) 40
phpgroupware (5) API (2): OO (Object Oriented) Dostęp do danych innych aplikacji Funkcje użytkowe: wykrywanie przeglądarki parser XML... 41
phpgroupware (6) Zintegrowane aplikacje: Administracja Email Kalendarz Książka adresowa Zarządzanie plikami Tłumaczenie Notatki To Do List NNTP Manual Ustawienia (pełna personalizacja) 42
phpgroupware (7) 43
Podsumowanie Linki: www.php.net strona projektu PHP conf.php.net konferencje o PHP pecl.php.net PECL pear.php.net PEAR www.phpgroupware.org phpgroupware 44