WEBES ALKALMAZÁSFEJLESZTÉS 1.

Hasonló dokumentumok
WEBES ALKALMAZÁSFEJLESZTÉS 1.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

10.óra CodeIgniter Framework #3. Gyimesi Ákos

CodeIgniter keretrendszer

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

9.óra CodeIgniter Framework #1. Gyimesi Ákos

Biztonságos PHP a gyakorlatban

WEBES ALKALMAZÁSFEJLESZTÉS 1.

MVC. Model View Controller

Model View Controller alapú alkalmazásfejlesztés

Web-fejlesztés NGM_IN002_1

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

JavaServer Pages (JSP) (folytatás)

Java Programozás 11. Ea: MVC modell

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

JAVA webes alkalmazások

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

MIKOVINY SÁMUEL TÉRINFORMATIKAI EMLÉKVERSENY

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Webes alkalmazások fejlesztése. 9. előadás Bevezetés az ASP.NET MVC keretrendszerbe

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

JEE tutorial. Zsíros Levente, 2012

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

Web-fejlesztés NGM_IN002_1

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Java és web programozás

ANDROID ALKALMAZÁSFEJLESZTÉS

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbázis kezelés Delphiben. SQL lekérdezések

Symfony kurzus 2014/2015 I. félév. Controller, Routing

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

RIA Rich Internet Application

Adatbázis használata PHP-ből

Nyilvántartási Rendszer

Gyakorlati vizsgatevékenység A

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

A Java EE 5 plattform

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Gyakorlati vizsgatevékenység B

Webes alkalmazások fejlesztése

PHP. Adatbázisok gyakorlat

LBRA6i integrált rendszer

Adatbázis-kezelés. Harmadik előadás

Tranzakciókezelés PL/SQL-ben

DRUPAL 7. újdonságai. Hojtsy Gábor Drupal Hétvége, Budapest november 14. Angela Byron fóliái alapján

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Web programoz as

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Elektronikus levelek. Az informatikai biztonság alapjai II.

Microsoft SQL Server telepítése

PHP-MySQL. Adatbázisok gyakorlat

Blahota István. SQLite alapok

AdoDB a gyakorlatban

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Oracle Audit Vault and Database Firewall. Gecseg Gyula Oracle DBA

Bevezető. Servlet alapgondolatok

Az SQL*Plus használata

Földmérési és Távérzékelési Intézet

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

A könyv tartalomjegyzéke

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Oracle E-Business Suite üzemeltetés a Rába Járműipari Holding Nyrt.-nél

Szathmáry László Debreceni Egyetem Informatikai Kar

<Insert Picture Here> Migráció MS Access-ről Oracle Application Express-re

Adatbázisok webalkalmazásokban

Szerver oldali technológiák Szerver oldali script nyelvek PHP

Hálózati operációs rendszerek II.

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Postfilter. Kadlecsik József KFKI RMKI

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

API tervezése mobil környezetbe. gyakorlat

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Tartalomjegyzék. Weboldalüzemeltetői praktikák... 1 Átlag weboldal... 1 Wordpress praktikák... 2

Webes alkalmazások fejlesztése 6. előadás. Weblapok fejlesztése és architektúrája (ASP.NET)

Webshop készítése ASP.NET 3.5 ben I.

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Összefüggő szakmai gyakorlat témakörei évfolyam. 9. évfolyam

Összefüggő szakmai gyakorlat témakörei. 13 évfolyam. Információtechnológiai gyakorlat 50 óra

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Multimédiás adatbázisok

Átírás:

WEBES ALKALMAZÁSFEJLESZTÉS 1. Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816

Tartalom 2 Adatbázis-biztonság Model-View-Controller minta MVC keretrendszerek CodeIgniter

3 Adatbázis-biztonság

Biztonsági szempontok 4 Különböző vetületek Programozás Adminisztrációs Üzemeltetés Munkaszervezés Különböző rétegek Adatbázis Csatorna Kliens

Biztonsági szempontok 5 Adatbázis Ne a tulajdonos vagy adminisztrátor nevében kapcsolódjunk Saját felhasználó vagy csoport létrehozása Adatbázis, tábla, mező szintű jogosultságok beállítása Magasabb szintű elemek használata Nézetek Tárolt eljárások Triggerek Adatok titkosítása (pl. jelszó)

