1. Trang chủ
  2. » Luận Văn - Báo Cáo

ứng dụng biểu thức chính quy trong bảo mật web

95 209 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 95
Dung lượng 5,82 MB

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

Nội dung

Các hình thức tấn công vào các máy chủ chạy ứng dụng web rất đa dạng, gây mất các thông tin quan trọng của các tổ chức, cá nhân, doanh nghiệp.. Đề tài “Ứng dụng biểu thức chính quy trong

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

Trang 3

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN

TP HCM, 11/2011

Trang 4

MỤC LỤC

PHẦN MỞ ĐẦU 10

1 Tính cấp thiết của đề tài 1

2 Đặt vấn đề 2

3 Giải quyết vấn đề 2

4 Mục Tiêu đề tài 2

PHẦN THỨ 1: TÌM HIỂU VỀ CƠ SỞ LÝ THUYẾT BẢO MẬT 3

CHƯƠNG 1: TỔNG QUAN VỀ TÌNH HÌNH AN NINH MẠNG 3

1.1 NHỮNG ĐẶC ĐIỂM VÀ XU HƯỚNG AN NINH MẠNG 3

1.1.1 Đặc điểm tình hình an ninh mạng trong những năm gần đây 3

1.1.2 Những xu hướng và thách thức an toàn mạng 4

1.1.3 Những vấn đề về các lỗ hổng của Website 6

1.2 VẤN ĐỀ BẢO MẬT WEBSITE 8

CHƯƠNG 2: LÝ THUYẾT VỀ WEBSITE VÀ BẢO MẬT WEBSITE 10

2.1 WEB SERVER 10

2.1.1 Webserver là gì? 10

2.1.2 Cơ chế hoạt động của Webserver 11

2.2 WEB APPLICATION 17

2.2.1 Web application là gì? 17

2.2.2 Cấu trúc Web Application? 17

2.2.3 Các ứng dụng Web và lợi ích? 18

2.3 CÁC LỖ HỔNG WEB 21

Trang 5

2.3.1.1 Cross-Site Scripting là gì ? 21

2.3.1.3 Khai thác lỗi XSS 24

2.3.1.4 Cách phát hiện XSS: 2Error! Bookmark not defined 2.3.1.5 Các biện pháp ngăn ngừa XSS 27

2.3.2 Session hijacking (Bắt cóc phiên nối): 28

2.3.2.1 Session hijacking tại lớp mạng (TCP Session hijacking): 28

2.3.2.2 Session hijacking: 29

2.3.2.3 Session ID 29

2.3.2.4 Cookie? 29

2.3.3 SQL Injection : 30

2.3.3.1 SQL Injection là gì? 30

2.3.3.2 Hoạt động của SQL Injection 31

2.3.3.3 Dò tìm lỗ hổng SQL injection trên Web 32

2.3.3.4 Tại sao „or 1=1 có thể by pass 32

2.3.3.5 Nhận data qua „database using ODBC error message‟ 33

2.3.3.6 Thu thập các dữ liệu quan trọng 34

2.3.3.7 Ngăn chặn lỗi SQL Injection 35

2.3.4 Web Shell 35

2.3.4.1 Giới thiệu về Shell 35

2.3.4.2 Cách hoạt động của Shell 36

2.3.4.3 Chức năng của Shell 36

2.3.4.4 Dùng shell để tấn công (Local Attack) 36

2.3.5 Path Traversal 40

2.3.5.1 Path Traversal là gì? 40

2.3.5.2 Khai thác Path Traversal 40

2.3.5.3 Phòng chống Path Traversal 42

2.3.6 Tấn công từ chối dịch vụ (Dos &DDoS) 43

CHƯƠNG 3: TỔNG QUAN VỀ MODSECURITY 45

Trang 6

3.1 TỔNG QUAN TƯỜNG LỬA ỨNG DỤNG 45

3.1.1 Tổng quan về tường lửa và ứng dụng của tường lửa 45

3.1.2.1 Công nghệ Proxy services 46

3.1.2.2 Công nghệ máy chủ ủy quyền chuyên biệt 47

3.1.2.3 Công nghệ hỗn hợp 47

3.2 MODSECURITY 48

3.2.1 Giới thiệu chung về Modsecurity 48

3.2.2.Các tính năng và vai trò của Modsecurity 49

3.2.2.1 Lọc (Filter), phân tích và ghi nhật ký (log) luồng dữ liệu HTTP 49

3.2.2.2.Giám sát theo thời gian thực và phát hiện tấn công 51

3.2.2.3.Phòng chống tấn công và vá lỗi 51

3.2.2.4 Tính linh hoạt của Ruler engine (lọc) 52

3.2.2.5 Phát triển các mẫu nhúng 52

3.2.2.6.Triển khai mạng cơ bản 52

3.2.3.Cách thức hoạt động của Modsecurity 53

3.2.4.Kiến trúc thành phần của modsecurity 53

3.2.4.1 Modsecurity core rule 53

3.2.4.1.1 Tổng quan về Core rule 53

1.2.4.1.2 Nội dung Core rule 53

1.2.4.1.3 Cấu trúc của Core rule 53

3.2.4.2.1 Secrule Engine 54

3.2.4.2.2 SecAction 55

3.2.4.2.3 SecRule 55

3.2.4.2.4 Các biến trong Rules 56

3.2.4.2.5 SecArgumentSeparator 57

3.2.4.2.6 SecAuditEngine 58

3.2.4.2.7 SecAuditLog 58

3.2.4.2.8 SecAuditLogParts 58

Trang 7

3.2.4.2.10 SecAuditLogStorageDir 59

3.2.4.2.11 SecAuditLogType 60

3.2.4.3 Các pha xử lý 60

3.2.4.3.1 Phase Request Headers 60

3.2.4.3.2 Phase Request body 61

3.2.4.3.3 Phase Response headers 61

3.2.4.3.4 Phase Response body 61

3.2.4.3.5 Phase Logging 61

3.2.4.4 Các biến (Variables) 62

3.2.4.5 Các hàm chuyển đổi 65

3.2.4.6 Hành động (Action) 66

3.2.4.6.1 Primary Actions 66

3.2.4.6.2 Secondary Actions 67

3.2.4.6.3 Flow Action 68

3.2.4.6.4 Default Action 69

3.2.4.7 Logging 69

3.2.5 Xây dựng một số Rules phát hiện và phòng chống tấn công nguy hiểm 72

3.2.5.1 HTML Tags 72

3.2.5.2 SQL Injection 72

3.2.5.3 XSS Attack 73

3.2.5.4 Command Excution and file disclosure 73

3.2.5.5 Bad User-Agent 73

PHẦN THỨ 2: CƠ SỞ THỰC HÀNH XÂY DỰNG MODSECURITY TRÊN WEB SERVER APACHE 75

CHƯƠNG 4: CÀI ĐẶT VÀ SỬ DỤNG MODSECURITY TRÊN WEBSERVER APACHE 75

4.1 CÁC MÔ HÌNH BẢO MẬT 75

Trang 8

4.1.1 NON – DMZ 75

4.1.2 DMZ 78

4.1.3 Mô hình triển khai thực tế 80

4.2 CÀI ĐẶT 81

4.2.1 Cài đặt Apache2 81

4.2.2 Cài đặt PHP5 83

4.2.3 Cài đặt MySQL 86

4.2.4 Cài đặt Modsecurity 88

4.2.5 Cấu hình cho Modsecurity 95

TỔNG KẾT VÀ ĐÁNH GIÁ 98

TÀI LIỆU THAM KHẢO 99

Trang 9

MỤC LỤC BẢNG

Bảng 1- Cấu hình các thành phần trong triển khai 80

Trang 10

MỤC LỤC HÌNH

Hình 1- Thống kê các cuộc tấn công Website từ nước ngoài vào ViệtNam từ 2002 đến 2007 (trích

dẫn nguồn VNCERT, trang 11) 7

