Aplikacje WWW

Materiał o aplikacjach WWW.

Porada: nie wszyscy mamy wygodną łączność ze studentsem. Oczywiście można sobie postawić na swoim komputerze jakiś serwer WWW, np. Apache albo Nginxa. Do testowania stron w PHP wystarczy jednak użyć serwera wbudowanego w PHP. Wywołanie

php -S komputer:port -t katalog-www
(pełna nazwa tych opcji to --server i --docroot). Umieszczamy strony (także te z programami) w jakimś katalogu, na przykład ~/testy i startujemy serwer z okna konsolowego
php -S localhost:8888 -t ~/testy
i w przeglądarce wpisujemy adres
localhost:8888/hello.php
W ten sposób możemy spokojnie testować lokalnie własne strony. Na konsoli serwera będą informacje o ,,wydarzeniach''.

Przekazywanie danych

Przykład na najprostsze przekazywanie danych między stronami (z użyciem zmiennej ukrytej).

Ale nie hasła!

W naszych przykładowych programach PHP używaliśmy instrukcji

$link = pg_connect("host=lkdb dbname=mrbd user=scott password=tiger");
Wątpliwości budzi umieszczanie hasła bezpośrednio w programie. Nie jest to wprawdzie nasze hasło, ale i ułatwia innym dobranie się do naszej bazy danych. Oczywiście użytownikowi scott daliśmy minimalne uprawnienia.

Chcąc jednak coś zmieniać w tabelach musimy użyć konta o większych możliwościach -- naszego własnego. Jeśli komuś uda się przeczytać treść naszego programu, pozna nasze hasło.

PostgreSQL pozwala tego uniknąć. W pliku .pgpass w naszym głównym katalogu umieszczamy loginy i związane z nimi hasła do baz danych, z którymi zamierzamy się łączyć. Każda pozycja ma być w osobnym wierszu

serwer:port:baza:login:hasło 
gdzie port to zwykle 5432, a zamiast nazwy bazy możemy podać gwiazdkę, żeby wiersz dotyczył wszystkich baz. Przykład:
127.0.0.1:5432:*:ja:tajne1;hasło
lkdb:5432:mrbd:ab123456:inne-tajne1;hasło

Trzeba zadbać o to, żeby nikt inny nie miał jakiegokolwiek dostępu do tego pliku: uprawnienia rw-------. Inaczej klient Postgresa z obrzydzeniem ominie ten plik.

Uprawnienia

Zapytań z ogólnodostępnej części aplikacji lepiej nie robić z naszego konta, więc nie rezygnujmy całkiem ze scotta. Normalnie nie ma on jednak prawa oglądać naszych tabel, ponieważ po utworzeniu dostęp do tabel ma tylko właściciel. Może on jednak uprawnić innych. Służy do tego polecenie GRANT

GRANT przywilej ON obiekt TO kto;

Przywilej to operacja, jaką wolno będzie wykonywać, na przykład dla tabel może to być SELECT. Obiekt określa nazwę obiektu. Jeśli nie jest to tabela, to trzeba ją poprzedzić nazwą typu, np. VIEW lub SCHEMA. Kto może być loginem innego użytkownika lub symbolem PUBLIC.

W naszym przypadku

GRANT SELECT ON Mecze TO scott;

Ale to jeszcze mało. Zanim scott będzie miał dostęp do naszej tabeli, musi najpierw wejść do naszego schematu. A tego mu na razie nie wolno. No to go wpuśćmy

GRANT USAGE ON SCHEMA ab123456 TO scott;

Teraz już scott może oglądać Wasze tabele, ale nie może ich zmieniać.

Uprawnienia odbieramy analogicznym poleceniem

REVOKE przywilej ON obiekt FROM kto;

Bezpieczeństwo PHP

SQL injection.