Biztonsági szempontok 6 Csatorna a szerver és kliens között Hálózati forgalom titkosítása Kliens SQL összeállításának módja Szövegösszefűzés (SQL injection) Paraméterkötés Adatok ellenőrzése Black list White list Megfelelő típusra hozatal Veszélyes karakterek escape-elése

SQL injection 7 Ellenőrizetlen adatok és kevésbé biztonságos SQL előállítási módszerek használata hibához illetéktelen hozzáféréshez vezethet

SQL injection 8 Elvárt működés $user = 'alma'; $pwd = 'korte'; $q = "SELECT count(1) from users where userid='" + $user + "' and passwd='" + $pwd + "'; "; $q === "SELECT count(1) from users where userid='alma' and passwd='korte'; " DE: $user = ''; $pwd = "' or '1'='1"; $q === "SELECT count(1) from users where userid='' and passwd='' or '1'='1'; "

SQL injection 9 //Elvárt mûködés $offset = 10; $q = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;"; $q === "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET 10;"; //DE: $offset = "0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres';"; $q === "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres';;";

SQL injection 10 További példák union a selectben xp_cmdshell Linkek http://www.php.net/manual/en/security.database.sqlinjection.php http://www.unixwiz.net/techtips/sql-injection.html http://en.wikipedia.org/wiki/sql_injection

SQL injection elkerülése 11 Adatok ellenőrzése Speciális karakterek szűrése, escape-elése mysql_real_escape_string() Összefűzés helyett szövegsablon használata sprintf Összefűzés helyett adatkötés használata binding

Adatkötés (binding) 12 Adatbázis-kezelőnek támogatnia kell SQL utasításban csak paramétereket tüntetünk fel, nem konkrét értékeket A sablont az adatbázis-kezelő dolgozza fel, készíti elő A paraméterek konkrét értéket kapnak (típusos) Végrehajtás kezdeményezése

Adatkötés (binding) 13 Előnyei Nincs manuális escape-elés SQL utasítások többszöri futtatása újraértelmezés nélkül Bináris adatok hatékonyabb közlekedtetése Olvashatóbb kód Hátrányai Egyszer futó lekérdezéseknél lassabb Általában csak DML-re működik

14 Model-View-Controller minta

Model-View-Controller 16 Modell Alkalmazás adatai és folyamata Üzleti logika Nézet Web design, sablon, HTML, CSS, JavaScript Modell adatait jeleníti meg megfelelően formázva Vezérlő Folyamatot irányítja, begyűjti az input adatokat és azokat a modellnek és a nézetnek átadja

MVC architektúra 17 Vezérlő Modell Nézet

18 MVC a weben

19 MVC a weben

20 MVC a weben

Modell 21 Üzleti logika Alkalmazás adatai Tárolás, feldolgozás, absztrahálás Független a nézettől és a HTTP kérés feldolgozásától Általában nincs benne HTML és pl. $_GET Általában adatbázisokkal dolgozik Adatbázis-elérési absztrakció (réteg) Adatbázis-absztrakció (réteg)

Nézet 22 Megjelenítés HTML, CSS, JavaScript, XML, PDF, szöveg, kép Nem tartalmazhat logikát, adatfeldolgozást Sablonnyelv használata PHP alternatív szintaxis limitált utasításkészlet Smarty, stb.

PHP mint sablonnyelv (Savant2) 23 require_once 'Savant2.php'; $tpl =& new Savant2(); $tpl->assign('title', 'Colors of the Rainbow'); $tpl->assign('colors', array('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet')); $tpl->display('rainbow.tpl.php'); <html><head> <title><?php echo $this->title?></title> </head><body> <h1><?php echo $this->title?></h1> <ol> <?php foreach ($this->colors as $color):?> <li><?php echo $color?></li> <?php endforeach;?> </ol> </body></html>

Vezérlő 24 Az MVC minta legáltalánosíthatóbb része Kérés feldolgozása, adatok továbbítása a modellnek és nézetnek Több további részekre bontható bootstrap file Front Controller Action Controller

MVC előnye 25 Fejlesztési munkafolyamatokat támogatja Három fő szerepkör van egy fejlesztői csapatban Fejlesztők Modellen dolgoznak (PHP, adatbázis, algritmus, architektúra) Tervezők Nézeten dolgoznak (HTML, CSS, JavaScript, grafikus elemek, mockup, stb.) Integrátorok Vezérlőn dolgoznak, ők kapcsolják össze a modellt a nézettel, kevésbé képzettek, mint a fejlesztők