Hình 2- Web Server 10

Hình 3- Công nghệ Webserver và Database 13

Hình 4- Công nghệ Webserver tách Database 14

Hình 5- Công nghệ giải pháp hệ thống lâu dài bền vững 15

Hình 6- Đồng bộ dữ liệu 16

Hình 7- Cấu trúc Web Application 18

Hình 8- Cách thức hoạt động của XSS 23

Hình 9- Mô hình tấn công DDoS 44

Hình 10- Tường lửa 45

Hình 11- Mô hình tổng quan Modsecurity 48

Hinh 12- Kiểm soát HTTP Traffic 49

Hình 13- Hoạt động của Modsecurity 53

Hình 14- Các pha xử lý 60

Hình 15- Mô hình NON – DMZ 75

Hình 16- Mô hình DMZ 78

Hình 17- Mô hình Modsecurity trên local server 80

Hình 18- Lệnh cài đặt Apache2 81

Hình 19- Chỉnh sửa file httpd.conf 82

Hình 20- Cài đặt Apache2 thành công 83

Hình 21- Cài đặt PHP5 83

Hình 22- Khởi động lại Apache 84

Hình 23- Kiểm tra hoạt động PHP 85

Hình 24- PHP đã hoạt động 86

Hình 25- Cài đặt MySQL 68

Hình 26- Cài đặt phpmyadmin 87

Trang 11

Hình 28- Cài đặt Modsecurity 89 Hình 29- Tiến hành cài đặt 90 Hình 30- Cài đặt Modsecurity thành công 94

Trang 12

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH

KHOA CÔNG NGHỆ THÔNG TIN

CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do - Hạnh phúc

Tp HCM, ngày 18 tháng 11 năm 2011

THÔNG TIN KẾT QUẢ NGHIÊN CỨU

1 Thông tin chung:

- Tên đề tài: ỨNG DỤNG BIỂU THỨC CHÍNH QUY TRONG BẢO MẬT WEB

- Mã số:

- Chủ nhiệm: NGUYỄN MINH ĐẠO

- Cơ quan chủ trì: Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh

- Thời gian thực hiện: 12/2010-11/2011

2 Mục tiêu:

Các ứng dụng web hiện nay ngày một phát triển mạnh mẽ dẫn đến nguy cơ bị hacker tấn công rất cao Các hình thức tấn công vào các máy chủ chạy ứng dụng web rất đa dạng, gây mất các thông tin quan trọng của các tổ chức, cá nhân, doanh nghiệp Một số kiểu tấn công phổ biến được hacker khai thác rất nhiều như: XSS, SQL injection, Directory Traversal, Webshell, DDOS, …

Để giải quyết vấn đề nêu trên, một trong những phương pháp khá mới mẻ là tìm hiểu và áp dụng

sử dụng phần mềm ModSecurity ModSecurity được xem là một phần mềm phát hiện và phòng chống xâm nhập trái phép vào các ứng dụng web, dựa vào các so mẫu biểu thức chính quy (Regular Expression) Hiện nay nó được áp dụng rất phổ biến trong lĩnh vực bảo mật Web Server,

nó có khả năng kiểm soát chặt chẽ lưu lượng HTTP, HTTPS Các cuộc tấn công nhằm vào ứng dụng web hầu như đều bị chặn, kể cả các loại tấn công đã biết và chưa biết

Đề tài “Ứng dụng biểu thức chính quy trong bảo mật Web” sẽ đề cập đến một số vấn đề về biểu thức chính quy, lỗ hổng bảo mật Website, cũng như các hình thức an toàn cho Website Trong đề tài này sẽ mô tả các nghiên cứu về những lỗ hổng bảo mật phổ biến và các giải pháp đảm bảo an toàn cho hoạt động của Website

3 Tính mới và sáng tạo:

- Không có

4 Kết quả nghiên cứu:

Đề tài này chỉ giới hạn trong các giải pháp mềm Trong đó nghiên cứu, khảo sát về các lỗ hổng Website là phổ biến nhất, giải pháp bảo mật và mô hình bảo mật, giao thức bảo mật và các cơ chế trên phương diện phần mềm Vì không có điều kiện thử nghiệm trên mô hình bảo mật thực tế như trong doanh nghiệp hay các tổ chức, cho nên trong đề tài này chỉ đặt mục tiêu thử nghiệm giả lập

mô hình Website trên máy ảo, máy ảo dự kiến thử nghiệm là Linux, Webserver là Apache và hệ

quản trị cơ sở dữ liệu là MySQL và các cơ chế bảo mật bằng ModSecurity của Apache

5 Sản phẩm:

- Báo cáo đề tài (2 bản in bìa mềm + 2 bản in bìa cứng mạ vàng)

- Đĩa chứa bản báo cáo, tài liệu tham khảo, các phần mềm cài đặt

Trang 13

6 Hiệu quả, phương thức chuyển giao kết quả nghiên cứu và khả năng áp dụng:

Có thể áp dụng thực tế trên các website hiện tại , và đưa vào giảng dạy trong môn học Bảo mật Web

Trang 14

PHẦN MỞ ĐẦU

1 Tính cấp thiết của đề tài

Ngày nay công nghệ thông tin đã phát triển rất nhanh chóng với nhiều ứng dụng vào các lĩnh vực khoa học, kinh tế, văn hóa và nghệ thuật… Từ các phần mềm ứng dụng cho đến các phần cứng, đáp ứng nhu cầu từ người dùng cho đến doanh nghiệp, tổ chức, chính phủ… công nghệ thông tin đã làm thay đổi bộ mặt của xã hội, khoa học kỹ thuật, kinh tế làm cho các quốc gia và các cá nhân xích lại gần hơn

Hiện nay nền kinh tế Việt Nam đang phát triển một cách mạnh mẽ, các hình thức kinh doanh, quảng cáo và các giao dịch trực tuyến đã và đang thay thế các hình thức kinh

tế cũ trước kia Các doanh nghiệp, tổ chức hay cá nhân có thể giới thiệu sản phẩm của mình, mua bán sản phẩm hay trao đổi thông tin với nhau t h ô n g q u a Internet như Website, Email… các hình thức này đã giúp họ đẩy mạnh hoạt động kinh doanh và tiết kiệm được chi phí rất nhiều

Website giúp ích rất nhiều cho việc xây dựng và quảng bá hình ảnh công ty, giới thiệu sản phẩm, sự kiện, học hành và các hoạt động khác Mọi người có thể tìm kiếm nhưng thông tin cần thiết thông qua các Website để phục vụ cho nhu cầu của mình

Từ những lợi ích thiết thực mà Website mang lại cho người dùng, bên cạnh đó nó cũng mang lại nhiều nguy hại rất nghiêm trọng Từ các lỗ hổng của hệ thống mạng máy tính và Website đã tạo điều kiện cho hacker khai thác các điểm yếu đó với mục đích trục lợi, phá hoại,… và tổn thất từ những lỗ hổng bảo mật của Website là rất lớn

Việc bảo mật Website hiện nay được các doanh nghiệp, tổ chức và cá nhân rất quan tâm Vì nó đảm bảo cho các hoạt động trong các lĩnh vực được an toàn và hoạt động hiệu quả Do đó đã có nhiều công trình nghiên cứu về bảo mật Website nói riêng

Trang 15

và bảo mật mạng nói chung đã được thực hiện và đưa vào ứng dụng hiệu quả

2 Đặt vấn đề

Các ứng dụng web hiện nay ngày một phát triển mạnh mẽ dẫn đến nguy cơ bị hacker tấn công rất cao Các hình thức tấn công vào các máy chủ chạy ứng dụng web rất đa dạng, gây mất các thông tin quan trọng của các tổ chức, cá nhân, doanh nghiệp Một số kiểu tấn công phổ biến được hacker khai thác rất nhiều như: XSS, SQL injection, Directory Traversal, Webshell, DDOS, …

