PHP a MySQL Připojení k databázi:

Slides:



Advertisements
Podobné prezentace
Webové rozhraní pro přístup k databázi JIS Václav Lederbuch
Advertisements

Základy programování v PHP
Přístup k databázím z WWW
DYNAMICKÉ WEBOVÉ STRÁNKY
Formuláře jsou důležitou součástí stránek, slouží:  k přihlašování k některým stránkám (eshopy, bakaláři, diskuze na webu apod.)  k odeslání údajů do.
Formuláře Formuláře lze nalézt téměř na každém webu. Formuláře lze nalézt téměř na každém webu. Použití formulářů: Použití formulářů: Blog Blog Uživatelské.
HTTP server HTTP server 1 Jak to funguje?
Návrh a tvorba WWW Přednáška 6 PHP II – Databáze.
Protokol HTTP (Hypertext Transfer Protocol)
Pavel Dvořák Gymnázium Velké Meziříčí Počítačové sítě – služba WWW Registrační číslo projektu: CZ.1.07/1.5.00/ Datum: Jazyk: čeština.
VISUAL BASIC Práce se soubory.
Databázové systémy II SQL Injection
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
PHP Zpracování formuláře v PHP - 11 Mgr. Josef Nožička IKT PHP
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
„Programátor by měl být v prvé řadě líný.“. PIFovo Web API (API = Application Programming Interface)
Informatika pro ekonomy II přednáška 11
Návrh a tvorba WWW Cvičení 6
YMUSY1 Multimediální systémy 1 Cvičení 5 Formuláře a ovládací prvky.
Programování v Pascalu Přednáška 7
Radek Špinka Přepínače MSSQL výběr.
Protokol LDAP autor:Zdeněk Jonáš předmět:PSI un:A01144.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
Funkce a procedury  Funkce a procedury mají za úkol vykonávat určitou činnost, která se opakuje na několika místech skriptu. Obě se definují klíčovým.
Internetové technologie Informatika pro ekonomy II přednáška 8.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Moderní formy tvorby webových stránek Martin Šebela, 9.A vedoucí práce: Mgr. Jan Kříž.
PHP – zasílání dat z formuláře
PHP – Základy programování
Návrh a tvorba WWW Přednáška 7 Pokročilá práce s PHP.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
Jakub Ježek 2IT. -> cílem bylo vytvořit online hru piškvorky v php a mysql.
Návrh a tvorba WWW Cvičení 7 PHP & Oracle - Bezpečnost.
Dílna Caché II. CSP pro pokročilé Tomáš Vaverka. Zdroje HTML Tag Reference v sekci Reference Material v dokumentaci Caché HTML Tag Reference v sekci Reference.
Cross-Site Request Forgery Prezentace k přednášce o CSRF útocích Připraveno pro SOOM session #
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Dynamické dokumenty na straně serveru Informatika pro ekonomy II přednáška 8.
Návrh a tvorba WWW Cvičení 5
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B16 Autor Ing. Jiří Kalousek Období vytvoření březen.
PHP PHP a MySQL - 15 Mgr. Josef Nožička IKT PHP
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
PHP Vytváření formuláře.
Elektronický registr oznámení Zpracoval(a): Mgr. František Rudecký
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Úvod do PHP IZI 228.
123.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Formuláře Formuláře uzavíráme do elementů Formuláře uzavíráme do elementů a a Tyto elementy jsou součástí jazyka XHTML, to znamená, že při použití v PHP.
1 Protokol HTTP (Hypertext Transfer Protocol) HTTP je základem systému „World Wide Web“ (WWW) - Web … HTTP – jednoduchý protokol aplikační vrstvy, transport.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B15 Autor Ing. Jiří Kalousek Období vytvoření březen.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
PHP a Webové služby Jan Růžička Institute of geoinformatics VSB-TU Ostrava 17.listopadu, Ostrava-Poruba,
Internetové technologie Informatika pro ekonomy přednáška 7.
Úvod do UNIXu (6th round)
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES FORMULÁŘE + PODMÍNKY + SWITCH.
Databázové systémy Přístup k databázím z WWW. Síť WWW je v současné době místem pro dynamické, často databázemi řízené webové aplikace. Tvorba webového.
Dynamická webová aplikace Autor:Ondřej Soukup Třída:I3.
Michalčík, Valnoha. Základní informace  SQL - strukturovaný dotazovací jazyk využívaný v relačních databázích pro práci s daty  Injection – vsunutí.
Redakční systém – Content management system (CMS), publikační systém – Správa obsahu webu – Jednoduché publikování textů – Modulárnost (instalace doplňků)
Seminář 11 DHCP + HTTP + IPTABLES
Protokol HTTP (Hypertext Transfer Protocol)
Databázové systémy a SQL
Databázové systémy a SQL
Web Application Scanning
Transkript prezentace:

