Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
1 MB
Nội dung
PHP & MYSQLNÂNGCAO ThS. Nguyễn Hà Giang Nội dung MySQL connector MySQLi PDO SQL Injection Cơ chế 2 Cơ chế Minh họa các trường hợp tấn công Cách bảo vệ Website Cross Site Scripting Đặc điểm Một số ví dụ minh họa Phòng chống Nguyen Ha Giang - 2009 API Đị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ì ứng dụng PHP kết nối thông qua các thành phần API được cung cấp sẵn. Nguyen Ha Giang - 2009 PHP App API MySQLMySQL Connector Connector là phần mềm cho phép ứng dụng kết nối vào MySQL Database Server MySQL cung cấp nhiều connector cho các ngôn ngữ khác nhau Connector/ . NET 4 Connector/ . NET Connector/ODBC Connector/J Connector/C, C++ Trong PHP nếu viết chương trình kết nối vào CSDL, thực thi các thao tác trên dữ liệu thì cần phần mềm cung cấp các API cho PHP sử dụng ⇒ connectorconnector Nguyen Ha Giang - 2009 Extension Trong PHP thường thấy khái niệm extension PHP bao gồm corecore và phần extensionextension Chức năng kết nối MySQL là một dạng extension 5 mysql extension mysqli extension PDO extension Extension thường cung cấp các API cho phép lập trình viên PHP dễ dàng sử dụng. Nguyen Ha Giang - 2009 core Extension MySQL API trong PHP Gồm có 3 API option chính 6 Nguyen Ha Giang - 2009 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ụng phiê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. Nguyen Ha Giang - 2009 PHP’s MySQLi Extension Còn được gọi là phiên bản MySQLMySQL IImprovedmproved ExtensionExtension Đượ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! Nguyen Ha Giang - 2009 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ới mộ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 Nguyen Ha Giang - 2009 Thao tác PDO Nguyen Ha Giang - 2009 [...]... dụng PDO object 11 Kết nối đến MySQL < ?php $db = new PDO( 'mysql: host=localhost;dbname=myDatabase', $user, $pass); ?> Lớp PDO Tên database Đóng kết nối < ?php $db = new PDO( 'mysql: dbname=test',$user,$pass); //… s d ng k t n i $db = null null; ?> Đóng kết nối Nguyen Ha Giang - 2009 Sử dụng PDO object 12 Xử lý lỗi kết nối: dùng cú pháp try catch < ?php try { $db = new PDO( 'mysql: dbname=test', $user, $pass);... Nguyen Ha Giang - 2009 Thao tác MySQLi Nguyen Ha Giang - 2009 Sử dụng MySQLi 18 Tạo đối tượng mysqli define('SERVER','localhost'); define('USER','root'); define('PASS',''); 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()); } Nguyen Ha Giang - 2009 Sử dụng MySQLi 19 Truy vấn dữ liệu (1)... Cross-site scripting 33 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ện mộ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ác client-side scripting như javascript, jscript, DHTML Vấn đề nguy hiểm kẻ tấn công cố tạo ra những mã độc hiểm: 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... Sử dụng MySQLi 22 Sử dụng prepare statement $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 $stmt->execute(); // k t bu c c t k t qu $stmt->bind_result($title, $author); while ($stmt->fetch()){ echo "ID : $myID Title: $title "; } Nguyen Ha Giang - 2009 Sử dụng MySQLi 23... title,author FROM BOOKS WHERE id>? AND price >?"; $stmt = $mysqli->prepare($query); $stmt->bind_param("dd", $myID, $price); $stmt->execute(); $stmt->bind_result($title, $author); while ($stmt->fetch()) { echo "ID : $myID Title: $title "; } Nguyen Ha Giang - 2009 SQL Injection 24 SQL injection? Hành động của ai đó thêm vào câu lệnh SQL và thực thi trên database của web server một cách bất hợp lệ!... MySQLi 19 Truy vấn dữ liệu (1) … $query = "SELECT * FROM BOOKS"; 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); } Nguyen Ha Giang - 2009 Sử dụng MySQLi 20 Truy vấn dữ liệu (2) $query = "SELECT title, author, price from BOOKS"; if ($result = $mysqli->query($query)) { while ($obj = $result->fetch_object()) { // l y giá... bất hợp lệ! SQL injection thường xuất hiện khi yêu cầu user nhập liệu Ví dụ như nhập tên, thay vì nhập tên, thì người ta lại nhập câu lệnh SQL và nó có thể thực thi được! 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 Nguyen Ha Giang - 2009 SQL injection – VD1 25 Cho form nhập liệu như sau Nguyen Ha Giang - 2009 SQL injection... field theo d ng thu c tính obj echo "Title: $obj->title "; echo "Author: $obj->author "; echo "Price: $obj->price "; } } Nguyen Ha Giang - 2009 MySQLi – Prepare Statement 21 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ố! Các phương thức sử dụng cho prepare... 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ực tiế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 là client-side script! Nạn nhân là người sử dụng khác của website, họ vô tình vào các trang có chứa mã nguy hiểm do hacker để lại, bị chuyển hướng với website khác, mất cookie, mật khNu, thậm chí máy tính bị cài virus, backdoor,... print_r($row); } $db = null; } catch (PDOException $e) { print "Error!: " $e->getMessage() ""; die(); } ?> Nguyen Ha Giang - 2009 Sử dụng PDO object 13 VD 1 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 { printf('Title: %sAuthor: %s