3 Giải quyết vấn đề

Để giải quyết vấn đề nêu trên, một trong những phương pháp khá mới mẻ là sử dụng

phần mềm Modsecurity Modsecurity được xem là một phần mềm phát hiện và phòng

chống xâm nhập trái phép vào các ứng dụng web, dựa vào các mẫu biểu thức chính quy (Regular Expression) Hiện nay nó được áp dụng rất phổ biến trong lĩnh vực bảo mật Web Server, nó có khả năng kiểm soát chặt chẽ lưu lượng HTTP, HTTPS Các cuộc tấn công nhằm vào ứng dụng web hầu như đều bị chặn, kể cả các loại tấn công đã biết và chưa biết

Trong báo cáo này sẽ mô tả các nghiên cứu về những lỗ hổng bảo mật phổ biến

và các giải pháp đảm bảo an toàn cho hoạt động của Website

4 Mục Tiêu báo cáo

Mục tiêu của báo cáo là nghiên cứu các phương pháp tấn công, các lỗ hổng và ứng dụng của biểu thức chính quy trong bảo mật Website từ đó xây dựng thử nghiệm một

số các phương pháp phổ biến nhất hiện nay

Nghiên cứu, khảo sát về các lỗ hổng Website l à phổ biến nhất, giải pháp bảo mật

và mô hình bảo mật, giao thức bảo mật và các cơ chế trên phương diện phần mềm Vì không có điều kiện thử nghiệm trên mô hình bảo mật thực tế như trong doanh nghiệp hay các tổ chức, cho nên trong báo cáo này chỉ đặt mục tiêu thử nghiệm giả lập mô hình Website trên máy ảo, máy ảo dự kiến thử nghiệm là Ubuntu, Webserver là Apache và hệ quản trị cơ sở dữ liệu là MySQL và các cơ chế bảo mật bằng Modsecurity của Apache

Trang 16

1.1.1 Đặc điểm tình hình an ninh mạng trong những năm gần đây

Các hành vi xâm phạm an ninh thông tin ngày càng đa dạng và phức tạp, mục tiêu phổ biến là trục lợi về tài chính hoặc phá hoại các đối thủ cạnh tranh và đôi khi cũng chỉ là sự thỏa mãn vui đùa của các Hacker Các hành vi vi phạm phát triển với tốc độ nhanh và qui mô rộng từ cá nhân đến các tổ chức hoặc chính phủ Các cuộc tấn công sử dụng công nghệ, kỹ thuật ngày càng tinh vi Các cuộc tấn công, xâm nhập phục vụ cho mục đích chính trị ngày càng tăng Nhiều nước đã và đang xây dựng và triển khai chiến lược đảm bảo an toàn cho không gian mạng quốc gia và thành lập các tổ chức đảm bảo an toàn mạng

 Sự cố tấn công trên mạng như: Virus, Web hacking, DoS & DdoS, Spam, XSS, Directory Traversal, SQL injection…

 Tội phạm máy tính: đánh cấp thẻ tín dụng, ATM, trộm cắp tài khoản điện thoại di động, tấn công các công ty cạnh tranh, bôi xấu, xúc phạm nhân phẩm người khác, lừa đảo(phishing)…

Tại Việt Nam xu hướng về số lượng và hình thức sự cố an ninh mạng đều phù hợp với các qui luật chung tại các nước phát triển về CNTT

1.1.2 Những xu hướng và thách thức an toàn mạng

Trang 17

hướng và thách thức sau:

10 xu hướng nổi bật tại Việt Nam

 Triển khai mạnh các giải pháp quản lý và chống thư rác

 Hình thành kiến trúc an toàn thông tin cho các hoạt động ứng dụng CNTT trong các

cơ quan nhà nước

 Hiệp hội an toàn thông tin Việt Nam (VNISA) đi vào hoạt động nhằm phát huy vai trò cầu nối giữa cá nhân và các doanh nghiệp

 Phát triển mạng lưới phối hợp xử lý sự cố an toàn mạng

 Các hình thức tấn công truyền thống được phát triển tinh vi và có kỹ thuật cao hơn Tội phạm lợi dụng môi trường Internet và mạng điện thoại di động tiếp tục phát triển

 Gia tăng sự tấn công vào các hệ thống thông tin thương mại điện tử, tài chính, chứng khoán…

 Nhu cầu đánh giá và kiểm soát an toàn, an ninh các hệ thống thông tin tăng vọt

 Chữ ký điện tử vào cuộc sống CNTT ở Việt Nam được sử dụng rộng rãi và phát triển mạnh

 Các dịch vụ theo dõi cảnh báo sự cố an toàn thông tin phát triển

 Công tác áp dụng chuẩn hóa từng bước đi vào các lĩnh vực xây dựng hệ thống, quản lý vận hành, đào tạo cán bộ về an toàn và an ninh thông tin

Những thách thức chính trong an toàn mạng

 Thách thức 1: Môi trường pháp lý chưa hoàn thiện, chưa đồng bộ và thiếu tính hệ thống: bao gồm luật pháp, chính sách, chiến lược, tiêu chuẩn, qui chuẩn, các văn bản hướng dẫn… về an toàn an ninh thông tin Việc cập nhật, thay đổi, bổ sung đã được chú ý nhưng tiến độ lại chậm và thiếu cơ quan chuyên trách

Trang 18

 Thách thức 2: Khả năng công nghệ: CNTT phát triển rất nhanh nên phần mềm độc hại và các kẽ hở hệ thống ngày càng nhiều Các cuộc tấn công mạng ngày càng đa dạng, tinh vi và chuyên nghiệp hơn Trong khi đó cơ sở vật chất phục vụ cho hoạt động đảm bảo an toàn thông tin còn thiếu và yếu Cơ sở hạ tầng an toàn, an ninh thông tin mạng quốc gia (các hệ thống PKI, theo dõi và cảnh báo sự cố, trung tâm kỹ thuật an toàn mạng, trung tâm dữ liệu…) vẫn đang còn nằm trên

dự án Đặc biệt sản phẩm đặc thù của Việt Nam còn rất ít

Thách thức 3: Nguồn nhân lực chưa đáp ứng yêu cầu về chất lượng, thiếu

về số lượng, chương trình đào tạo bất cập, chuyên môn cao mâu thuẫn với thu nhập thấp

Thách thức 4: Mức độ đầu tư tài chính cho an toàn an ninh thông tin còn thấp

vì nhận thức về mức độ nguy hiểm của các chủ doanh nghiệp còn yếu Mức đầu tư cho an toàn an ninh thông tin tại các quốc gia khác thường chiếm từ 8% - 10% tổng đầu tư cho công nghệ thông tin của doanh nghiệp

Thách thức 5: Tổ chức, chỉ đạo và điều hành cơ cấu tổ chức chưa đầy đủ,

đặc biết thiếu ở cấp chỉ đạo quốc gia và quản lý nhà nước

Trong đó thách thức đầu tiên là rất quan trọng vì nó tạo tiền đề cho việc ngăn chặn các cuộc tấn công có chủ ý Tuy nhiên hệ thống pháp luật của Việt Nam còn nhiều hạn chế, nhưng gần đây cũng đã có nhiều thay đổi và bổ sung đáng kể như:

 Luật giao dịch điện tử được thông qua bởi Quốc Hội 29/11/2005 Luật điều chỉnh các giao dịch điện tử của các cơ quan chính phủ, dân sự và các hoạt động thương mại

 Luật công nghệ thông tin được thông qua trong phiên họp lần thứ 9 của Quốc Hội khóa 11, ngày 29/06/2006 Luật có hiệu lực từ 01/01/2007

 Nghị định 64/2007/ND-CP về ứng dụng CNTT trong các cơ quan nhà nước