26 MVC keretrendszerek

Keretrendszerek 27 bizonyos filozófiának megfelelő szabályok gyűjteménye ahány keretrendszer, annyi féle szabályok korlátokat is jelentenek egységesebb alkalmazásfejlesztés szétválasztott kód és logika meghatározott könyvtárszerkezet csoportmunka támogatott rétegek szétválasztása

MVC-s keretrendszerek 28 Az MVC filozófiájára épülő keretrendszerek Nem egységesek, sokféle megoldás Alkalmazott minták Front Controller egy belépési pont MVC

Hogyan válasszunk keretrendszert 29 Architektúra Dokumentáció Közösség Támogatás Rugalmasság

30 CodeIgniter

CodeIgniter 31 PHP MVC keretrendszer http://codeigniter.com Jó dokumentáció: http://codeigniter.com/user_guide/ Egyik legrégebbi PHP MVC keretrendszer Nagy közösség

33 Oldal életciklusa

34 Könyvtárszerkezet

CodeIgniter URL-ek 35 Szegmens alapú URL kezelés pelda.hu/index.php/class/action/par1/par2 pelda.hu/class/action/par1/par2.htaccess beállítás Keresőbarát forma Könnyű könyvjelzőzni Beszédes RewriteEngine on RewriteCond $1!^(index\.php images robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]

Konfiguráció 36 application/config könyvtárban config.php routes.php database.php autoload.php

Vezérlők 37 pelda.hu/index.php/products/detail/12 application/controllers/products.php Vezérlő egy osztály, amely a CI_Controller-ből származik Alapértelmezések Ha nincs class, akkor default_controller a config/routes.php-ban $route['default_controller'] = 'Main'; Ha nincs action, akkor: index Privát metódusok _-sal kezdődnek: _belso()

Vezérlő 38 class Products extends CI_Controller { public function construct() { parent:: construct(); //Konstruktor kódja } public function index() { //Alapértelmezett action } public function detail($id) { // $id-jú termék megjelenítése } private function _belso() { } }

Nézetek 39 application/views könyvtárba Vezérlő tölti be $this->load->view('detail') Több nézet betöltésekor az eredmény összefűzésre kerül Adatokat a nézetnek átadni 2. paraméterként lehet asszociatív tömbként A kulcsból változónevek lesznek a view-ban a megfelelő értékkel 3. paraméterként megadott true értékkel a view eredményét szövegesen vissza lehet kapni $string = $this->load->view('nezet', '', true);

Nézetek 40 class Products extends CI_Controller { public function index() { $data = array( 'alma' => 'piros', 'korte' => 'kukacos', ); $this->load->view('proba', $data); } } <html> <head> <title>my Blog</title> </head> <body> <p>az alma <?php echo $alma;?>.</p> <p>a körte <?php echo $korte;?>.</p> </body> </html>

Modellek 41 application/models könyvtárba Osztály CI_Model-ből származik Osztály nevének első betűje nagy Fájlnév kisbetűs Vezérlő tölti be általában $this->load->model('product_model'); Használata $this->product_model->get_products();

Modellek 42 class Product_model extends CI_Model { function construct() { parent:: construct(); $this->load->database(); } function get_products() { $query = $this->db->get('products'); return $query->result(); } } class Products extends CI_Controller { public function index() { $this->load->model('product_model'); $products = $this->procuct_model->get_products(); $this->load->view('proba', array( 'products' => $products, )); } }

Adatbázis használat 43 CodeIgniter tartalmaz egy adatbázis-elérési és adatbázis-absztrakciós réteget Adatbázis-kezelő független kód írása Konfiguráció: config/database.php Betöltés: $this->load->database(); Tipikusan a modellben használjuk Automatikus betöltés: config/autoload.php

Lekérdezések 44 $q = $this->db->query('sql') Adatkötés $this->db->query( 'select * from table where mezo1=? and mezo2=?', array('alma', 12) ); Eredmények $q->result() $q->result_array() $query = $this->db->query("sql"); foreach ($query->result() as $row) { echo $row->mezo1; echo $row->mezo2; }

Active record 46 $this->db->get('table') $this_>db->select() $this_>db->from() stb. $this_>db->insert('table', array()) $this_>db->update('table', array()) $this_>db->delete('table', array()) array(): kulcs-érték párok

Könyvtárak és segédfüggvények 47 Library $this->load->library(); Form Validation Input Email Helper Form helper URL helper HTML helper