1. Trang chủ
  2. » Công Nghệ Thông Tin

PHP và MySQL nâng cao

41 302 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề PHP và MySQL nâng cao
Tác giả ThS. Nguyễn Hà Giang
Trường học Trường Đại học Công Nghệ Thông Tin - Đại học Quốc Gia Hà Nội
Chuyên ngành Lập trình Web, Cơ sở dữ liệu
Thể loại Sách giáo trình
Năm xuất bản 2009
Thành phố Hà Nội
Định dạng
Số trang 41
Dung lượng 1 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

API có thể được xây dựng theo dạng Thủ tục 3 Hướng đối tượng Thông thường khi kết nối với database MySQL, thì ứngdụng PHP kết nối thông qua các thành phần API đượccung cấp sẵn.. PHP’s

Trang 1

PHP & MYSQL NÂNG CAO

ThS Nguyễn Hà Giang

Trang 3

 Định nghĩa lớp, phương thức, hàm và biến cho phép ứng

dụng gọi để thực hiện một nhiệm vụ nào đó

 API có thể được xây dựng theo dạng

 Thủ tục

3

 Hướng đối tượng

 Thông thường khi kết nối với database MySQL, thì ứngdụng PHP kết nối thông qua các thành phần API đượccung cấp sẵn

PHP App API MySQL

Trang 5

 Trong PHP thường thấy khái niệm extension

 PHP bao gồm core và phần extension

 Chức năng kết nối MySQL là một dạng

Trang 6

MySQL API trong PHP

 Gồm có 3 API option chính

6

Trang 7

PHP’s MySQL Extension

 Đây là extension cơ bản nhất cho phép kết nối với MySQL

 Mysql chỉ cung cấp giao diện hướng thủ tục và chỉ sử dụngphiên bản MySQL 4.1.3 về trước

 Có thể sử dụng với phiên bản 4.1.3 về sau nhưng không hỗ

7

trợ các chức năng bổ sung của phiên bản mới

 Mã nguồn được định vị trong thư mục mở rộng ext/mysql

 Do được xây dựng theo dạng thủ tục nên việc sử dụng khá

đơn giản

Trang 8

PHP’s MySQLi Extension

 Còn được gọi là phiên bản MySQLMySQL IImprovedmproved Extension Extension

 Được phát triển nhằm sử dụng các đặc tính mới có trong phiên bản MySQL server 4.1.3

 MySQLi có trong phiên bản PHP 5 về sau.

 Đặc tính cải tiến

8

 Đặc tính cải tiến

 Object-oriented interface

 Support for prepared statement, multiple statement

 Support for transaction

 Enhanced debugging capabilities

 Embedded server support

 Giao diện hướng thủ tục cũng được cung cấp kèm theo!

Trang 9

PDO (PHP Data Object)

 PDO là lớplớp trừutrừu tượngtượng databasedatabase cho ứng dụng PHP

 Cung cấp các API cho ứng dụng PHP mà không quan tâm

đến kiểu database server kết nối

 Theo lý thuyết, nếu sử dụng PDO API, có thể chuyển

9

database server sử dụng từ PostgreSQL đến MySQL vớimột ít sự thay đổi trong code PHP

 Ưu điểm: đơn giản, khả chuyển

 Nhược: không cho phép sử dụng tất cả các đặc tính nângcao của phiên bản cuối cùng MySQL

Trang 10

Thao tác PDO

Trang 11

 Đóng kết nối

Tên database Lớp PDO

Trang 12

$db = new PDO ( 'mysql:dbname=test' , $user , $pass );

$result = $dbh -> query ( 'SELECT * FROM BOOKS' );

$result = $dbh -> query ( 'SELECT * FROM BOOKS' );

foreach( $result as $row ) {

print_r ( $row );

}

$db = null ; }

Trang 13

Sử dụng PDO object

13