Trang 19

 Nghị định 65/2007/ND-CP về xử phạt hành chính trong lĩnh vực CNTT

 Nhiều văn bản mới liên quan đến an toàn thông tin đang được xây dựng, thay đổi bổ xung, xem xét ban hành như các văn bản pháp quy, tiêu chuẩn, quy chuẩn kỹ thuật, hướng dẫn… Bên cạnh sự ban hành luật là các hoạt động

tư vấn, đào tạo… với mục đích giúp cho các cá nhân và tổ chức hiểu rõ thêm

về luật trong các hoạt động liên quan đến CNTT

1.1.3 Những vấn đề về các lỗ hổng của Website

Những năm gần đây là những năm báo động đỏ của an ninh ngân hàng Nhận định trên được Thiếu tướng Nguyễn Viết Thế, Cục trưởng Công nghệ tin học nghiệp vụ, Bộ Công an, đưa ra trong khuôn khổ sự kiện Banking và Security 2008 tại TP HCM Để

có được khẳng định này, ông Thế đã đưa ra khá nhiều bản báo cáo lẫn thông số cụ thể cho bức tranh tổng thể của an ninh mạng nói chung và tài chính ngân hàng nói riêng Trong 72 Website về chứng khoán đang hoạt động trong cả nước thì có đến 40% vẫn tồn tại những lỗi nguy hiểm trong hệ thống và có nguy cơ bị tấn công bất cứ lúc nào Trong khi đó hiện tượng bắt tay giữa hacker và các ngườichơi chứng khoán đang ngấm ngầm xuất hiện tại VN Theo Bộ Công an, năm 2008 cũng là điểm mốc khi hầu hết các hình thức lừa đảo trực tuyến phổ biến trên thế giới đều đã có mặt tại VN: lừa đảo qua diễn đàn trên mạng, qua e-mail mà điển hình là dạng thức xổ số hoặc qua tin nhắn từ các tổng đài tự động và nạn ăn cắp, làm giả thẻ tín dụng Trong đó, những tiêu cực về đánh cắp thẻ tín dụng đã biến đổi với nhiều mánh khóe công nghệ cao: thiết bị quay lén, ghi hình bàn phím Tài khoản thẻ ATM cũng dễ dàng bị mất nếu thiếu cảnh giác trước những kẻ lừa đảo theo dạng tổ chức, doanh nghiệp nước ngoài chào mời mua bán, vay tiền, trúng thưởng (nguồn www.vnexpress.net ) Dưới đây là hình ảnh thống kê

về số lần tấn công vào Website ở Việt Nam, trong đó có thống kê riêng vào các Website chính phủ từ các hacker nước ngoài (hình 1.1)

Trang 20

Hình 1- Thống kê các cuộc tấn công Website từ nước ngoài vào ViệtNam từ 2002 đến 2007 (trích dẫn nguồn VNCERT, trang 11) Năm 2007 các cuộc tấn công từ nước ngoài vào Việt Nam được gia tăng gấp đôi so với năm 2006 Và năm 2008 số lượt tấn công này là lớn hơn 500 lần, cho thấy Việt Nam là một trong những đích nhắm của các hacker quốc tế Nguyên nhân của vấn đề này là do nước ta đã hội nhập vào nền kinh tế thế giới và bắt đầu ứng dụng thương mại điện tử rộng rãi

Với việc nhắm vào những Website phát triển những hoạt động phi pháp như những Website người lớn hoặc Website phần mềm vi phạm bản quyền và các trang Web có các trò đánh bạc trực tuyến… Khi người dùng chưa ý thức được các đặc điểm nguy hại từ các trang này thì họ sẽ dễ dàng bị các hacker tấn công và khai thác những thông tin nhạy cảm và quan trọng…

Những Website chính thống có một lượng cộng đồng người dùng lớn mà những

kẻ phát triển mã độc muốn nhắm tới, họ hoàn toàn không hoài nghi về việc có thể trở thành nạn nhân của một cuộc tấn công bằng mã độc bởi vì họ tin tưởng rằng nếu họ chỉ truy nhập vào những Website lớn, chính thống thì họ sẽ được an toàn

Có nhiều loại hình tấn công mạng khác nhau lợi dụng một số Website có lỗ hổng bảo mật Tấn công Web có các kiểu điển hình sau:

Trang 21

 Chạy lệnh hệ thống tùy chọn

 Lỗi tràn bộ đệm

 Tấn công kiểu SQL Injection

 Từ chối dịch vụ (Dos & DDos)

 Lỗi Cross Site Scripting (XSS)

 Tấn công Format string

 Cookie poisoning

 Sửa đổi field ẩn

 Lỗi liên quan đến quá trình quản lý xác thực và phiên truy cập

 Lỗi kiểm soát truy cập nguồn tài nguyên (authorization)

 Những quảng cáo dẫn tới các đường liên kết hoặc cài đặt mã độc

 Tấn công vào những công ty hosting ảo nằm đằng sau

 Những lỗ hổng bảo mật trên máy chủ Web

 ……

1.2 VẤN ĐỀ BẢO MẬT WEBSITE

Từ những cái nhìn tổng quan trên cho thấy mức độ tấn công và sự nguy hiểm thế nào cho những nhà quản trị và người dùng khi những Website mắc những lỗi bảo mật nghiêm trọng Những người làm công việc bảo mật Website cần phải trang bị các mô hình, các giải pháp phù hợp, kiến thức và kinh nghiệm để xác định các lỗ hổng, các hình thức tấn công vào các lỗ hổng Cần phải nghiên cứu kỹ các lỗi bảo mật, có thể tấn công

1 lỗ hổng bằng những hình thức nào, đặc điểm của lỗ hổng này như thế nào, nó xuất phát từ đâu (có thể từ lỗi lập trình, phần mềm, phần cứng, các cơ chế hay các lỗi của các

mô hình bảo mật…), mức độ nguy hiểm, chi phí và thời gian đầu tư để khắc phục lỗ

Trang 22

hổng này nhƣ thế nào Từ đó nghiên cứu các giải pháp khắc phục lỗ hổng, khi đã xác định đƣợc những đặc điểm của lỗ hổng cần phải có cách giải quyết nhanh chóng, kịp thời, chính xác và triệt để

Tùy theo mức độ, quy mô và tầm quan trọng của tổ chức, doanh nghiệp hay cá nhân Để xác định mức độ đầu tƣ cho mô hình, giải pháp bảo mật, và nhân lực phù hợp Hiện nay có rất nhiều các mô hình, giải pháp phần mềm, phần cứng phù hợp cho từng nhu cầu của tổ chức, doanh nghiệp và cá nhân… trong phần trọng tâm của báo cáo sẽ

đề cập đến các vấn đề này

Trang 23

Biểu thức chính quy là dạng kĩ thuật nhỏ mà hữu ích trong 1 vùng rộng lớn của

chương trình, nó có thể hiểu như là một ngôn ngữ nhỏ dùng cho mục đích : tìm chuỗi con trong biểu thức chuỗi lớn Xuất phát từ môi trường UNIX, đuợc dùng với PERL Microsoft cho nó vào Windows, và cho đến giờ thì nó hầu như được sử dụng với những ngôn ngữ kịch bản

Bây giờ muốn liệt kê các file có tên khởi đầu là „a‟:

Ở DOS, ta dùng lệnh: dir a*.*

Trang 24

Còn ở Unix: ls a*.*

Ở đây, “a*.*” có nghĩa là tên file bắt đầu bằng „a‟, theo sau là bất số ký tự nào, tiếp

đó là „.‟, và sau đó là bất kỳ phần mở rộng nào

Ví Dụ phức tạp hơn:

Mẫu này có thể được dùng để tìm một địa chỉ email trong một đoạn văn bản, hoặc kiểm tra xem một chuỗi có phải là địa chỉ email hợp lệ hay không

Biểu thức chính quy có thể được sử dụng với bất kỳ dữ liệu nào mà ta có thể truy cập, thông qua ứng dụng hoặc ngôn ngữ lập trình

