1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỀ TÀI : TÌM HIỂU MỘT SỐ LỖI BẢO MẬT VÀ PHƯƠNG PHÁP KHẮC PHỤC LỖI BẢO MẬT CỦA CÁC ỨNG DỤNG TRÊN PHP

71 190 0

Đ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

Định dạng
Số trang 71
Dung lượng 2,79 MB

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

Nội dung

Nhưng một trong những đối tượng quan trọngnhất của sự an toàn và bảo mật Internet chính là các máy chủ Web Web server, nơi cómột số lượng rất lớn các tương tác trực tiếp với người sử dụn

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Tel (84-511) 736 949, Fax (84-511) 842 771Website: itf.ud.edu.vn, Mail: cntt@edu.ud.vn

LUẬN VĂN TỐT NGHIỆP KỸ SƯ

NGÀNH CÔNG NGHỆ THÔNG TIN

MÃ NGÀNH : 05115

ĐỀ TÀI : TÌM HIỂU MỘT SỐ LỖI BẢO MẬT VÀ PHƯƠNG PHÁP KHẮC PHỤC LỖI BẢO MẬT CỦA CÁC ỨNG DỤNG TRÊN PHP

Mã số : 06T1-039 Ngày bảo vệ : 15-16/06/2011

SINH VIÊN : TRẦN QUỐC THẮNG LỚP : 06T1

CBHD : PGS.TS VÕ TRUNG HÙNG

ĐÀ NẴNG, 06/2011

Trang 2

Với tình cảm chân thành nhất, cho phép em được bày tỏ lòng biết ơn sâu sắc đến tất cả các cá nhân, đơn vị đã tạo điều kiện thuận lợi, giúp đỡ

em trong suốt quá trình học tập và thực hiện đồ án đồ án tốt nghiệp này.

Đầu tiên em xin bày tỏ lòng biết ơn sâu sắc đến quý thầy, cô giáo trong trường Đại Học Bách Khoa Đà Nẵng đã tận tình giảng dạy, truyền đạt kiến thức cho em trong suốt năm năm học vừa qua.Em xin chân thành cảm

ơn các thầy cô khoa Công nghệ thông tin-Trường Đại học Bách Khoa Đà Nẵng đã trang bị cho em những kiến thức cơ bản cần thiết để em có thể thực hiện tốt đồ án này cũng như đủ tự tin để làm việc sau này.

Đặc biệt em xin gửi lời cám ơn đến thầy giáo PGS.TS.Võ Trung Hùng

đã trực tiếp hướng dẫn và luôn giúp đỡ em trong suốt thời gian em thực hiện đồ án tốt nghiệp này.

Cuối cùng em xin được gửi lời cám ơn tới gia đình, người thân và tất cả các bạn bè đã luôn động viên, khích lệ em trong suốt quá trình học tập cũng như trong thời gian thực hiện để hoàn thành đồ án tốt nghiệp này.

Mặc dù đã có nhiều cố gắng, song do kiến thức, năng lực cũng như kinh nghiệm của bản thân còn hạn chế nên không thể tránh khỏi những sai sót về nội dung lẫn hình thức Kính mong nhận được sự giúp đỡ đóng góp ý kiến của thầy cô giáo và bạn bè để đồ án tốt nghiệp này được hoàn thiện hơn.

Xin chân thành cám ơn!

Huế, tháng 6 năm 2011 Sinh viên thực hiện Trần Quốc Thắng

Trang 3

Tôi xin cam đoan :

1 Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy PGS.TS.Võ Trung Hùng.

2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.

3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm.

Sinh viên thực hiện Trần Quốc Thắng

Trang 4

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 5

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 6

Chữ viết tắt Chữ đầy đủ

ASP Advanced Research Projects

Agency NetworkCGI Common Gateway InterfaceDBMS Database Management SystemHTML Hypertext Markup LanguageHTTP Hypertext Transfer ProtocolIIS Internet Information ServicesJSP Java Server Pages

OWASP The Open Web Application

Security ProjectPERL Practical Extraction and Report

LanguagePHP Hypertext PreprocessorSSL Secure Socket Layer

TCP/IP Transmission Control Protocol/

Internet ProtocolURL Uniform Resource LocatorXSS Cross Site Scripting

Trang 7

Số hiệu bảng Tên bảng Trang

2 Bảng lưu tên người dùng và mật khẩu có ba cột bổ

sung

47

Trang 8

Hình 1: Kiến trúc của một ứng dụng web 5

Hình 2: Mô hình hoạt động của một ứng dụng web 6

Hình 3: Một Form đăng nhập trên trình duyệt 31

Hình 4: Kịch bản tấn công Session fixation sử dụng Session ID chọn sẵn 35

Hình 5: Tấn công Session fixation đầu tiên có thể khởi tạo phiên 37

Hình 6: Một cuộc tấn công thay cookie để đăng nhập trái phép 45

Hình 7: Giao diện chính của WebScarab 50

Hình 8: Giao diện chính của FoxyProxy 52

Hình 9: Giao diện ứng dụng để thử nghiệm lỗi SQL Injection 54

Hình 10: Kết quả truy vấn có giá trị last nam:”Smith” 54

Hình 11: Ứng dụng xảy ra lỗi SQL Injection 55

Hình 12: Nội dung Email có them định danh phiên 57

Hình 13: Jane kick vào lien kết Goat Hills Financial 57

Hình 14: Màn hình đăng nhập Goat Hills Financial 58

Hình 15: Màn hình đăng nhập name và password của Goat Hills Financial 58

Hình 16: Màn hình của Joe có liên kết đến site Goat Hills Financial 59

Hinh 17: Màn hình khi Joe kick liên kết đến site Goat Hills Financial 59

Hình 18: URL ở thanh address 60

Hình 19: Thay “NOVALIDSESSION” bằng “TranQuocThang” 60

Hình 20: Joe đã đăng nhập thành công 61

Trang 9

CHƯƠNG I NGHIÊN CỨU TỔNG QUAN 5

I Giới thiệu ứng dụng web 5

I.1 Khái niệm 5

I.2 Hoạt động của một ứng dụng web 6

I.3 Một số nguyên tắc bảo mật cơ bản trong các ứng dụng web 7

II Ngôn ngữ lập trình PHP 9

II.1 Giới thiệu 9

II.2 Các cơ chế bảo mật trong PHP 11

III Hệ quản trị cơ sở dữ liệu My SQL 14

III.1 Giới thiệu 15

III.2 Cơ chế bảo mật trong My SQL 15

IV Kết luận chương 17

CHƯƠNG II KHẮC PHỤC LỖI BẢO MẬT TRÊN PHP 18

I Một số khái niệm và thuật ngữ liên quan 18

II Một số lỗi bảo mật trên Form và URL 21

II.1 Phương pháp tấn công thay đổi ngữ nghĩa URL 21

II.2 Phương pháp tấn công file upload 23

II.3 Phương pháp tấn công chèn mã lệnh thực thi trên trình duyệt ( XSS ) 26

II.4 Phương pháp tấn công giả mạo form 28

III Một số lỗi bảo mật với cơ sở dữ liệu và câu truy vấn SQL 29

III.1 Phương pháp đánh cắp chứng thực quyền truy cập 29

III.2 Phương pháp chèn câu truy vấn SQL 31

IV Một số lỗi bảo mật với phiên ( Session ) và Cookie 34

IV.1 Phương pháp ứng định phiên 34

IV.2 Phương pháp đánh cắp phiên 38

V Một số lỗi bảo mật với chứng thực và xác thực 40

V.1 Phương pháp tấn công vét cạn 40

V.2 Phương pháp lấy user name và password ở cookie 44

VI Kết luận chương 49

CHƯƠNG III CÀI ĐẶT THỬ NGHIỆM 50

I Giới thiệu một số công cụ 50

I.1 Webscarab 50

I.2 FoxyProxy 52

I.3 WebGoat 53

II Cài đặt thử nghiệm 53

II.1 Kỹ thuật tấn công chèn câu truy vấn SQL ( SQL Injection ) 53

II.2 Kỹ thuật tấn công ấn định phiên 56

III Kết luận chương 61

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 62

TÀI LIỆU THAM KHẢO