PHP a MySQL Připojení k databázi: mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD); mysql_select_db($SQL_DBNAME); př. Kontrola spojení: $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');     if(!is_resource($link)) {         echo "Failed to connect to the server\n"; … Uzavření spojení MySQL_Close(); MySQL_Close($link);

Získání výsledků získání pole, všech řádků $vysledek=mysql_query("select * from psc where psc=".$_POST["psc"]); $vysledek = mysql_query($sql,$connection) or die ("Nemohu provést dotaz: “ . $query_error); zjištění počtu vrácených řádků $radku=mysql_num_rows($vysledek); if ($radku==0) echo "PSČ…

Procházení řádků while ($zaznam=MySQL_Fetch_Array($vysledek)) { echo …; } $zaznam je pole sloupců, hodnot řádku!

Výpis hodnot echo $zaznam[‘id’]; echo $zaznam[‘prijmeni’] . ‘, ’ . $zaznam[‘jmeno’]; echo “<a href=\“edituser.php?ID_user=\“ . $zaznam[‘id’] . “<\a>”; … $ID=$_GET[‘ID_user’] … $sql=“SELECT * FROM admins WHERE ID=$ID”; …

Stránkování zjistit počet záznamů omezit dotazem přes LIMIT předávat přes URL list.php?page=2 SELECT count(ID) FROM … SELECT … LIMIT 11,10

Neukládání hesel Pro případ krádeže dat: hesla neukládat! Použít jednostrannou funkci – hash př.: $heslo=md5($_POST[‘heslo’]); $heslo=md5($_POST[‘heslo’] . ‘sul’); $sql=“SELECT * FROM usernames WHERE user=‘$username’ AND psw=$heslo”

SQL injection Kontrolovat hodnoty, typy! settype($offset, 'integer'); $query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;", $offset); Kontrolovat uvozovky, escape sekvence mysql_escape_string(), sql_escape_string(), addslashes(), str_replace($search, $replace)… př.: $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",             mysql_real_escape_string($user),             mysql_real_escape_string($password)); Nezveřejňovat databázové schéma, SQL dotazy…

SQL injection, ochrana ve funkci <?php function sanitize($input){     if(is_array($input)){         foreach($input as $k=>$i){             $output[$k]=sanitize($i);         }     }     else{         if(get_magic_quotes_gpc()){             $input=stripslashes($input);         }                $output=mysql_real_escape_string($input);     }            return $output; } ?> // use: if you are going to use $_POST, $_GET, $_COOKIE or $_REQUEST, include the appropriate line first. $_POST=sanitize($_POST); $_GET=sanitize($_GET); $_COOKIE=sanitize($_COOKIE); $_REQUEST=sanitize($_REQUEST);

Vložení uživatele do databáze if(IsSet($sent)): require("db.php"); $write = true; if($name=="" || $password=="" || $password_2==""): $error = 'Musíte vyplnit všechny povinné údaje - označeny tučným písmem.'; $write = false; elseif($password!=$password_2): $error = 'Heslo nebylo zadáno správně.'; $write = false; else: $user = MySQL_Query("SELECT name FROM users") or die($query_error); while($entry = MySQL_Fetch_Array($user)): if(StrToLower($name)==StrToLower($entry["name"])): $error = 'Toto uživ. jméno již existuje, vyberte si prosím jiné.'; $write = false; break; endif; endwhile; endif; if($write): …

Vložení uživatele do databáze … if($write): $add = MySQL_Query("INSERT INTO users VALUES ('$nick', '$name', '$password', '$email', '$icq', '30', '$avatar', '$xfire', '$skype', '$sex')") or die(mysql_error()); SetCookie("cookie_author", $nick); SetCookie("cookie_email", $email); echo '<html><head><META HTTP-EQUIV="Refresh" CONTENT="5; URL=index.php"> <body> <b>Registrace proběhla úspěšně</b>:<br><br> Jméno:' . $name . '<br> Email:' . $email . '<br> Za 5 vteřin budete přesměrováni. </body></head></html>'; endif; MySQL_Close();