Những ví dụ trên là những cách sử dụng dễ hiểu của biểu thức chính quy

2.1.2 Các luật ngữ pháp của biểu thức chính quy

Trong dạng đơn giản nhất, một biểu thức chính quy chỉ là một từ hay một cụm từ dùng để tìm kiếm Ví dụ, biểu thức chính quy „John‟ sẽ phù hợp với bất cứ chuỗi nào có chứa chuỗi „John‟ trong nó Ví dụ: „John‟, „Ajohn‟ và “Decker John”

Trong các biểu thức chính quy, một vài kí tự được sử dụng cho các mục đích đặc biệt

Các kí tự này được gọi là các kí tự định lượng Ví dụ, „*‟ tương ứng với bất cứ chuỗi kí tự

nào, và „.‟ tương ứng với bất cứ ký tự đơn nào ngoại trừ ký tự xuống dòng

Như vậy, biểu thức chính quy „.ine‟ sẽ phù hợp với bất cứ chuỗi bốn kí tự nào kết thúc bằng „ine‟, ví dụ: „line‟ và „nine‟

Nhưng nếu muốn tìm một chuỗi có chứa dấu chấm, chẳng hạn kí hiệu toán học pi Biểu thức chính quy sau sẽ không đúng: 3.141592

Thực tế biểu thức này đúng với “3.141592” nhưng nó cũng đúng với “3x141592” và

“38141592” Để vượt qua vấn đề này ta sử dụng một metacharater, dấu chéo ngược (\)

Trang 25

Dấu chéo ngược có thể được sử dụng để chỉ rằng một kí tự ngay bên phải, nó được nắm giữ theo đúng nghĩa đen Như vậy, để tìm chuỗi “3.141592”, ta sử dụng: 3\.141592

2.1.3 Cơ bản về biểu thức chính quy

Biểu thức so mẫu (pattern) dùng để mô tả một cách tổng quát 1 đối tượng (chuỗi) trong ngôn ngữ lập trình, ví dụ trong PHP:

Cấu trúc như ví dụ trên thì /[^a-z0-9]+/i là 1 biểu thức so mẫu,

- Giới hạn trong cặp dấu /<so mẫu>/x hoặc #<so mẫu>#x

- x có thể là 1 hoặc nhiều ký tự để mô tả dữ liệu được lấy và cũng có thể

không có trong biểu thức so mẫu Một số giá trị có thể có của x:

i: không phân biệt chữ hoa, chữ thường

s: bao gồm cả các ký tự xuống dòng

Ví dụ:

preg_replace('/[^a-z0-9]/','','phpBASIC$') -> php preg_replace('/[^a-z0-9]/i','','phpBASIC$') -> phpBASIC

Ý nghĩa của các ký tự trong biểu thức so mẫu:

\ loại bỏ các ký tự đặc biệt của pattern

/(phpbasic)/ : chuỗi phpbasic

Trang 26

/\(phpbasic\)/ : chuỗi (phpbasic)

( ) bắt đầu và kết thúc một so mẫu con

/^a(c|d)b/ : chuỗi có dạng acb hoặc acd

? có hoặc không

/ab?c/ : chuỗi có dạng abc hoặc ac

Trang 27

.: 0 hoặc nhiều hơn ký tự

/a*/ : <null>, a, aa, aaa,

+ : có ít nhất 1

/a+/ : a,aa,aaa,

{ } bắt đầu và kết thúc min/max ký tự

/a{1,3}/ : a,aa,aaa

Đây là 1 dạng của biểu thức chính quy

// : bắt đầu 1 chuỗi tìm kiếm

^ : tương ứng với ký tự đầu chuỗi hay đầu dòng

\d : tương ứng với ký tự số từ 0-9

+ : tương ứng 1 ký tự phía trước xuất hiện 1 hoặc nhiều lần

$ : tương ứng với ký tự cuối chuỗi hay cuối dòng

\w : tương ứng với 1 ký tự hay số a-z , A-Z hay 0-9

* : tương ứng 1 ký tự phía trước xuất hiện 0 hoặc nhiều lần

Ví dụ:

var = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; // dùng để kiểm tra eMail

testpattern = /^[a-zA-Z](\w+\-)*(\w+)@(\w+\-)+[a-zA-Z]{2,4}$/;

2.2 Biểu thức chính quy trong ngôn ngữ lập trình web

2.2.1 Regular Expression Engines

Trang 28

Regular Expression Engine là một bộ phận của phần mềm, chuyên để xử lý Regular Expression (so khớp mẫu với một chuỗi nào đó) Có nhiều Regular Expression Engine và chúng không hoàn toàn tương thích với nhau Cú pháp Regular Expression (flavor) của mỗi engine cũng có sự khác nhau Trong báo cáo này sẽ tập trung vào cú pháp Regular Expression được sử dụng trong Perl 5, vì nó phổ biến nhất Rất nhiều engine Regular Expression khác giống với engine sử dụng trong Perl 5: engine nguồn mở PCRE (sử dụng trong rất nhiều ngôn ngữ lập trình như PHP …), thư viện regex NET,

Trong PHP, có thể sử dụng biểu thức chính quy thông qua các hàm regex PHP cung

cấp 3 nhóm hàm regex, tên của chúng được bắt đầu bởi: ereg, mb_ereg và preg 2 loại đầu

sử dụng engine POSIX Extended, còn preg sử dụng engine PCRE (Perl-Compatible) Xem xét đoạn mã PHP sau:

<?php

$string = 'chuỗi cần áp dụng biểu thức regex';

$pattern = '/biểu thức regex/';

preg_match($pattern, $string, $match);

2.2.2 Cơ chế hoạt động của Regular Expression Engine

Hiểu được cách làm việc của Regular Expression Engine sẽ giúp ta lập trình với Regular Expression tốt hơn, dễ dàng hơn Nó giúp ta hiểu được tại sao một Regular

Trang 29

Expression hoạt động không nhƣ mong muốn, và giúp tiết kiệm thời gian khi viết các Regular Expression phức tạp

Có 2 loại Regular Expression Engine: Text-Directed Engines, và Regex-Directed Engines Loại cú pháp Regular Expression đang thảo luận ở đây thuộc Regex-Directed Engines Loại engine này phổ biến hơn bởi nó có một số chức năng rất hữu dụng nhƣ: lazy quantifiers, backreferences,

Có thể dễ dàng kiểm tra cú pháp đang sử dụng thuộc về engine nào qua việc kiểm tra xem lazy quantifiers và backreferences có đƣợc hỗ trợ không Thử dùng biểu thức regex regex|regex not vào chuỗi regex not, nếu kết quả so khớp là regex, thì engine đang dùng thuộc loại regex-directed Nêu kết quả là regex not, thì engine thuộc loại text-directed

Regex-directed engine luôn trả về kết quả so khớp bên trái nhất

Regex-directed engine luôn bắt đầu so khớp với ký tự đầu tiên của chuỗi Lấy một ví

dụ đơn giản để minh hoạ: dùng regex “cat” vào chuỗi “He captured a catfish for his cat” Engine sẽ bắt đầu so khớp dấu hiện đầu tiên trong regex là c với ký tự đầu tiên của chuỗi là

H, không khớp Vì vậy nó tiếp tục lần lƣợt so khớp với ký tự thứ 2 và 3 là e và space, đều không khớp Đến ký tự thứ 4, c đã khớp với c, giờ engine bắt đầu so khớp dấu hiệu thứ 2 trong regex là a với ký tự thứ 5 của chuỗi là a, khớp Nhƣng đến dấu hiệu thứ 3 của regex

là t thì không khớp với ký tự thứ 6 của chuỗi là p Lúc này engine nhận ra rằng không thể tìm ra một so khớp bắt đầu từ ký tự thứ 4 của chuỗi Vì vậy, nó bắt đầu lại công việc từ đầu, từ ký tự thứ 5 của chuỗi Regex c không khớp với a Cứ tiếp tục nhƣ vậy cho đến ký