TÓM TẮT LUẬN VĂN TỐT NGHIỆP

Trang 10

Giới thiệu bối cảnh đề tài:

Ngày nay, với sự phát triển mạnh mẽ của Internet, hầu hết cá nhân, tổ chức và doanhnghiệp đều có nhu cầu đăng tải thông tin lên các trang thông tin Web và thực hiện cácgiao dịch kinh doanh trực tuyến Vấn đề nảy sinh là khi phạm vi ứng dụng của các ứngdụng Web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trởthành đối tượng cho nhiều người tấn công với các mục đích khác nhau

Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượngcác vụ tấn công trên Internet cũng tăng theo cấp số nhân Không chỉ số lượng các cuộc tấncông tăng lên nhanh chóng mà các phương pháp tấn công ngày càng tinh vi và có tổ chức.Mặt khác, việc quản trị các hệ thống mạng đòi hỏi nhà quản trị hệ thống phải có kiến thức

và kinh nghiệm, nếu không sự yếu kém trong quản lý sẽ tạo điều kiện cho các kẻ tấn côngkhai thác

Khi nói đến vấn đề bảo mật, hầu hết các chuyên gia bảo mật đều chú trọng đến sự antoàn của hệ thống mạng và hệ điều hành Nhưng một trong những đối tượng quan trọngnhất của sự an toàn và bảo mật Internet chính là các máy chủ Web (Web server), nơi cómột số lượng rất lớn các tương tác trực tiếp với người sử dụng Internet như xem thông tin,trao đổi dữ liệu, thực hiện các giao dịch tài chính, Ngoài ra, vấn đề an toàn và bảo mậtWeb phụ thuộc vào nhiều yếu tố quan trọng khác, mà trong đó các ngôn ngữ lập trìnhWeb như ASP, PHP, có một ảnh hưởng không nhỏ Với những công cụ tự tìm lỗ hổngtuy giúp rất nhiều cho những nhà lập trình nhưng vẫn không thể ngăn chặn toàn bộ lỗi vìcông nghệ Web đang phát triển rất nhanh chóng (nhưng chủ yếu chú trọng đến yếu tốthẩm mĩ, tốc độ, ) nên dẫn đến nhiều khuyết điểm mới phát sinh

Để góp phần ngăn chặn các cuộc tấn công bảo mật vào các ứng dụng web, đồ án tốt

nghiếp này được thực hiện với đề tài “Tìm hiểu một số lỗi bảo mật và phương pháp khắc

phục lỗi bảo mật của các ứng dụng trên PHP” nhằm tìm hiểu, phân tích các lỗ hổng bảo

mật, các kỹ thuật tấn công và đưa ra các phương pháp phòng tránh khắc phục cho các ứngdụng web được xây dựng bằng ngôn ngữ PHP

Mục đích của đề tài:

Tìm hiểu lý thuyết bảo mật và ứng dụng Web

Tìm hiểu ngôn ngữ lập trình PHP, hệ quản trị cơ sở dữ liệu MySQL

Tìm hiểu một số kỹ thuật tấn công và phương pháp khắc phục lỗi bảo mật của các ứngdụng được xây dựng với ngôn ngữ PHP

Thành công trong việc cài đặt thử nghiệm một số kỹ thuật tấn công bảo mật và đưa raphương pháp khắc phục

Đối tượng và phạm vi nghiên cứu:

Trang 11

Các cơ chế bảo mật trong ứng dụng web, ngôn ngữ lập trình PHP và hệ quản trị cơCác kỹ thuật tấn công bảo mật và phương pháp khắc phục.

Cài đặt các máy chủ web sử dụng Apache, Tomcat,

Các ứng dụng web sử dụng ngôn ngữ lập trình PHP và website của một số doanhnghiệp được xây dựng bằng ngôn ngữ PHP

Ý nghĩa và thực tiễn của đề tài:

PHP là một trong những ngôn ngữ lập trình web nổi tiếng nhất và được sử dụng rấtrộng rãi, đặc biệt trong các ứng dụng trực tuyến Tuy nhiên, chính việc khai thác mạnh mẽ

và tính dễ sử dụng đã dẫn đến PHP bị sử dụng sai Gần đây, có nhiều cảnh báo bảo mậtliên quan đến PHP nhưng trên thực tế, hầu hết các lỗi này không phải do lỗ hổng trongPHP mà do việc sử dụng không đúng và không an toàn của người phát triển ứng dụng.Mặc dù chúng ta không thể hoàn toàn thành công trong việc chống lại các cuộc tấncông bảo mật nhưng chúng ta có thể khắc phục tối đa các lỗi bảo mật nhằm nâng cao khảnăng bảo mật của ứng dụng Luận văn sẽ xem xét cụ thể đến một số loại lỗi bảo mật và

mô tả các cách phát hiện, phòng tránh các lỗi đó nhằm giảm thiểu thiệt hại cho các ứngdụng Web được xây dựng bằng PHP

Phương pháp triển khai đề tài:

Tìm kiếm, thu thập, tham khảo các tài liệu và các chương trình demo liên quan đến đềtài từ nhiều nguồn như sách, các bài báo, internet

Tìm hiểu các website được xây dựng bằng ngôn ngữ PHP

Cài đặt một số máy chủ web, ứng dụng web trên máy tính cá nhân

Làm báo cáo đồ án theo bố cục như sau:

Chương I : TỔNG QUAN VỀ ỨNG DỤNG WEB,NGÔN NGỮ PHP VÀ HỆ QUẢN TRỊ CƠ SỠ DỮ LIỆU My SQL Chương này giới thiệu một cách tổng

quan về ứng dụng web, mô hình hoạt động của một ứng dụng web, một số nguyêntắc bảo mật cơ bản trong các ứng dụng web, ngôn ngữ lập trình PHP và một số cơchế bảo mật của PHP, hệ quản trị cơ sở dữ liệu MySQL và các cơ chế bảo mậttrong MySQL

Chương II : PHƯƠNG PHÁP KHẮC PHỤC LỖI BẢO MẬT CỦA CÁC ỨNG DỤNG TRÊN PHP Nội dung của chương này tập trung tìm hiểu các kỹ

thuật tấn công bảo mật và phương pháp khắc phục cho các ứng dụng web xâydựng bằng ngôn ngữ PHP, được chia thành 4 nhóm chính: lỗi bảo mật trên form vàURL, lỗi bảo mật với cơ sở dữ liệu và câu truy vấn SQL, lỗi bảo mật với Phiên,Cookie và cuối cùng là lỗi bảo mật với chứng thực và xác thực

Chương III: CÀI ĐẶT THỬ NGHIỆM MỘT SỐ KỸ THUẬT TẤN CÔNG

VÀ GIẢI PHÁP KHẮC PHỤC Nội dung chương này chủ yếu trình bày kết quả

cài đặt thử nghiệm một số kỹ thuật tấn công bảo mật quan trọng sử dụng ứng dụng

Trang 12

WebGoat và áp dụng các phương pháp khắc phục để kiểm tra xem tính hiệu quảcủa các phương pháp đó.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Phần này tóm tắt lại các kết quả đạt được của

luận văn Đồng thời đưa ra hướng nghiên cứu tiếp theo đối với việc phòng tránh khắc phục các lỗi bảo mật của các ứng dụng web

Trang 13

NGHIÊN CỨU TỔNG QUAN

Chương này ta giới thiệu tổng quan về ứng dụng web,ngôn ngữ PHP và hệ quả trị cơ sở

My SQL

I Giới thiệu ứng dụng web

Hằng ngày, bạn có nhu cầu đăng tải thông tin lên các trang thông tin Web và thực hiệncác giao dịch kinh doanh trực tuyến được thực hiện qua các ứng dụng web.Nếu bạn làmviệc ở trên mạng Internet nhiều, có thể bạn sẽ sữ dụng rất nhiều ứng dụng web mà bạnkhông đếm nổi Thực tế các ứng dụng web đã trở thành một công cụ đăng tin,giao dịch…

vô cùng hữu hiệu trong cuộc sống hiện đại của chúng ta

Ứng dụng web là một ứng dụng khách/chủ (client/server) sử dụng giao thức HTTP để

