Bây giờ là:
Đăng Nhập
Quy định và điều bạn cần biết
Mon Dec 30, 2013 9:13 am by Admin
DIỄN ĐÀN VUI LÀ CHÍNH KHÔNG PHẢI LÀ WEBSITE CHÍNH THỨC
☞ Giao lưu không cay cú
☞ Các mem không spam icon
☞ Các mem có quyền phản ánh mod với cách làm việc
☞ Các mem không sử dụng ngôn từ không thích hợp
1/ Các bài viết, hình ảnh, nhạc... gởi vào diễn đàn không được:
* Toàn bộ phần chủ đề (hoặc nội …
☞ Giao lưu không cay cú
☞ Các mem không spam icon
☞ Các mem có quyền phản ánh mod với cách làm việc
☞ Các mem không sử dụng ngôn từ không thích hợp
1/ Các bài viết, hình ảnh, nhạc... gởi vào diễn đàn không được:
* Toàn bộ phần chủ đề (hoặc nội …
Comments: 1
Latest topics
SQL injection - Các cách phòng chống và kết luận P7
Trang 1 trong tổng số 1 trang
SQL injection - Các cách phòng chống và kết luận P7
Các cách phòng chống
Trong các bài viết trước, tôi đã trình bày về cách thức tấn công, các kĩ thuật bypass để khai thác lỗ hổng SQL injection. Ở bài viết này, tôi sẽ nói về cách phòng chống lỗ hổng nguy hiểm này.
Ngay từ khái niệm, chúng ta đã có thể biết được cách phòng chống hiệu quả Sql injection chính là việc kiểm tra kỹ càng tham số đầu vào. Những tham số mà từ đó người lập trình website sử dụng để xây dựng lên câu truy vấn tới cơ sở dữ liệu.
Công việc kiểm tra tham số đầu vào (áp dụng phòng tránh lỗi Sql injection) nên được tiến hành theo nhiều tầng:
- Kiểm tra kiểu của dữ liệu: đối với dữ liệu kiểu số, kiểu chuỗi … chúng ta phải có những hàm validate tương ứng.
o Nếu là kiểu int:
o Nếu là kiểu chuỗi:
Ví dụ:
Mã nguồn PHP:
Mã nguồn PHP:
C#: System.Text.RegularExpressions;
PHP: preg_match(); ...
Java: Pattern.matcher(); ...
o Sử dụng các thư viện hỗ trợ:
cmd.Parameters.Add("@var", SqlDbType.Int);
cmd.Parameters["@var"].Value = input;
o Phân quyền SQL
Kết luận
SQL injection luôn được đánh giá là một trong những lỗ hổng bảo mật web nguy hiểm nhất trong nhiều năm qua. Do đó, đối với những người lập trình web cần hiểu rõ nguyên nhân và cách khắc phục sao cho hiệu quả. Những người quản trị cần có những cấu hình cần thiết để trách nguy cơ và giảm thiểu tác hại trong trường hợp ứng dụng web có lỗi có thể khai thác SQL Injection.
Các kỹ thuật tấn công, bypass trên đây, tùy vào những trường hợp cụ thể mà có những cách áp dụng khác nhau. Do tính chất đặc thù trong mỗi trường hợp cụ thể nên loạt bài viết không thể bao quát hết được tất cả các kỹ thuật. Với sự phát triển của các ứng dụng firewall (WAF) có thể những cách bypass nêu trên sẽ không còn hiệu quả nữa.
Loạt bài viết có tham khảo từ một số nguồn:
Trong các bài viết trước, tôi đã trình bày về cách thức tấn công, các kĩ thuật bypass để khai thác lỗ hổng SQL injection. Ở bài viết này, tôi sẽ nói về cách phòng chống lỗ hổng nguy hiểm này.
Ngay từ khái niệm, chúng ta đã có thể biết được cách phòng chống hiệu quả Sql injection chính là việc kiểm tra kỹ càng tham số đầu vào. Những tham số mà từ đó người lập trình website sử dụng để xây dựng lên câu truy vấn tới cơ sở dữ liệu.
Công việc kiểm tra tham số đầu vào (áp dụng phòng tránh lỗi Sql injection) nên được tiến hành theo nhiều tầng:
- Client: javascript (có thể bypass bằng các phần mềm tamper)
- Server: C#, php, jsp
- Kiểm tra kiểu của dữ liệu: đối với dữ liệu kiểu số, kiểu chuỗi … chúng ta phải có những hàm validate tương ứng.
o Nếu là kiểu int:
- ASP.NET: Int32.Parse(/*Param*/);
- PHP: is_numeric($var), is_int($var), is_integer($var)...
o Nếu là kiểu chuỗi:
- Thiết lập độ dài tối đa cần thiết: length <= MAX_LENGTH
- Lọc bỏ ký tự nguy hiểm (bao gồm các meta characters trong DBMS), lọc bỏ các từ khóa như union, select, order, information_schema, insert, drop, load_file… (sử dụng các hàm như mysql_real_escape_string(), preg_replace()…)
Ví dụ:
Mã nguồn PHP:
- Code:
<?php
$id = mysql_real_escape_string($_GET['id']);
$query = mysql_query("SELECT * FROM table where id = "' .$id. '");
?>
Mã nguồn PHP:
- Code:
<?php
$id = preg_replace("/[^0-9]/","", $_GET['id']);
$query = mysql_query("SELECT * FROM table where id = "' .$id. '");
?>
- Kiểm tra xem định dạng chuỗi: email, username, password… đều có một định dạng nhất định, do đó có thể viết các biểu thức chính qui (Regular Expression) cho mỗi định dạng này.
C#: System.Text.RegularExpressions;
PHP: preg_match(); ...
Java: Pattern.matcher(); ...
o Sử dụng các thư viện hỗ trợ:
- C#: Parameters
cmd.Parameters.Add("@var", SqlDbType.Int);
cmd.Parameters["@var"].Value = input;
o Phân quyền SQL
- Tài khoản sử dụng cho ứng dụng web trong cơ sở dữ liệu dĩ nhiên phải có quyền đọc. Nhưng khi thực hiện thao tác thêm bài viết, thêm user thì nó phải cần thêm quyền ghi nữa. Do đó, tùy vào mỗi trường hợp mà ta thiết lập role phù hợp cho mỗi tài khoản web tương tác với cơ sở dữ liệu. Với những ứng dụng web thông thường, tài khoản cho ứng dụng web trong SQL SERVER nên chỉ được thiết lập quyền đọc (SELECT) (db_datareader) và quyền ghi (INSERT, UPDATE) (db_datawriter) như vậy sẽ không có quyền xóa một table.
Kết luận
SQL injection luôn được đánh giá là một trong những lỗ hổng bảo mật web nguy hiểm nhất trong nhiều năm qua. Do đó, đối với những người lập trình web cần hiểu rõ nguyên nhân và cách khắc phục sao cho hiệu quả. Những người quản trị cần có những cấu hình cần thiết để trách nguy cơ và giảm thiểu tác hại trong trường hợp ứng dụng web có lỗi có thể khai thác SQL Injection.
Các kỹ thuật tấn công, bypass trên đây, tùy vào những trường hợp cụ thể mà có những cách áp dụng khác nhau. Do tính chất đặc thù trong mỗi trường hợp cụ thể nên loạt bài viết không thể bao quát hết được tất cả các kỹ thuật. Với sự phát triển của các ứng dụng firewall (WAF) có thể những cách bypass nêu trên sẽ không còn hiệu quả nữa.
Loạt bài viết có tham khảo từ một số nguồn:
Mr.Keen- Admin
- Tổng số bài gửi : 46
Join date : 30/12/2013
Age : 28
Đến từ : Phong Điền Cần Thơ
Similar topics
» SQL injection - Các con đường khai thác khác P2
» SQL injection - Các bước khai thác khác P4
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
» SQL injection – Các hướng khai thác P3
» SQL injection - Một số tool khai thác P6
» SQL injection - Các bước khai thác khác P4
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
» SQL injection – Các hướng khai thác P3
» SQL injection - Một số tool khai thác P6
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Sun Sep 21, 2014 7:32 pm by anhkhoa1597
» Hướng dẫn mod khung viền trong LMHT
Tue Jul 22, 2014 2:31 pm by ltn1993st
» Cần lời Gải Thích
Fri Jul 11, 2014 1:21 pm by Admin
» Van Gaal: Thiên tài hay kẻ phụ bạc từ góc nhìn tâm lý học
Tue Jul 08, 2014 12:33 pm by Admin
» Brazil – Đức: Điệu Samba loạn nhịp trước “xe tăng”
Tue Jul 08, 2014 12:23 pm by Admin
» Anh K giải thích cái này nhé!
Fri Jun 06, 2014 6:46 am by Mr.Keen
» SQL injection - Các cách phòng chống và kết luận P7
Sun May 11, 2014 3:34 pm by Mr.Keen
» SQL injection - Một số tool khai thác P6
Sun May 11, 2014 3:33 pm by Mr.Keen
» SQL injection - Một số kỹ thuật vượt qua cơ chế lọc P5
Sun May 11, 2014 3:32 pm by Mr.Keen