tự thứ 15 của chuỗi, regex c đã khớp với c Engine lần lƣợt so khớp các dấu hiệu còn lại trong regex với các ký tự tiếp theo trong chuỗi: a khớp a, t khớp t Và nhƣ vậy 1 so khớp

đã đƣợc tìm thấy bắt đầu từ ký tự 15 Engine sẽ trả về kết quả và ngừng luôn, không tiếp tục tìm xem còn so khớp nào tốt hơn không (ví dụ: cat ở cuối chuỗi)

2.2.3 Lớp ký tự (Character Classes - Character Sets)

2.2.3.1 Lớp ký tự (Character Class)

Trang 30

Sử dụng lớp ký tự, sẽ khiến regex engine chỉ chọn ra một ký tự để so khớp Để

sử dụng, ta đặt các ký tự cần so khớp vào 2 dấu [ và ] Ví dụ: để so khớp ký tự a hoặc

e, ta dùng [ae] Như vậy biểu thức gr[ae]y sẽ khớp với “gray” hoặc “grey”

Lớp ký tự chỉ so khớp với một ký tự đơn Như vậy gr[ae]y sẽ không khớp với graay, graey,v.v Thứ tự các ký tự trong lớp không quan trọng Kết quả trả về luôn giống nhau

Để xác định một vùng ký tự trong lớp ký tự, ta sử dụng dấu “-“ Ví dụ: [0-9] so khớp với một chữ số từ 0  9 Có thể sử dụng nhiều vùng ký tự hoặc kết hợp vùng

ký tự với ký tự đơn Ví dụ: [0-9a-fA-F] so khớp với một chữ số hệ 16, không phân biệt chữ hoa, thường [0-9a-fxA-FX] so khớp với một chữ số hệ 16 hoặc chữ cái X, không phân biệt chữ hoa, thường Cũng như trên, thứ tự các vùng không quan trọng

2.2.3.2 Lớp ký tự phủ định

Đặt dấu ^ sau [ trong lớp ký tự sẽ phủ định lớp ký tự đó Kết quả là lớp ký tự sẽ

so khớp với bất kỳ ký tự nào không nằm trong lớp ký tự đó Lớp ký tự phủ định có thể so khớp với cả ký tự line break

Chú ý rằng lớp ký tự phủ định vẫn phải được so khớp với một ký tự Ví dụ: q[^u] không phải là "q không theo sau bởi u" mà là "q theo sau bởi một ký tự không phải u" Vì vậy nó sẽ không so khớp với q trong chuỗi “Iraq”, và sẽ so khớp với q và space trong chuỗi “Iraq is a country”

2.2.3.3 Metacharacter trong lớp ký tự

Trong lớp ký tự, các ký tự mang ý nghĩa đặc biệt hay metacharacter chỉ bao gồm: ] \ ^ - Các metacharacter nói ở phần trước khi đặt trong lớp ký tự sẽ chỉ được coi như ký tự thông thường, và do đó không cần phải giải phóng Ví dụ: để tìm ký tự

* hoặc +, ta dùng [+*]

Trang 31

Để đặt ký tự \ vào trong lớp ký tự với nghĩa thông thường, cần giải phóng nó bằng một ký tự \ khác Ví dụ: [\\x] sẽ khớp với ký tự \ hoặc x Các ký tự ] ^ - nếu muốn dùng theo nghĩa thông thường cũng phải được giải phóng bằng \ hoặc đặt nó ở

vị trí mà nó sẽ không có ý nghĩa đặc biệt Nên dùng cách thứ 2 để biểu thức regex trông dễ nhìn hơn như sau:

 Với ^, đặt nó ở bất kỳ chỗ nào trừ vị trí ngay sau [ Ví dụ: [x^] sẽ khớp với x hoặc ^

 Với ], đặt nó ngay sau [ hoặc [^ Ví dụ: []x] sẽ khớp với ] hoặc x [^]x] sẽ khớp với bất kỳ ký tự nào không phải là ] hoặc x

 Với -, đặt nó ngay sau [ hoặc [^ , hoặc ngay trước ] Ví dụ: cả [-x] và [x-] đều

so khớp với - hoặc x

Có thể sử dụng tất cả các ký tự không in được trong lớp ký tự giống như dùng chúng ngoài lớp ký tự Ví dụ: [$\u20AC] sẽ khớp với $ hoặc ký tự đồng euro (với giả định cú pháp regex đang dùng hỗ trợ unicode)

JGsoft engine, Perl và PCRE còn hỗ trợ kiểu \Q \E trong lớp ký tự để giải phóng một chuỗi ký tự Ví dụ: [\Q[-]\E] sẽ khớp với [ hoặc - hoặc ]

Cú pháp regex của POSIX lại xử lý \ trong lớp ký tự như một ký tự thông

thường Đồng nghĩa với việc không thể dùng \ để giải phóng ] ^ - Để làm việc này ta chỉ còn cách đặt chúng vào các vị trí như trình bày ở trên Ngoài ra điều này cũng đồng nghĩa với việc các cú pháp tắt (shorthand, Ví dụ: \d) không còn hiệu lực

2.2.3.4 Lớp ký tự viết tắt (Shorthand Character Classes)

Các lớp ký tự viết tắt có thể được dùng cả trong lẫn ngoài cặp [] Ví dụ: \s\d khớp với 1 ký tự trắng theo sau bởi 1 chữ số [\s\d] khớp với 1 ký tự đơn là 1 ký tự trắng hoặc 1 chữ số Khi áp dụng vào chuỗi 1 + 2 = 3, regex thứ 1 sẽ khớp với 2

Trang 32

(space và 2), trong khi regex thứ 2 sẽ khớp với 1 [\da-fA-F] khớp với 1 chữ số hệ 16, giống như [0-9a-fA-F]

ký tự carriage return hoặc line feed, nghĩa là [\t\r\n] Một số cú pháp khác lại bao gồm thêm cả các ký tự không in được, hiếm khi dùng như vertical tab hoặc form feed

2.2.3.5 Lớp ký tự lặp (Repeating Character Classes)

Nếu nhắc lại lớp ký tự khi dùng các toán tử nhắc lại ? * + , ta sẽ nhắc lại cả lớp

ký tự chứ không chỉ nhắc lại ký tự mà nó so khớp Ví dụ: regex [0-9]+ sẽ khớp với cả

837 lẫn 222

Nếu muốn lặp lại chỉ các ký tự được so khớp, ta cần dùng tham chiếu ngược (backreferences) ([0-9])\1+ sẽ khớp với 222 chứ không khớp với 837 Khi áp dụng regex này vào chuỗi 833337, nó sẽ khớp với 3333

2.2.4 Ký tự thông thường và ký tự đặc biệt

2.2.4.1 Ký tự thông thường (Literal Characters)

Regex cơ bản nhất chính là biểu thức bao gồm 1 ký tự thông thường, Ví dụ: a

Nó sẽ so khớp với thực thể đầu tiên của ký tự đó trong chuỗi Ví dụ nếu có chuỗi:

“LazyDog is a boy”, nó sẽ so khớp với ký tự a sau ký tự L Regex này cũng có thể so

Trang 33

khớp với ký tự a thứ 2 nếu ta điều khiển regex engine tiếp tục tìm kiếm sau khi đã so khớp được 1 lần

Cũng như vậy, regex “dog” sẽ so khớp với “dog” trong chuỗi “LazyDog is not a dog” Regex này bao gồm 1 serial 3 ký tự thông thường Engine sẽ hiểu biểu thức này là: tìm d, theo sau bởi o, theo sau bởi g

Lưu ý regex engine mặc định phân biệt chữ hoa và chữ thường Dog không so khớp với dog

2.2.4.2 Ký tự đặc biệt (Special Characters)