tương tác với người dùng hay hệ thống khác Trình khách dành cho người sử dụng thường

là một trình duyệt như Internet Explorer, Firefox hay Netscape Navigator, Người dùnggửi và nhận các thông tin từ trình chủ thông qua việc tác động vào các trang Web Cácchương trình có thể là các trang trao đổi mua bán, các diễn đàn hoặc ứng dụng gửi nhận e-mail,…

Các kỹ thuật xây dựng ứng dụng Web có tốc độ phát triển rất nhanh Trước đây nhữngứng dụng Web thường được xây dựng bằng CGI (Common Gateway Interface) chạy trêncác trình chủ Web và có thể kết nối vào các cơ sở dữ liệu đơn giản trên cùng máy chủ.Ngày nay ứng dụng Web thường được viết bằng Java, ASP, PHP, và chạy trên máy chủphân tán, kết nối đến nhiều nguồn dữ liệu

Một ứng dụng web thường gồm có cấu trúc như sau:

Hình 1: Kiến trúc của một ứng dụng web

Trang 14

 Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho người dùng, ngoài ra còn

có thể có thêm các ứng dụng tạo bố cục cho trang web

 Lớp ứng dụng: là nơi xử lý của ứng dụng Web Nó sẽ xử lý thông tin người dùngyêu cầu, đưa ra quyết định, gửi kết quả đến "lớp trình bày" Lớp này thường đượccài đặt bằng các ngôn ngữ lập trình như CGI, Java, NET , PHP, và được triểnkhai trên các trình chủ như IBM WebSphere, WebLogic, Apache, IIS,…

 Lớp dữ liệu: thường là các hệ quản trị cơ sở dữ liệu (DBMS) chịu trách nhiệmquản lý các tập tin dữ liệu và quyền sử dụng

Mô hình hoạt động của một ứng dụng web:

Hình 2: Mô hình hoạt động của một ứng dụng web

Trong đó:

 Trình khách: là các trình duyệt Internet Explorer, Firefox,…

 Trình chủ: Apache, IIS,…

 Hệ quản trị cơ sở dữ liệu: SQL Server, MySQL, DB2, Access,…

Một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng là tường lửa(Firewall) Tường lửa có vai trò như là lớp rào chắn bên ngoài một hệ thống mạng vớichức năng chính là kiểm soát luồng thông tin giữa các máy tính Có thể xem tường lửanhư một bộ lọc thông tin, nó xác định và cho phép một máy tính có được truy xuất đếnmột máy tính khác hay không, một mạng này có được truy xuất đến mạng kia hay không.Người ta thường dùng tường lửa vào mục đích:

 Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài

 Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập vào trong

 Kiểm soát địa chỉ truy nhập

Trang 15

Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua các lệnh

cơ bản GET, POST,…của giao thức HTTP, trình chủ lúc này có thể cho thực thi mộtchương trình được xây dựng bằng một ngôn ngữ lập trình như Perl, C/C++,…hoặc trìnhchủ yêu cầu bộ diễn dịch thực thi các trang ASP, JSP,…theo yêu cầu của trình khách.Tùy theo các tác vụ của chương trình được cài đặt mà nó kết nối đến cơ sở dữ liệu, xử

lý, tính toán, lưu các thông tin do trình khách gửi đến,…và từ đó trả về cho trình kháchmột luồng dữ liệu có định dạng theo giao thức HTTP, gồm 2 phần:

 Header: mô tả các thông tin về gói dữ liệu, các thuộc tính và trạng thái trao đổigiữa trình duyệt và máy chủ web

 Body: là phần nội dung dữ liệu mà Server gửi về Client, có thể là một tập tinHTML, một hình ảnh, một đoạn phim hay một văn bản bất kỳ

Theo mô hình ở Hình 2, đối với tường lửa thì luồng thông tin giữa trình chủ và trìnhkhách là luồng thông tin hợp lệ Vì thế, nếu kẻ tấn công tìm thấy vài lỗ hổng trong ứngdụng Web thì tường lửa không còn hữu dụng trong việc ngăn chặn kẻ tấn công này Do

đó, các kỹ thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào những

lỗ hổng phát sinh trong quá trình phát triển ứng dụng Web hơn là tấn công trực tiếp vào hệthống mạng hoặc hệ điều hành

a Ứng dụng có thể không cần sử dụng các cookie thường trực

Cookie thường trực là những tệp được các ứng dụng Web gửi tới máy tính người dùng

và vẫn tồn tại trên máy tính ngay cả khi họ không còn duyệt site Chúng lưu một số thôngtin về người dùng để các ứng dụng Web tuỳ biến nội dung cho phù hợp với từng đối tượngngười dùng hoặc cho phép bỏ qua giai đoạn đăng nhập

Các cookie không thường trực được lưu trong bộ nhớ máy tính của người dùng và chỉtồn tại trong thời gian người dùng duyệt site

Nếu site của bạn sử dụng cookie thường trực thì không nên yêu cầu lưu trữ chúng trongtệp log Khi tệp log lưu lại tất cả các thông tin đăng nhập của người dùng thì có nhiều khảnăng là những thông tin này có thể bị tiết lộ ra ngoài

b Sử dụng SSL (Secure Socket Layer) cho tất cả các trang nhạy cảm được chuyển trên mạng Internet

SSL mã hoá nội dung của các thông điệp TCP/IP để nó không bị nhòm ngó trên đườngtruyền SSL hoặc một giải pháp mã hoá khác là rất cần thiết khi gửi các thông tin nhạycảm (như số thẻ tín dụng) qua mạng vì cơ hội thâm nhập đường truyền và lấy cắp cácthông tin bí mật là thấp song không phải không thể có Người dùng sẽ không đặt niềm tinvào site của bạn nếu các thông tin nhạy cảm không được mã hoá

Tuy nhiên, mặt trái của SSL là làm giảm hiệu năng thực hiện của ứng dụng Mức sửdụng tài nguyên hệ thống CPU đòi hỏi trong tiến trình mã hoá và giải mã cho một trangSSL có thể cao hơn từ 10 đến 100% so với các trang bình thường

Trang 16

c Yêu cầu người dùng đăng nhập mỗi khi sử dụng ứng dụng

Nguyên tắc này áp dụng cho các ứng dụng có yêu cầu thủ tục đăng nhập Điều này cónghĩa là việc đăng nhập tự động dựa trên cookie là không được phép Mặc dù người dùng

có thể thấy phiền hà nhưng nếu cho họ đăng nhập tự động dựa trên cookie thì sẽ rất nguyhiểm vì như ta đã thấy, sử dụng các cookie thường trực không phải lúc nào cũng phù hợp.Một biện pháp tiếp theo cần thiết để bảo vệ mật khẩu là huỷ tính năng Autocompletecủa các trình duyệt trên các trường mật khẩu Điều này có thể thực hiện bằng cách thêmthuộc tính Autocomplete ="off" cho thẻ <form> hoặc <input>

Vídụ: <input type="password" name="pwd" size=16 maxlength=16 Autocomplete="Off">

d Đăng xuất người dùng ra khỏi hệ thống ngay khi họ rời trang web

Giả sử một người dùng đang xem một trang web của bạn, sau đó họ truy cập một trangmới nhưng cuối cùng lại quyết định quay trở lại trang của bạn bằng cách ấn phím BACK.Trong trường hợp này, ứng dụng phải yêu cầu người dùng đăng nhập lại một lần nữa Đểphát hiện những tình huống như thế này thì phải dựa hoàn toàn vào các script chạy ở phíatrình duyệt mà không thể dựa vào trình chủ vì nó không biết người dùng đã ở những đâu Cách giải quyết tốt nhất cho vấn đề này là sử dụng một giải pháp bảo mật ProxyServer Proxy Server là một loại bộ đệm nằm giữa máy tính của người dùng và tài nguyêninternet, sẽ giám sát mọi yêu cầu từ trình duyệt, ghi lại mọi địa chỉ trình duyệt đã truy cập

Trong giải pháp thứ nhất: ta đặt giới hạn phiên là một khoảng thời gian mong muốn nào

đó Trong ứng dụng, lưu trữ thông tin truy nhập vào một biến phiên làm việc và kiểm tra