GET, POST opakování <input name="username" value="moje jmeno" /> <input type="submit" name="akce" value="OK" /> V PHP zaslané hodnoty získáme z pole: $user=$_GET["username"] pro <form action="test.php" method="get">… …test.php?username=moje%20jmeno&akce=OK data součástí URL (viditelná, omezeno délkou) $user=$_POST["username"] pro <form action="test.php" method="post">… data součástí HTTP požadavku (neviditelná v URL, uuencoded, "neomezená" délka dle URL)

Upload Souborů //příp. is_uploaded_file($_FILES['soubor']['tmp_name']) <? … načtení proměnných z pole $HTTP_POST_FILES … if($_POST["akce"]=="Upload") { //příp. is_uploaded_file($_FILES['soubor']['tmp_name']) if ($_FILES["soubor"]["mime_type"]=="text/plain" or $_FILES["soubor"]["mime_type"]="text/html") { if (copy($_FILES["soubor"]["tmp_name"],"data/".$_FILES["soubor"]["name"])) { print "Soubor " . $_FILES["soubor"]["name"] . " o velikosti " . $_FILES["soubor"]["size"] . " bajtů byl úspěšně nahrán na server<br>";     }     else {       print "Při nahrávání souboru došlo k chybě!<br/>";     }   }   else {     print "Soubor není požadového MIME typu!<br/>";   } } … příp. při podmínce else ($_POST["akce"] == "Upload") řešit vypsání formuláře, při špatném mimetype smazat ?>

Pozor na… SQL Injection opětovné vkládání při refresh kontrolovat obsah, hodnoty (viz Databáze, funkce mysql_real_escape_string(), settype()) opětovné vkládání při refresh <?php … // přesměrování na stránku s výsledkem header("Location: vysledek.php", true, 303);?> SELECT Count(ID) WHERE … -> INSERT/UPDATE Podvrhy při uploadu (is_uploaded_file()) Maximální velikost, upload více souborů viz manuál PHP, odkaz na konci prezentace

Identifikace, autentizace, autorizace Jak se liší? Identifikace – kdo jsi? Autentizace – jsi skutečně ten, za koho se vydáváš Autorizace – máš sem skutečně přístup? Autorizace se sessions a MySQL http://www.jaknaweb.com/tipy-triky/php-mysql/34/autorizace-uzivatelu-zaheslovany-pristup

Autorizace I. soubor .htaccess pro Apache platí pro Apache – adresář a podadresáře dále umí blokování přístupu z IP adres, redirect, vlastní chybové stránky aj. viz apache httpd.conf http://emp.wz.cz/htconfig/autorizace-pomoci-htaccess.html

Autorizace II. HTTP protokolem proměnné $PHP_AUTH_USER, $PHP_AUTH_PW a $PHP_AUTH_TYPE Header("HTTP/1.0 401 Unauthorized"); Header("WWW-Authenticate: Basic realm=\"Stranky XYZ\""); die("Neautorizovaný přístup\"); http://blackhole.sk/zabezpeceni-php-skriptu-heslem-ii

Autorizace III. vlastním formulářem použít SSL pro uložení hash použít Sessions/Cookies a MySQL kontrolovat timeout, IP adresu pozor na ukládání username do Cookies aj. spoléhání na Cookies/Sessions

Kontrola přihlášení se sessions Nutno kontrolovat, zda session existuje z dřívějška Možno uložit do session a kontrolovat IP adresu, zda nedošlo ke změně, a čas session_start(); if ($_SESSION['isvalid']!=1) { // pokud testovací proměnná neexistuje nebo nemá správnou hodnotu, vynutit např. nové přihlášení   Header('Location: http://server.com/login.php');   Exit; }

PHP a Mail if (!ereg("^.+@.+\\..+$", $email)) { echo "Zadali jste E-mail je neplatný <BR>"; exit; } $hlavicky .= "From: ".$email."\n"; // $hlavicky .= "Content-Type: text/html; charset=utf-8\n"; Mail("komu@komu.cz", $predmet, $zprava, $hlavicky);