Vì cần làm nhiều việc phức tạp hơn là tìm kiếm 1 đoạn văn bản, nên phải sử dụng 1 vài ký tự đặc biệt để thực hiện Trong cú pháp regex, có 11 ký tự mang ý nghĩa đặc biệt: [ \ ^ $ | ? * + ( ) Được gọi là các metacharacter

Nếu cần dùng các ký tự này với ý nghĩa thông thường, phải giải phóng nó bằng \

Ví dụ nếu cần so khớp 1+1=2, thì regex đúng sẽ là 1\+1=2 Chú ý rằng 1+1=2 cũng là regex đúng, nên sẽ không báo lỗi, nhưng nó sẽ không cho kết quả như mong muốn Regex 1+1=2 sẽ so khớp với 111=2 trong chuỗi 123+111=234, vì dấu + ở đây mang ý nghĩa đặc biệt

Nếu không giải phóng ký tự đặc biệt ở những nơi không được phép thì sẽ gặp lỗi Ví dụ: +1

Hầu hết các loại cú pháp regex đều coi { như 1 ký tự thông thường, trừ khi nó là

1 phần của toán tử lặp lại (repetition operator), Ví dụ: {1, 3} Vì vậy không cần giải phóng ký tự này

Ta chỉ dùng \ để giải phóng các ký tự đặc biệt, còn các ký tự khác thì không cần,

vì \ cũng là 1 ký tự đặc biệt \ khi kết hợp với 1 ký tự thông thường sẽ có ý nghĩa đặc biệt, Ví dụ: \d sẽ so khớp với 1 chữ số từ 0 - 9

Trang 34

Tất cả các loại cú pháp regex đều cho phép giải phóng 1 ký tự đặc biệt bằng \ Rất nhiều cú pháp khác còn hỗ trợ kiểu giải phóng \Q \E Tất cả các ký tự nằm trong cặp \Q và \E sẽ được coi như ký tự thông thường Ví dụ: \Q*\d+*\E sẽ so khớp với đoạn văn bản *\d+* Kiểu cú pháp này được hỗ trợ bởi JGsoft engine, Perl, PCRE,

đó nó mới được chuyển đến regex engine Ví dụ khác: đế so khớp c:\temp, cần dùng regex c:\\temp (vì \t trong regex mang ý nghĩa đặc biệt) Và trong mã nguồn C++, regex này cần được viết là c:\\\\temp

2.2.4.4 Ký tự không in được

Có thể dùng các tổ hợp ký tự đặc biệt để đặt các ký tự không in được vào regex

\t cho ký tự tab (ASCII 0x09)

\r cho carriage return (0x0D)

\n cho line feed (0x0A)

\a (bell, 0x07)

\e (escape, 0x1B)

\f (form feed, 0x0C)

\v (vertical tab, 0x0B)

Trang 35

Lưu ý: Windows text files sử dụng \r\n để kết thúc dòng, còn UNIX text files sử

dụng \n

Hầu hết các loại cú pháp regex còn cho phép sử dụng tổ hợp \cA đến \cZ (c cố định, theo sau bởi 1 chữ cái hoa từ A - Z) để biểu thị ký tự điều khiển Ví dụ: \cA biểu thị Control+A \cM biểu thị Control+M, hay carriage return, giống như \r

Nếu regex engine hỗ trợ Unicode, ta sử dụng \uFFFF thay cho \xFF để biểu thị 1

ký tự Unicode Ví dụ: mã unicode của ký tự đồng euro là 0x20AC Để đặt nó vào biểu thức regex, ta dùng \u20AC

2.2.5 Ký tự chấm (Dot)

2.2.5.1 Ký tự Dot khớp với hầu hết các ký tự

Trong biểu thức regex, dấu là metacharacter được sử dụng nhiều nhất, và cũng

2.2.5.2 Sử dụng Dot hiệu quả

Dấu là 1 metacharacter có thể khớp với bất kỳ ký tự nào, nhưng cũng có thể khớp với ký tự mà ta không muốn Những trường hợp như thế có thế rất khó nhận ra

Trang 36

Lấy 1 ví dụ đơn giản để minh hoạ: giải sử ta muốn tìm 1 chuỗi ngày tháng năm dưới dạng mm/dd/yy, trong đó dấu phân cách ngày tháng năm ta để người dùng tuỳ chọn Giải pháp nhanh nhất là \d\d.\d\d.\d\d Trông có vẻ thích hợp Nó sẽ khớp 1 chuỗi kiểu như 02/12/03 Vấn đề là 1 chuỗi kiểu như 02512703 cũng dc coi là 1 ngày hợp lệ với regex trên (chấm thứ 1 khớp với 5, chấm thứ 2 khớp với 7)

Giải pháp tốt hơn là: \d\d[- /.]\d\d[- /.]\d\d Regex này cho phép - hoặc space hoặc hoặc / làm dấu phân cách ngày tháng năm Lưu ý rằng dấu trong lớp ký tự là 1

ký tự thông thường, do đó không cần phải giải phóng Nhưng regex này vẫn chưa tốt,

2.2.5.3 Sử dụng lớp ký tự phủ định thay cho Dot

Giả sử ta cần tìm 1 chuỗi bao bởi " " Chuỗi này có thể có bao nhiêu ký tự tuỳ thích, do đó ".*" là thích hợp Dấu khớp với bất kỳ ký tự nào, còn dấu * sẽ cho phép có thể được lặp lại bao nhiêu lần tuỳ thích, kể cả 0 lần Nếu áp dụng regex này vào chuỗi “Put a "string" between double quotes”, nó sẽ trả về kết quả đúng như mong muốn: "string" Giờ hãy thử với chuỗi “Houston, we have a problem with "string one" and "string two" Please respond” Và kết quả là "string one" and "string two" Lý do

là vì * vốn có bản tính "tham lam" (greedy) Ví dụ này cho thấy không nên lạm dụng dấu chấm

Trong ví dụ tìm ngày ở trên, ta cải tiến regex bằng cách sử dụng lớp ký tự thay cho dấu chấm Giờ ta cũng làm như vậy Ta không muốn có số lượng bất kỳ các ký tự

Trang 37

bất kỳ trong cặp dấu " ", mà muốn có số lượng bất kỳ các ký tự không phải là " hoặc newline trong cặp dấu " " Do đó regex đúng sẽ là "[^"\r\n]*"

2.2.6 Neo (anchors)

2.2.6.1 Neo đầu và cuối chuỗi

Ta đã tìm hiểu về các ký tự thông thường và lớp ký tự Đặt 1 ký tự thông thường hoặc 1 lớp ký tự vào biểu thức regex, ta sẽ bắt regex engine đi so khớp với 1 ký tự đơn

Anchors thuộc về 1 dạng khác Chúng không so khớp với bất kỳ 1 ký tự nào Thay vào đó, nó so khớp với 1 vị trí trước, sau hoặc giữa các ký tự Anchors được sử dụng để "neo" biểu thức regex vào 1 vị trí để so khớp Dấu ^ khớp với vị trí ngay trước ký tự đầu tiên trong chuỗi Áp dụng regex ^a cho chuỗi abc, ta sẽ được a ^b sẽ không có kết quả khi so khớp với abc, vì b không khớp với ký tự ngay sau vị trí bắt đầu của chuỗi, vị trí được khớp bởi ^

Tương tự như trên, $ khớp với vị trí ngay sau ký tự cuối cùng của chuỗi c$ sẽ khớp với c trong abc, trong khi a$ không khớp

2.2.6.2 Ứng dụng trong ngôn ngữ lập trình

Khi sử dụng regex trong ngôn ngữ lập trình để kiểm định thông tin nhập vào từ người dùng, sử dụng neo là rất quan trọng Ví dụ nếu ta dùng \d+ để kiểm tra xem người dùng có nhập vào 1 số nguyên hay không, kết quả trả về vẫn có thể là đúng, thậm chí nếu người dùng nhập „qsdf4ghjk”, bởi \d+ khớp với 4 Regex đúng ở đây phải là ^\d+$ Bởi vì vị trí đầu chuỗi phải được khớp trước khi \d+ được khớp, và vị trí cuối chuỗi phải được khớp ngay sau đó, vì vậy chuỗi nhập vào nếu muốn khớp với

^\d+$ thì chỉ có thể là 1 chuỗi các chữ số (dấu + là toán tử lặp lại, dùng để lặp lại ký

tự trước nó 1 hoặc nhiều lần)

Trang 38

Một chú ý khác là có thể dễ dàng mắc lỗi với ký tự trắng Trong ngôn ngữ Perl chẳng hạn, khi đọc vào 1 dòng từ 1 file text, ký tự line break cũng sẽ được lưu vào biến Do đó trước khi tiến hành kiểm định thông tin nhập vào, ta cần cắt bỏ các ký tự khoảng trắng đầu và cuối ^\s+ khớp với ký tự khoảng trắng đầu và \s+$ khớp với ký

tự khoảng trắng cuối

2.2.6.2 Match có độ dài 0 (Zero-Length Matches)

Ta đã biết các anchors khớp với 1 vị trí chứ không phải khớp với 1 ký tự Điều này cũng có nghĩa là nếu biểu thức regex chỉ bao gồm 1 hoặc nhiều anchors, kết quả

so khớp có thể có độ dài 0 Tuỳ vào từng tình huống mà điều này có thể rất hữu dụng hoặc là tai họa Chẳng hạn ta dử dụng ^\d*$ để kiểm tra xem người dùng có nhập vào

1 số hay không (chú ý ở đây ta dùng * thay cho + trong ví dụ ở trên, * cũng là toán tử lặp lại, dùng để lặp lại ký tự trước nó 0 hoặc nhiều lần) Điều này có thể dẫn tới việc chấp nhận 1 chuỗi rỗng là thông tin nhập vào hợp lệ

Tuy nhiên, chỉ khớp với vị trí cũng có thể rất hữu dụng ví dụ như trong email, các dòng trong message trích dẫn thường được bắt đầu bởi dấu > và space Với chế độ

"multi-line mode", ta có thể dùng regex ^ để "chọn" lấy với vị trí đầu của message trích dẫn, và vị trí ngay sau mỗi ký tự newline (đầu mỗi dòng trong message trích dẫn) Nhờ đó, khi sử dụng các hàm hay phương thức của ngôn ngữ lập trình, ta có thể loại bỏ kết quả so khớp (match) và thay thế vào đó chuỗi mà ta muốn (ở đây là chuỗi gồm ký tự > và space) Bởi vì kết quả so khớp ở đây không chứa ký tự nào cả, cho nên không có gì bị xoá đi Nhưng nó chứa vị trí đầu các dòng trong message trích dẫn, do đó chuỗi >space sẽ được đặt vào đúng vị trí đó, điều mà ta muốn Ví dụ trong PHP đoạn mã này sẽ thêm >space vào đầu chuỗi:

<?php

echo preg_replace('/^/', '> ', 'I love LazyDog');

?>

Trang 39

Mặc dù $ (khi không kích hoạt "multi-line mode") và \Z chỉ khớp với vị trí cuối chuỗi, nhưng có 1 ngoại lệ ở đây Nếu chuỗi được kết thúc bởi ký tự line break, khi

đó \Z và $ sẽ khớp với vị trí ngay trước ký tự line break, thay vì vị trí cuối chuỗi thực

sự (sau line break) Tính năng tăng cường này được đưa ra bởi Perl, và sau đó được các loại ngôn ngữ khác áp dụng, bao gồm: Java, NET và PCRE Trong Perl, khi đọc vào 1 dòng từ file, chuỗi kết quả sẽ được kết thúc bởi line break Ví dụ khi đọc 1 dòng

từ file chứa đoạn text “lazydog”, kết quả sẽ là “lazydog\n” Khi áp dụng regex vào chuỗi này, cả ^[a-z]+$ và \A[a-z]+\Z đều khớp với “lazydog”

Nếu muốn khớp với vị trí cuối chuỗi thực sự, ta sử dụng \z \A[a-z]+\z sẽ không khớp với “lazydog\n” Vì \z khớp với vị trí sau line break, mà line break lại không được khớp bởi lớp ký tự [a-z]

Trang 40

Thông thờng Firewall đƣợc đặt giữa mạng bên trong (Intranet) của một công ty, tổ chức, ngành hay một quốc gia, và Internet Vai trò chính là bảo mật thông tin, ngăn chặn

sự truy nhập không mong muốn từ bên ngoài (Internet) và cấm truy nhập từ bên trong (Intranet) tới một số địa chỉ nhất định trên Internet

Ngày đăng: 04/09/2016, 14:38

HÌNH ẢNH LIÊN QUAN

Hình 1- Thống kê các cuộc tấn công Website từ nước ngoài vào  ViệtNam từ 2002 đến 2007 (trích dẫn nguồn VNCERT, trang 11) - ứng dụng biểu thức chính quy trong bảo mật web
Hình 1 Thống kê các cuộc tấn công Website từ nước ngoài vào ViệtNam từ 2002 đến 2007 (trích dẫn nguồn VNCERT, trang 11) (Trang 20)
Hình 11-  Mô hình tổng quan Modsecurity - ứng dụng biểu thức chính quy trong bảo mật web
Hình 11 Mô hình tổng quan Modsecurity (Trang 43)
Hình 13- Hoạt động của Modsecurity - ứng dụng biểu thức chính quy trong bảo mật web
Hình 13 Hoạt động của Modsecurity (Trang 48)
Hình 14- Các pha xử lý - ứng dụng biểu thức chính quy trong bảo mật web
Hình 14 Các pha xử lý (Trang 55)
Hình 15- Mô hình NON – DMZ - ứng dụng biểu thức chính quy trong bảo mật web
Hình 15 Mô hình NON – DMZ (Trang 70)
Hình 17- Mô hình Modsecurity trên local server - ứng dụng biểu thức chính quy trong bảo mật web
Hình 17 Mô hình Modsecurity trên local server (Trang 75)
Hình 18- Lệnh cài đặt Apache2 - ứng dụng biểu thức chính quy trong bảo mật web
Hình 18 Lệnh cài đặt Apache2 (Trang 76)
Hình 19- Chỉnh sửa file httpd.conf - ứng dụng biểu thức chính quy trong bảo mật web
Hình 19 Chỉnh sửa file httpd.conf (Trang 77)
Hình 22- Khởi động lại Apache - ứng dụng biểu thức chính quy trong bảo mật web
Hình 22 Khởi động lại Apache (Trang 79)
Hình 23- Kiểm tra hoạt động PHP - ứng dụng biểu thức chính quy trong bảo mật web
Hình 23 Kiểm tra hoạt động PHP (Trang 80)
Hình 24- PHP đã hoạt động - ứng dụng biểu thức chính quy trong bảo mật web
Hình 24 PHP đã hoạt động (Trang 81)
Hình 26- Cài đặt phpmyadmin - ứng dụng biểu thức chính quy trong bảo mật web
Hình 26 Cài đặt phpmyadmin (Trang 82)
Hình 27- Phpmyadmin hoạt động - ứng dụng biểu thức chính quy trong bảo mật web
Hình 27 Phpmyadmin hoạt động (Trang 83)
Hình 28- Cài đặt Modsecurity  vào trang http://www.modsecurity.org để download modsecurity về - ứng dụng biểu thức chính quy trong bảo mật web
Hình 28 Cài đặt Modsecurity vào trang http://www.modsecurity.org để download modsecurity về (Trang 84)
Hình 29- Tiến hành cài đặt - ứng dụng biểu thức chính quy trong bảo mật web
Hình 29 Tiến hành cài đặt (Trang 85)

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