nó trên mọi trang người sử dụng duyệt qua Nếu thông tin truy nhập không thuộc về mộtbiến phiên, người sử dụng sẽ bị cắt kết nối với site và ứng dụng cần định hướng họ sangtrang truy nhập hệ thống

Giải pháp thứ hai: phía client chèn thêm đoạn mã JavaScript như sau vào đầu của mọitrang Web để cắt kết nối người sử dụng với ứng dụng 9000 là khoảng thời tối đa tínhbằng mily giây người sử dụng vẫn duy trì phiên làm việc của họ trong trường hợp không

có tương tác nào với site

<script Language="JavaScript">

window.setTimeout("window.navigate('Logout.php')", 9000);

</script>

Trang 17

II Ngôn ngữ lập trình PHP

Vấn đề an toàn và bảo mật Web phụ thuộc vào nhiều yếu tố, mà trong đó các ngôn ngữlập trình Web như ASP, PHP, có một ảnh hưởng không nhỏ Có bao giờ bạn nghĩ sẽ tìmhiểu về những ngôn ngữ này không?Chúng ta hãy cùng tìm hiểu về ngôn ngữ lập trìnhPHP

II.1 Giới thiệu

PHP (viết tắt "PHP: Hypertext Preprocessor") là một ngôn ngữ lập trình kịch bản

mã nguồn mở chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ và có thể

dễ dàng nhúng vào trang HTML Do được tối ưu hóa cho các ứng dụng web, tốc độnhanh, nhỏ gọn, dễ học, cú pháp giống C và Java và thời gian xây dựng sản phẩm tươngđối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữlập trình web phổ biến nhất thế giới

PHP được phát triển từ một sản phẩm có tên là PHP/FI PHP/FI do Rasmus Lerdorf tạo

ra năm 1995, ban đầu được xem như là một tập con đơn giản của các mã kịch bản ngônngữ Perl để theo dõi tình hình truy cập đến bản sơ yếu lý lịch của ông trên mạng Ông đãđặt tên cho bộ mã kịch bản này là 'Personal Home Page Tools' Khi cần đến các chức năngrộng hơn, Rasmus đã viết ra một bộ thực thi bằng C lớn hơn để có thể truy vấn tới các cơ

sở dữ liệu và giúp cho người sử dụng phát triển các ứng dụng web đơn giản Sau đó,Rasmus đã quyết định công bố mã nguồn của PHP/FI

Ví dụ: đoạn mã PHP đơn giản sau đây sẽ hiển thị dòng chữ “Hello World” ra màn hình

Trang 18

Thẻ <?php và thẻ ?> đánh đấu sự bắt đầu và kết thúc của phần mã PHP qua đó máychủ biết để xử lý và dịch mã cho đúng Đây là một điểm khá tiện lợi của PHP giúp choviệc viết mã PHP trở nên khá trực quan và dễ dàng trong việc xây dựng phần giao diệnứng dụng HTTP.

Ngôn ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sựđóng góp rất lớn của Zend Inc., công ty do các nhà phát triển cốt lõi của PHP lập nênnhằm tạo ra một môi trường chuyên nghiệp để PHP phát triển

Quá trình phát triển của ngôn ngữ lập trình PHP qua các phiên bản như sau:

PHP/FI (Personal Home Page/Forms Interpreter):

 PHP/FI 2.0 được chính thức công bố vào tháng 11 năm 1997, bao gồm một số cácchức năng cơ bản cho PHP như ta đã biết ngày nay Nhưng không lâu sau đó, nó

đã được thay thế bởi các bản alpha đầu tiên của PHP 3.0

PHP 3:

 PHP 3.0 là phiên bản được Andi Gutmans và Zeev Suraski tạo ra năm 1997 saukhi viết lại hoàn toàn bộ mã nguồn trước đó Một trong những sức mạnh lớn nhấtcủa PHP 3.0 là các tính năng mở rộng mạnh mẽ Ngoài khả năng cung cấp chongười dùng cuối một cơ sở hạ tầng chặt chẽ dùng cho nhiều cơ sở dữ liệu, giaothức và API khác nhau, các tính năng mở rộng của PHP 3.0 đã thu hút rất nhiềunhà phát triển tham gia và đề xuất các mô đun mở rộng mới Nó đã được đặt tênngắn gọn là 'PHP', viết tắt của "Hypertext Preprocessor" PHP 3.0 đã chính thứcđược công bố vào tháng 6 năm 1998

PHP 4:

 PHP 4.0 chính thức được công bố vào tháng 5 năm 2000 Ngoài tốc độ xử lý đượccải thiện rất nhiều, PHP 4.0 đem đến các tính năng chủ yếu khác gồm có sự hỗ trợnhiều máy chủ Web hơn, hỗ trợ phiên làm việc HTTP, tạo bộ đệm thông tin đầu

ra, nhiều cách xử lý thông tin người sử dụng nhập vào bảo mật hơn và cung cấpmột vài cấu trúc ngôn ngữ mới

PHP 5:

 Ngày 29 tháng 6 năm 2003, PHP 5 Beta 1 chính thức được công bố để cộng đồngkiểm nghiệm Phiên bản Beta 2 sau đó ra mắt vào tháng 10 năm 2003 với sự xuấthiện của hai tính năng rất được chờ đợi: Iterators, Reflection Ngày 21 tháng 12năm 2003, PHP 5 Beta 3 đã được công bố để kiểm tra với khả năng gọi các hàmPHP, sửa chữa nhiều lỗi và thêm khá nhiều hàm mới PHP 5 bản chính thức đã ramắt ngày 13 tháng 7 năm 2004 Ngày 14 tháng 7 năm 2005, PHP 5.1 Beta 3 đượcPHP Team công bố đánh dấu sự chín muồi mới của PHP

PHP 6:

 Hiện nay phiên bản tiếp theo của PHP đang được phát triển, PHP 6 bản sử dụngthử đã có thể được download tại địa chỉ http://snaps.php.net

Trang 19

II.2 Các cơ chế bảo mật trong PHP

Ngôn ngữ kịch bản PHP cung cấp nhiều cơ chế bảo mật giúp ngăn chặn việc khai tháccác lỗ hổng hoặc làm giảm thiệt hại gây ra bởi các cuộc tấn công Trong các cấu hìnhchuẩn của PHP, tất cả các tuỳ chọn bảo mật thường bị vô hiệu hoá vì lý do tương thích.Mỗi một cơ chế áp đặt một hạn chế đặc biệt khi lập trình Khi các cấu hình bảo mật PHPđược nới lỏng thì các máy chủ web ít khi buộc các nhà phát triển phải xem xét đến các hạnchế đó

Các nhà cung cấp dịch vụ lưu trữ web (web hosting) không thể kiểm soát chặt chẽ bảomật trên tất cả các máy chủ web cung cấp cho khách hàng Nếu xem xét một số gói lưu trữweb thì có thể thấy rằng không có nhà cung cấp nào thực hiện cấu hình đúng các tuỳ chọn

bảo mật, thậm chí là tuỳ chọn bảo mật quan trọng nhất như register_globals = off.

Hầu hết các nhà cung cấp sử dụng máy chủ web Apache Máy chủ loại này sử dụng hai

cách thực thi PHP: mod_php và cơ chế CGI Ta có thể thu được các thông tin về web hosting bằng cách thực thi đoạn mã <?php phpinfo();?> Nếu đoạn mã này trả về giá trị

“Apache Handler” ở trường “Server API” thì máy chủ sử dụng mod_php, ngược lại kết

quả là “CGI”.

a PHP sử dụng CGI

Giải pháp CGI được sử dụng bởi hầu hết các nhà cung cấp là rất linh hoạt và khá antoàn nếu được cấu hình đúng Nó thực thi các ứng dụng PHP như các tiến trình riêng biệtthông qua cơ chế CGI cổ điển Để ngăn chặn các kịch bản chạy trên máy chủ đầy đủ chứ

không phải ở cấp đặc quyền người dùng (user privilege), nhà cung cấp thực thi các môđun

mod_suexec hoặc mod_suphp của Apache Cách này không những bảo vệ máy chủ mà

còn bảo vệ người dùng trên máy chủ chống lại các cuộc tấn công