try{

// tạo đối tượng PDO

$pdo = new PDO ( 'mysql:dbname=lab3' , $user , $pass );

// thực thi câu truy vấn

$result = $pdo- > query ( 'select title, author from books' );

foreach ($result as $row ) // lặp qua từng dòng {

Trang 14

Sử dụng PDO object

14

try{

$pdo = new PDO ( ' mysql:dbname=lab3 ', $user , $pass );

$stmt = $pdo -> prepare ('SELECT * FROM BOOKS WHERE id=?' );

while ($row = $stmt- > fetch ( PDO::FETCH_ASSOC ) {

printf( 'Title: %s<br />Author: %s <p /> ',

Trang 15

Sử dụng PDO object

15

try {

$pdo = new PDO ( 'mysql:dbname=lab3' , $user , $pass );

$stmt = $pdo- > prepare ( 'SELECT * FROM BOOKS WHERE

author=:author AND price>:price'); // kết buộc tham số

$stmt -> bindParam (':author', $author , PDO::PARAM_STR );

$stmt -> bindParam (':price', $price , PDO::PARAM_STR );

$stmt -> execute (); // th c thi câu truy v n

VD 3

$stmt -> execute (); // thực thi câu truy vấn

while ( $row = $stmt -> fetch ( PDO::FETCH_OBJ ))// lấy kq từng dòng {

printf ( 'Title: %s<br />Author: %s <p />' ,

$row -> title , $row -> author ); }

$pdo = NULL ; // đóng kết nối }

catch ( PDOException $e ) { printf( 'Error: %s' , $e -> GetMessage ());

}

Trang 16

Sử dụng PDO object

16

VD 4

try {

$pdo = new PDO ( 'mysql:dbname=lab3' , $user , $pass );

$stmt = $pdo- > prepare ('SELECT title,author FROM BOOKS WHERE

price>:price');

// kết buộc tham số

$stmt -> bindParam (':price', $price , PDO::PARAM_STR );

$stmt -> bindColumn ('title', $title , PDO::PARAM_STR );

$stmt -> bindColumn ('title', $title , PDO::PARAM_STR );

$stmt -> bindColumn ('author', $author , PDO::PARAM_STR );

$stmt -> execute (); // thực thi câu truy vấn while ( $stmt -> fetch ( PDO::FETCH_BOUND ))// lấy kq từng dòng {

printf ( 'Title: %s<br />Author: %s <p />' ,

}

Trang 17

Thao tác MySQLi

Trang 18

Sử dụng MySQLi

 Tạo đối tượng mysqli

18

define ( 'SERVER' , 'localhost' );

define ( 'USER' , 'root' );

define ( 'PASS' , '' );

define ( 'DB' , 'myDB' );

define ( 'DB' , 'myDB' );

$sqli = new mysqli( SERVER, USER, PASS, DB );

if ( mysqli_connect_errno ()) // nếu có lỗi kết nối

{

printf ( "Connect fail: %d" , mysqli_connect_error ());

}

Trang 19

Sử dụng MySQLi

 Truy vấn dữ liệu (1)

19

$query = "SELECT * FROM BOOKS" ;

if ($result = $mysqli -> query ( $query )) //thực thi truy vấn

if ($result = $mysqli -> query ( $query )) //thực thi truy vấn

{

// hiển thị số dòng truy vấn được

printf ( "Return Row: %d" , $result -> num_rows );

}

Trang 20

Sử dụng MySQLi

 Truy vấn dữ liệu (2)

20

$query = "SELECT title, author, price from BOOKS" ;

if ( $result = $mysqli ->query( $query )) {

while ( $obj = $result ->fetch_object()) { // lấy giá trị field theo dạng thuộc tính obj

{ // lấy giá trị field theo dạng thuộc tính obj

echo "Title: $obj->title <br />" ; echo "Author: $obj->author <br />" ; echo "Price: $obj->price <p>" ;

} }

Trang 21

MySQLi – Prepare Statement

 Cho phép khai báo câu lệnh SQL trước

 Bổ sung các tham số vào câu lệnh

 Cho phép sử dụng lại nhiều lần câu lệnh SQL

 Thích hợp cho lệnh Insert: lúc đó chỉ thay đổi giá trị của tham số!

21

tham số!

 Các phương thức sử dụng cho prepare statement

 prepare(‘câu lệnh SQL’): khai báo câu lệnh SQL

 bind_param(type, param): binding các tham số cho câu lệnh

 execute(): thực thi câu lệnh prepare

 bind_result(var1,var2,…): binding kết quả với các biến

Trang 22

Sử dụng MySQLi

 Sử dụng prepare statement

22

$myID = 2 ; // id của sách (để test)

$query = "SELECT title, author from BOOKS where id>?";

$stmt = $mysqli -> prepare ( $query );

$stmt -> bind_param ( "d" , $myID ); // kết buộc tham số

Trang 23

$query ="SELECT title,author FROM BOOKS WHERE id>? AND price >?";

$stmt = $mysqli -> prepare ( $query );

$stmt -> bind_param ( "dd" , $myID , $price );

Trang 24

 Hậu quả của SQL injection

 Kẻ xấu vượt qua được kiểm tra đăng nhập

 Có thể xem, thay đổi và tệ hơn là xóa dữ liệu trong database

Trang 25

SQL injection – VD1

 Cho form nhập liệu như sau

25

Trang 28

SQL injection – VD2

 Cho form đăng nhập như sau

28

Trang 32

Cross-site scripting (XSS)

 XSS:

 Là một dạng kỹ thuật tấn công phổ biến hiện nay

 Là vấn đề bảo mật quan trọng đối với người phát triển ứng dụng web cũng như người sử dụng.

 Một số các trang web phổ biến cũng từng dính XSS như

Trang 33

Cross-site scripting

 Tấn công bằng cách chèn vào các web động (ASP, PHP,CGI, JSP…) các đoạn mã script nguy hiểm để thực hiệnmột hành động nào đó

 Các đoạn mã được chèn vào hầu hết được viết bằng cácclient-side scripting như javascript, jscript, DHTML

33

client-side scripting như javascript, jscript, DHTML

 VấnVấn đềđề nguynguy hiểmhiểm: kẻ tấn công cố tạo ra những mã độc

và gởi chúng cho nạn nhân, nạn nhân không nghi ngờ vàkích vào, đoạn mã độc thực thi, có thể lấy thông tincookie của nạn nhân gởi về cho kẻ tấn công!

Trang 34

Cross-site scripting

 Cơ bản XSS cũng giống như SQL Injection, nó cũng gởicác request từ client đến server nhằm chèn các thông tinvượt quá tầm kiểm soát của server

 Có thể là một request được gởi từ form dữ liệu

ttp://www.example.com/search.cgi?query=<script>alert('XSS was found !');</script>

Trang 35

Cross-site scripting

 Khác với kỹ thuật tấn công khác gây tổn hại cho server,còn XSS chỉ gây tổn hại ở phía client mà nạn nhân trựctiếp là người duyệt website đó

 Bản chất của XSS là chỉ tấn công vào bề mặt của site, do

Trang 36

Cross-site scripting

 Minh họa 1

36

Trang 38

Cross-site scripting

 Minh họa 2

38

File: demoXSS.php Đơn giản nhận tham số query string là id và hiển thị về trình duyệt

demoXSS.php thị về trình duyệt

User nhập URL như sau

Điều gì xảy ra khi ai đó link thực thi đến file

script ở host khác, rồi send URL này cho victim?

Ngày đăng: 08/05/2014, 13:43

TỪ KHÓA LIÊN QUAN

w