Ngoài ra, người dùng web có thể kiểm soát các tuỳ chọn PHP trong một cấu hình CGIbằng nhiều cách Trong chế độ CGI, các trình biên dịch PHP cho phép tập tin php.ini nằmcùng thư mục với các tập tin kịch bản PHP được thực thi

Không giống như tập tin htaccess, tập tin php.ini không ảnh hưởng đến các thư mục

con Vì vậy, mỗi thư mục chứa các kịch bản thực thi PHP cần một tập tin php.ini riêngnhưng không phải thư mục nào cũng đòi hỏi tập tin này, ví dụ như thư mục wp-contentcủa hệ thống Wordpress

b Một số tuỳ chọn bảo mật của PHP

allow_url_fopen (khuyến cáo: off): kiểm soát chức năng cho phép truy cập tập tin PHP

thông qua URL hay không Khi tuỳ chọn này bị cấm thì khả năng bị tấn công bằng mã

độc từ xa rất thấp Kể từ phiên bản PHP 5.2.0, allow_url_include kiểm soát include() và

require() riêng biệt.

display_errors (khuyến cáo: off): điều khiển việc tắt mở hiển thị thông báo lỗi PHP.

Chức năng này vừa hỗ trợ cho việc lập trình nhưng cũng vừa cung cấp cho kẻ tấn côngcác thông tin chi tiết trong ứng dụng để thực hiện tấn công

Trang 20

disable_functions: cho biết danh sách các hàm PHP bị vô hiệu hoá (disable) Các ứng

dụng PHP thường tránh sử dụng các hàm như exec().

open_basedir: giới hạn thực thi tập tin PHP đối với các thư mục cụ thể Nếu áp dụng

cho nhiều thư mục thì các thư mục cách nhau bởi dấu hai chấm “:” Kết thúc một đường dẫn bằng dấu xuyệt “/”.

register_globals (khuyến cáo: off): xác định tham số từ URL hay từ phương thức

POST được gửi đến các kịch bản như là biến toàn cục

safe_mode (khuyến cáo: on): xác định PHP có hoạt động ở chế độ an toàn đặc biệt hay

không Ở chế độ này, PHP có thể thực hiện kiểm tra bổ sung cho hoạt động của một tậptin, giới hạn truy cập vào các biến môi trường

sql.safe_mode: xác định các yêu cầu đăng nhập có được xử lý một cách đặc biệt cho

các máy chủ cơ sở dữ liệu hay không Ở chế độ này, các hàm PHP sử dụng tài khoản hệthống để đăng nhập vào cơ sở dữ liệu Vì tên của người sử dụng cơ sở dữ liệu hiếm khitương ứng với người dùng hệ thống trong môi trường web hosting chia sẻ nên tuỳ chọnnày chỉ được sử dụng trong các trường hợp cụ thể

Áp dụng các tuỳ chọn này thì tập tin php.ini sẽ bao gồm:

[PHP]

register_globals = off

allow_url_fopen = off

safe_mode = on

open_basedir = <path name of web directory>

disable_functions = exec, system, passthru, shell_exec, popen, escapeshellcmd, proc_open, proc_nice, ini_restore

display_errors = off

c PHP sử dụng mod_php

Hai nhà cung cấp dịch vụ web hosting Server4u và all-inkl sử dụng mod_php và cho phép các khách hàng cấu hình PHP cơ bản thông qua tập tin htaccess Các tập tin

.htaccess này chỉ có thể điều khiển hai trong số các tuỳ chọn bảo mật chính của PHP.

Ngoài việc bảo vệ nơi lưu trữ web thông qua chứng thực HTTP thông thường, một tập tin

.htaccess được chứa trong thư mục gốc root và bao gồm:

php_flag register_globals off

php_flag display_errors off

Trang 21

Tập tin htaccess chuẩn sẽ được áp dụng cho mọi thư mục con.

Tuy nhiên, khi thực hiện thì tất cả các kịch bản PHP sử dụng định danh (ID) người dùng (user) và nhóm người dùng (group) của tiến trình máy chủ web Khi quá trình này

đòi hỏi nhiều đặc quyền đọc hơn để truy cập thư mục thì có thể gây hậu quả nghiêm trọngcho các người dùng khác hoặc thậm chí cho cả máy chủ trong trường hợp bị tấn công.Trong trường hợp đó, các nhà cung cấp thường sử dụng nhiều cơ chế bảo vệ khác nhau

Chẳng hạn, nhà cung cấp all-inkl hạn chế truy cập tập tin PHP bằng cách thiết lập

open_basedir cho thư mục của khách hàng.

Bảng sau cung cấp giá trị thiết lập cho các tuỳ chọn bảo mật:

Tuỳ chọn bảo mật Giá trị mặc định php.ini htaccess

allow_url_include off yes no

register_globals on yes yes

Bảng 1: Thiết lập các tùy chọn bảo mật

Nếu allow_url_fopen = off được thiết lập thì không cho phép hệ thống diễn đàn như

phpBB tải hình ảnh từ máy chủ bên ngoài Vì vậy, mở rộng thử nghiệm thiết lập tạm thời

diplay_error = on là rất quan trọng Trong trường hợp các giới hạn chức năng bị gián

đoạn hoặc không được chấp nhận thì các thiết lập bảo mật trong tập tin php.ini tương ứng

cần được nới lỏng Nếu thông báo lỗi không đưa ra được nguyên nhân của lỗi thì thửnghiệm với từng tuỳ chọn là cách duy nhất

Tuy nhiên, trong các ứng dụng PHP hiện đại, trình cài đặt thường đưa ra khuyến cáo

các lỗi có thể có đối với từng tuỳ chọn bảo mật cụ thể Ví dụ, phiên bản phpBB 3 kiểm tra

nhiều tuỳ chọn bảo mật PHP khác nhau trong suốt quá trình cài đặt và đưa ra các khuyếncáo kèm theo Ngược lại, hệ thống quản trị nội dung Joomla cung cấp các cảnh bảo rõ

ràng về những cấu hình máy chủ không an toàn, ví dụ cảnh báo khi thiết lập

register_blobals = on.

Trong các môi trường lưu trữ web chia sẻ, các tập tin chứa dữ liệu truy cập như mậtkhẩu được quan tâm đặc biệt Hầu hết các ứng dụng web sử dụng hệ quản trị cơ sở dữ liệu

MySQL lưu trữ mật khẩu cơ sở dữ liệu trong thư mục web dưới dạng plain/text Ví dụ,

Trong Wordpress, tập tin này là wp-config.php, trong phpBB là config.php Ta nên thiết lập chỉ cho phép owner được quyền truy cập những tập tin này bằng cách sử dụng chức

năng cài đặt quyền truy cập tập tin có sẵn ở hầu hết các chương trình FTP

Trang 22

Ví dụ: các gói web của hai nhà cung cấp all-inkl và Server4u yêu cầu quyền đọc của

người dùng đối với tập tin PHP và tập tin include Khi đặc quyền bị thiếu, máy chủ đưa rathông báo lỗi hoặc hiện tài liệu rỗng ở trình duyệt

Ta cũng có thể loại bỏ quyền ghi vào tập tin php.ini cũng như các thư mục chứa chúng

và sử dụng disable_functions để ngăn chặn các kịch bản PHP tác động đến đặc quyền truy cập thông qua chmod() Sau đó, các chương trình độc hại không thể chèn các giá trị gây

lỗi vào các tập tin này hoặc xoá chúng

Tuy nhiên, đặc quyền ghi cần được tạm thời phục hồi để thực hiện cập nhật Công việc

này rất tốn thời gian, dễ gây lỗi Khi chmod() bị vô hiệu hoá, các hệ thống như Wordpress

sẽ không thể điều chỉnh đặc quyền truy cập của các tập tin hoặc tải thư mục tự động Do

đó, các quản trị viên phải thực hiện một cách thủ công

Tất cả các cơ chế phía người dùng nêu trên không thể bảo vệ khỏi mọi cuộc tấn công

Cụ thể, chúng không loại trừ trách nhiệm của người dùng web hosting đối với việc duy trì

và cập nhật thường xuyên các bản vá lỗi bảo mật mới nhất cho các ứng dụng PHP Khicác kịch bản PHP được lập trình cẩu thả cho phép ghi dữ liệu người dùng vào cơ sở dữliệu mà không cần lọc, những kẻ tấn công hoặc phần mềm độc hại có thể thao tác dữ liệucủa ứng dụng bất kể tất cả các biện pháp bảo mật

Ngoài ra, tuỳ chọn allow_url_fopen = off có thể được bỏ qua bằng cách sử dụng các dòng “php://input” và “data://” Khi kẻ tấn công cố gắng lấy mật khẩu cơ sở dữ liệu, chúng có thể đọc các tập tin ngoài thư mục gốc open_basedir thông qua MySQL.

III Hệ quản trị cơ sở dữ liệu My SQL

Hiện nay có rất nhiều loại hệ quản trị cơ sở dữ liệu khác nhau: từ phần mềm nhỏ chạytrên máy tính cá nhân cho đến những hệ quản trị phức tạp chạy trên một hoặc nhiều siêumáy tính Các hệ quản trị CSDL phổ biến được nhiều người biết đến là MySQL, Oracle,PostgreSQL, SQL Server, DB2, Infomix,… Chúng ta cùng tìm hiểu hệ quản trị cơ sở dữliệu My SQL

III.1 Giới thiệu

a Khái niệm:

MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở phổ biến nhất hiện nay.

Nó được phát triển, hỗ trợ bởi MySQL AB, một công ty thương mại được thành lập bởinhóm phát triển MySQL

MySQL không chỉ là cơ sở dữ liệu mã nguồn mở phổ biến nhất trên thế giới, nó còn trởthành cơ sở dữ liệu được chọn cho thế hệ mới của các ứng dụng xây dựng trên nền Linux,Apache, MySQL, PHP/Perl/Python MySQL chạy trên hơn 20 flatform bao gồm: Linux,Windows, HP-UX, Netware, mang đến tính linh hoạt trong việc sử dụng

Máy chủ cơ sở dữ liệu MySQL cung cấp đặc tính linh hoạt, có sức chứa để xử lý cácứng dụng chạy các kho dữ liệu đồ sộ lên đến hàng terabytes thông tin Thêm một lý do để

Trang 23

người ta chọn MySQL là tốc độ, mặc dù MySQL xử lý giao tác không tốt như Oracle haySQL Server nhưng về tốc độ, nó chạy nhanh hơn rất nhiều Cộng thêm mã nguồn mở vàmiễn phí, nó là giải pháp cơ sở dữ liệu tốt nhất cho các website.

MySQL đưa ra tính năng bảo mật đặc biệt để chắc chắn dữ liệu sẽ được bảo mật tuyệtđối Trong việc xác nhận truy cập cơ sở dữ liệu, MySQL cung cấp các kỹ thuật mạnh màchắc chắn chỉ có người sử dụng đã được xác nhận mới có thể truy nhập được vào máy chủ

cơ sở dữ liệu

Tiện ích backup và recovery cung cấp bởi MySQL và các hãng phần mềm thứ ba chophép backup logic và vật lý hoàn thiện cũng như recovery toàn bộ Thêm vào đó, các tínhnăng mạnh của MySQL đang được bổ sung dần qua từng phiên bản Phiên bản hiện tạikhông ít tính năng mấy so với MS SQL Server

b Các kiểu dữ liệu và câu truy vấn

Các kiểu dữ liệu: MySQL hỗ trợ các kiểu dữ liệu thông dụng như Signed/UnSignedIntergers, Float, Double, Char, Varchar, Text, Blob, Date, Time, DateTime, TimeStamp,Year, Set, Enum,

Câu truy vấn và hàm: MySQL hỗ trợ toàn bộ các toán tử và chức năng trong câu lệnhtruy vấn Select và Where, các câu truy vấn SQL Group By và Order By, hỗ trợ Left OuterJoin và Right Outer Join theo cú pháp chuẩn của SQL, ODBC và việc ghi các alias chotable, column Bên cạnh đó, MySQL còn hỗ trợ các hàm gom nhóm Count(), Avg(), Std(),Sum(), Max(), Min(),

III.2 Cơ chế bảo mật trong My SQL

Bảo mật cơ sở dữ liệu là một yếu tố cần thiết trong bất kỳ hệ thống cơ sở dữ liệu nào.MySQL là một trong các hệ quản trị cơ sở dữ liệu an toàn nhất hiện nay vì cơ chế bảo mậtcủa MySQL rất tốt Hệ thống đặc quyền và mật khẩu của MySQL rất linh hoạt Mật khẩurất bảo mật vì tất cả các dòng di chuyển mật khẩu đều được mã hoá khi người dùng kếtnối vào server

Cơ chế bảo mật của hệ quản trị cơ sở dữ liệu MySQL gồm hai lĩnh vực chính là bảomật trong môi trường mạng và bảo mật cơ sở dữ liệu

a Bảo mật trong môi trường mạng:

 Kể từ phiên bản 4.0.0, MySQL hỗ trợ cho các kết nối an toàn giữa các MySQLclient và server dùng giao thức Secure Socket Layer (SSL)

 Cấu hình chuẩn của MySQL có khuynh hướng sao cho chạy nhanh nhất có thểnhưng việc mã hoá các kết nối không thể dùng mặc định vì như thế có thể làm choclient/server chậm hơn Mã hoá dữ liệu là thao tác cần CPU xử lý nhiều và đòi hỏimáy tính cần phải thực hiện thêm một số công việc nên có thể làm trì hoãn cácnhiệm vụ khác của MySQL

b Bảo mật cơ sở dữ liệu:

Trang 24

 MySQL thực hiện bảo mật cơ sở dữ liệu dựa vào hệ thống quyền truy cập Chứcnăng chính của hệ thống điều khiển truy cập gồm:

 + Chứng thực sự kết nối của user vào MySQL Server

 + Kết hợp user với các quyền riêng trên cơ sở dữ liệu chẳng hạn như Select,Update, Insert, Delete

 Để thực hiện điều khiển hệ thống cần phải truy cập một số thông tin đặc biệt Cácthông tin này được tổ chức thành một cơ sở dữ liệu chính là mysql Ngay sau khicài đặt hệ quản trị cơ sở dữ liệu MySQL thì sẽ có 2 cơ sở dữ liệu được tạo ra:

 + mysql: lưu trữ các thông tin phục vụ cho việc quản trị

 + test: cơ sở dữ liệu mà người dùng nào cũng có đầy đủ các quyền trên đó

 Ở đây, ta chỉ quan tâm đến cơ sở dữ liệu mysql Cơ sở dữ liệu mysql lưu trữ cácthông tin chung và các đặc quyền của user để kiểm tra kết nối và quyền thực hiệncác câu lệnh Do đó, chỉ nên cho phép các nhà quản trị cơ sở dữ liệu quyền truycập và thao tác trên cơ sở dữ liệu này Cơ sở dữ liệu mysql cũng giống như bất kỳmột cơ sở dữ liệu nào khác trong MySQL, tất cả các tập tin dữ liệu của nó lưu trữ

dữ liệu trong một thư mục gốc mysql

Các bảng trong cơ sở dữ liệu mysql sử dụng cho mục đích bảo mật là bảng user,

db, host, columns_priv, tables_priv, procs_priv, còn được gọi là các bảng phân

quyền (grant tables) Tuy nhiên, người dùng vẫn có thể thực thi các câu lệnh trêncác bảng này như bất kỳ bảng nào khác trong cơ sở dữ liệu bình thường khác

c Điều khiển truy cập đặc quyền khi người dùng kết nối với MySQL:

 MySQL yêu cầu username, password và hostname khi thực hiện kết nối:

+ Username: là tên tài khoản dùng để truy cập vào MySQL

+ Password: là mật khẩu để xác nhận người dùng

+ Hostname: là tên máy mà người dùng kết nối

 Khi người dùng kết nối với MySQL thì nó sẽ kiểm tra trong bảng user cóhostname, username và password đó không Việc kiểm tra được thực hiện bằngcách đối chiếu ba cột phạm vi của bảng user (host, user, password) với hostname,username và password do người dùng cung cấp Nếu có, người dùng được quyềntruy cập vào hệ thống Khi đó, nếu người đó thực thi một câu lệnh truy vấn thìtrước tiên MySQL xem trong bảng user xem người dùng có những quyền gì Nếungười dùng có đặc quyền trong bảng đó thì sẽ được phép làm bất cứ thao tác gìtrên cơ sở dữ liệu trong MySQL, ngược lại MySQL sẽ tìm tiếp trong bảng db Nếungười dùng vẫn không có quyền để thực thi câu truy vấn thì MySQL sẽ tìm tiếptrong bảng tables_priv và sau đó là bảng columns_priv để kiểm tra người đó cóquyền thực thi câu truy vấn hay không Nếu không tìm thấy thì hệ thống sẽ báo lỗi

IV Kết luận chương

Chương này đã giới thiệu một cách tổng quan về ứng dụng Web, ngôn ngữ lập trìnhPHP và hệ quản trị cơ sở dữ liệu MySQL Trong đó có đề cập đến các nguyên tắc bảo mậtcần áp dụng trong một ứng dụng Web cũng như các cơ chế bảo mật của ngôn ngữ PHP và

Trang 25

hệ quản trị cơ sở dữ liệu MySQL mà một nhà phát triển ứng dụng Web với ngôn ngữ PHP

sử dụng MySQL cần phải nắm vững để phòng tránh các lỗi bảo mật xảy ra khi xây dựng

Trang 26

KHẮC PHỤC LỖI BẢO MẬT TRÊN PHP

Chương này ta tìm hiểu về phương pháp khắc phục lỗi bảo mật của các ứng dụng trênPHP

I Một số khái niệm và thuật ngữ liên quan

a Hacker

Hacker là một thuật ngữ dùng để chỉ những kẻ phá hoại các hệ thống mạng, các ứngdụng,… Hacker thường là những chuyên gia về máy tính, không tạo ra các kẽ hở cho hệthống nhưng hacker lại là những người am hiểu về hệ điều hành, hệ quản trị cơ sở dữ liệu,các ngôn ngữ lập trình,… Họ sử dụng kiến thức của mình trong việc tìm tòi và khai tháccác lỗ hổng của hệ thống mạng, ứng dụng

WhiteHat (Hacker mũ trắng): hacker chỉ dừng lại việc phát hiện và thông báo lỗi tìmđược cho những nhà bảo mật hay người phát triển chương trình

BlackHat (Hacker mũ đen): hacker dựa vào những lỗ hổng thực hiện việc khai thác tráiphép nhằm mục đích phá hoại hay mưu lợi riêng

b HTTP Header

HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ gửi chonhau Những thông tin trình khách gửi cho trình chủ được gọi là HTTP requests (yêu cầu)còn trình chủ gửi cho trình khách là HTTP responses (trả lời) Thông thường, một HTTPheader gồm nhiều dòng, mỗi dòng chứa tên tham số và giá trị Một số tham số có thể đượcdùng trong cả header yêu cầu và header trả lời, còn số khác thì chỉ đuợc dùng riêng trongtừng loại

c Phiên ( Session )

HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là HTTP không lưutrữ trạng thái làm việc giữa trình duyệt với trình chủ Sự thiếu sót này gây khó khăn chomột số ứng dụng Web bởi vì trình chủ không biết được trước đó trình duyệt đã có nhữngtrạng thái nào Để giải quyết vấn đề này, ứng dụng Web đưa ra khái niệm phiên làm việc(Session)

SessionID là một chuỗi để chứng thực phiên làm việc Một số trình chủ sẽ cung cấpmột SessionID cho người dùng khi họ xem trang web trên trình chủ Để duy trì phiên làmviệc thì sessionID thường được lưu vào biến trên URL, biến ẩn form và Cookie Phiên làmviệc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này được cấu hình qui địnhtại trình chủ hoặc bởi ứng dụng thực thi Trình chủ sẽ tự động giải phóng phiên làm việc

để khôi phục lại tài nguyên của hệ thống

Trang 27

d Cookie

Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trìnhduyệt của người dùng

Các cookie được lưu trữ dưới những tập tin dữ liệu nhỏ dạng text, được ứng dụng tạo ra

để lưu trữ, nhận biết các thông tin về người dùng đã ghé thăm trang Web và những vùng

mà họ đi qua trong trang Những thông tin này có thể bao gồm tên/định danh người dùng,mật khẩu, sở thích, thói quen, Cookie được trình duyệt của người dùng chấp nhận lưutrên đĩa cứng của máy mình, tuy nhiên không phải lúc nào trình duyệt cũng hỗ trợ cookie,

mà còn tùy thuộc vào người dùng có chấp nhận việc lưu trữ đó hay không

Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại những thông tintrong cookie để người dùng không phải làm lại thao tác đăng nhập hay phải cung cấp lạicác thông tin khác

Các thành phần của một cookie gồm:

 Domain: Tên miền của trang web đã tạo cookie

 Flag: mang giá trị TRUE/FALSE: Xác định các máy khác với cùng tên miền cóđược truy xuất đến cookie hay không

 Path: Phạm vi các địa chỉ có thể truy xuất cookie

 Sercure: mang giá trị TRUE/FALSE: Xác định đây là một secure cookie haykhông nghĩa là kết nối có sử dụng SSL hay không

 Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ

 Name: Tên biến

 Value: Với cookie được tạo ở trên thì giá trị của biến có tên Name

Form dữ liệu được gửi bằng cách sử dụng phương thức GET hoặc POST Khi tạo một

form HTML, ta định nghĩa phương thức này trong thuộc tính method:

<form action="http://example.org/register.php" method="GET">

Phương thức GET: Khi sử dụng phương thức GET thì tất cả các tên biến và giá trị của

nó sẽ xuất hiện trong URL

Trang 28

Ví dụ, xét form sau đây:

<form action="http://example.org/login.php" method="GET">

<p>Username: <input type="text" name="username" /></p>

<p>Password: <input type="password" name="password" /></p>

<p><input type="submit" /></p>

</form>

Nếu chúng ta nhập username là tennguoidung và password là matkhau thì

http://example.org/login.php?username=tennguoidung&password=matkhau sẽ hiển thị

sau khi nhấn Submit

Phương thức POST: xét ví dụ như trên nhưng sửa đổi thuộc tính method của form thành

POST thay vì GET:

<form action="http://example.org/login.php" method="POST">

<p>Username: <input type="text" name="username" /></p>

<p>Password: <input type="password" name="password" /></p>

<p><input type="submit" /></p>

</form>

Form này dẫn đến liên kết http://example.org/login.php sau khi nhấn Submit Dữ liệu

của form nằm trong nội dung của truy vấn thay vì nằm trong chuỗi truy vấn của URL

f URL

URL (Uniform Resource Locator) dùng để chỉ tài nguyên trên Internet Sức mạnh củaweb là khả năng tạo ra những liên kết siêu văn bản đến các thông tin liên quan Nhữngthông tin này có thể là những trang web khác, những hình ảnh, âm thanh,… Những liênkết này thường được biểu diễn bằng những chữ màu xanh có gạch dưới được gọi làanchor Các URL có thể được truy xuất thông qua một trình duyệt như Internet Explorer,Firefox,

Ví dụ: Một URL có dạng http://www.user.vn/index.php

Trong đó:

http: là giao thức

http://www.user.vn/ là địa chỉ máy chứa tài nguyên.

index.php là tên đường dẫn trên máy chứa tài nguyên.

Nhờ địa chỉ URL mà ta có thể từ bất kỳ một máy nào trong mạng Internet truy cập tới

Trang 29

II Một số lỗi bảo mật trên Form và URL

II.1 Phương pháp tấn công thay đổi ngữ nghĩa URL

a Giới thiệu

Kỹ thuật tấn công thay đổi ngữ nghĩa URL (Semantic URL Attack) liên quan đến việc

người dùng thử sửa đổi các URL để khám phá kết quả gì sẽ xảy ra

Ví dụ, nếu người dùng chris nhấp vào một liên kết trong ứng dụng và dẫn đến liên kết

http://example.org/private.php?user=chris

Sau đó thì anh ta sẽ có thể thử xem chuyện gì xảy ra nếu giá trị của user thay đổi, anh ta

có thể thử http://example.org/private.php?user=rasmus để xem anh ta có thể truy cập

thông tin của một người khác có tên là rasmus hay không

b Ví dụ

Xét một ứng dụng email trên nền web mà người dùng đăng nhập và kiểm tra tài khoảnemail của họ Bất kỳ ứng dụng nào đòi hỏi người sử dụng đăng nhập thì cần phải cung cấpmột cơ chế đòi hỏi nhập mật khẩu Một kỹ thuật phổ biến là yêu cầu người dùng trả lời

một câu hỏi ngẫu nhiên mà một cuộc tấn công thường không trả lời được (ví dụ: tên thời

con gái của mẹ là gì?)

Trong trường hợp cần đặt lại mật khẩu mới thì ứng dụng gửi mật khẩu mới đến địa chỉemail đã được lưu trong tài khoản của người dùng Tuy nhiên, cũng có khi một địa chỉemail không được lưu trữ sẵn, do đó người trả lời câu hỏi xác minh được yêu cầu cung cấpmột địa chỉ email (mục đích không chỉ để gửi mật khẩu mới đến địa chỉ này, mà còn đểthu thập một địa chỉ thay thế để sử dụng trong tương lai) Form sau đây yêu cầu một người

sử dụng cung cấp một địa chỉ email thay thế và tên tài khoản được xác định trong một biếndạng ẩn:

<form action="reset.php" method="GET">

<input type="hidden" name="user" value="chris" />

<p>Please specify the email address where your new password sent:</p>

<input type="text" name="email" /><br />

<input type="submit" value="Send Password" />

</form>

Kịch bản tiếp nhận, reset.php có các thông tin cần thiết để thiết lập lại mật khẩu: tên tài

khoản cần thiết lập lại mật khẩu và địa chỉ email mà mật khẩu mới sẽ được gửi đến

Nếu người dùng sử dụng form này (sau khi trả lời đúng câu hỏi xác minh) thì có thểđảm bảo rằng họ là chủ sở hữu hợp pháp của tài khoản chris Sau đó nếu người dùng cung

cấp địa chỉ email chris@example.org và submit thì dẫn đến URL sau:

Trang 30

Nếu reset.php xác định các giá trị này được cung cấp bởi người dùng thì sẽ dễ bị tấn

công kiểu thay đổi URL Mật khẩu mới sẽ được tạo cho tài khoản email

php@example.org và được gửi đến địa chỉ email chris@example.org.Như vậy, chris đã

ăn cắp tài khoản php thành công

$clean['email'] = $_POST['email'];

$user = $_SESSION['user'];

$new_password = md5(uniqid(rand(), TRUE));

if ($_SESSION['verified']) {

/* Update Password */

mail($clean['email'], 'Your New Password', $new_password);

} }

?>

Điều này thể hiện sự thiếu bảo mật đối với địa chỉ email được cung cấp bởi người dùng,quan trọng hơn là các biến session phải nhận biết người dùng hiện tại có trả lời đúng câuhỏi xác minh hay không và có đúng tên tài khoản mà câu hỏi xác minh được trả lời không

Trang 31

Vậy, xem xét dữ liệu đầu vào là chìa khóa để ngăn ngừa các lỗ hổng như thế trong cácứng dụng.

II.2 Phương pháp tấn công file upload

a Giới thiệu

Một số ứng dụng cho phép người dùng tải tập tin (upload file) ở form dữ liệu Bởi vìcác tập tin không được gửi như các form dữ liệu khác nên phải chỉ định kiểu mã hóa

multipart/form-data cụ thể:

<form action="upload.php" method="POST" enctype="multipart/form-data">

Một yêu cầu HTTP bao gồm cả form dữ liệu thông thường và các tập tin có định dạng

đặc biệt thì thuộc tính enctype này là cần thiết để trình duyệt chấp nhận.

Thành phần form được sử dụng để cho phép người sử dụng chọn tập tin để tải lên nhưsau:

<input type="file" name="attachment" />

Giao diện của nó bao gồm một trường văn bản chuẩn và một nút để người dùng có thểtùy chọn nhập đường dẫn tập tin bằng tay hoặc chỉ đến nó

Form sau cho phép người dùng tải một tập tin đính kèm:

<form action="upload.php" method="POST" enctype="multipart/form-data">

<p>Please choose a file to upload:

<input type="hidden" name="MAX_FILE_SIZE" value="1024" />

<input type="file" name="attachment" /><br />

<input type="submit" value="Upload Attachment" /></p>

</form>

Biến ẩn MAX_FILE_SIZE cho biết kích thước tập tin tối đa (bytes) mà trình duyệt cho

phép Với giới hạn từ phía máy khách thì biến này dễ bị tấn công nhưng được sử dụng đểhướng dẫn cho người sử dụng Giới hạn này cần phải được thiết lập trên máy chủ để bảomật hơn

Hàm upload_max_filesize trong PHP có thể được sử dụng để kiểm tra kích thước tập tin tối đa cho phép Ngoài ra có thể sử dụng hàm post_max_size vì các tập tin tải lên nằm

trong phương thức POST

Kịch bản nhận, upload.php thể hiện nội dung của mảng toàn cục $_FILES:

<?php

Trang 32

[name] => author.txt [type] => text/plain [tmp_name] => /tmp/phpShfltt [error] => 0

[size] => 36 )

)

Điều này minh họa chính xác những gì PHP cung cấp trong mảng $_FILES nhưng

không giúp xác định nguồn gốc của thông tin này Người phát triển cần có khả năng xácđịnh đầu vào, kiểm tra các yêu cầu HTTP để biết chính xác những gì trình duyệt sẽ gửi:

Trang 33

Content-Disposition: form-data; name="attachment"; filename="author.txt"

Vì PHP lưu trữ tập tin được tải lên tạm thời trên hệ thống tập tin (ở ví dụ là

/tmp/phpShfltt) nên sau đó phải di chuyển tập tin đến một nơi nào đó và đọc nó vào bộ

nhớ Nếu mã của bạn sử dụng tmp_name mà không cần xác minh nó có phải là tập tin

được tải lên hay không (không phải như /etc/passwd) thì tiềm ẩn nguy cơ trên lý thuyết (vì thực tế không có kẻ tấn công sửa đổi tmp_name).

Trang 34

/* $old_filename is an uploaded file, and the move was successful */ }

Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên máycủa người sử dụng Hacker lợi dụng sự kiểm tra lỏng lẻo của ứng dụng, hiểu biết hạn chếcủa người dùng cũng như biết đánh vào sự tò mò của họ để đánh cắp thông tin một cách

dễ dàng

Những ứng dụng email, các diễn đàn, guestbooks và cả blog là các ứng dụng dễ bị tấncông Trong thực tế, nếu các ứng dụng web có dữ liệu đầu vào không được lọc thì sẽ cókhả năng tồn tại lỗ hổng loại này

Trang 35

<p>Name: <input type="text" name="name" /><br />Comment: <textarea name="comment" rows="10" cols="60"> </textarea><br />

<input type="submit" value="Add Comment" /></p>

phép thêm đoạn javascript vào mã nguồn Người sử dụng sẽ vô tình gửi các cookies (những cookies liên quan đến ứng dụng) đến evil.example.org và kịch bản nhận steal.php

có thể truy cập tất cả các cookie trong $_GET['cookies'].

Lọc ra bất kì một đoạn mã JavaScript, VBScript nào.

 Lọc dấu nháy đơn hay kép

Lọc kí tự Null (khả năng thêm một đoạn mã bất kì sau kí tự Null khiến cho ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do ứng dụng nghĩ rằng chuỗi đã kết thúc từ kí tự Null này).

Xóa những kí tự “>”, “<”.

 Mã hóa các kí tự đặc biệt theo chuẩn riêng

Ta có thể sử dụng hàm htmlentities() để lọc dữ liệu gửi đến client Hàm này chuyển đổi

tất cả các ký tự đặc biệt thành ký hiệu HTML tương đương với giá trị ban đầu của nó đượcbảo tồn

Thay đổi sau làm cho đoạn mã hiển thị một ý kiến comment an toàn:

<?php

Ngày đăng: 24/03/2020, 01:37

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w