Clan ๖ۣۜVui ๖ۣۜLà ๖ۣۜChính
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Bây giờ là:
May 2024
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  

Calendar Calendar

Đăng Nhập

Quên mật khẩu

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 …

Comments: 1

Latest topics
» Quy định và điều bạn cần biết
SQL injection - Các cách phòng chống và kết luận P7 EmptySun Sep 21, 2014 7:32 pm by anhkhoa1597

» Hướng dẫn mod khung viền trong LMHT
SQL injection - Các cách phòng chống và kết luận P7 EmptyTue Jul 22, 2014 2:31 pm by ltn1993st

» Cần lời Gải Thích
SQL injection - Các cách phòng chống và kết luận P7 EmptyFri 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
SQL injection - Các cách phòng chống và kết luận P7 EmptyTue Jul 08, 2014 12:33 pm by Admin

» Brazil – Đức: Điệu Samba loạn nhịp trước “xe tăng”
SQL injection - Các cách phòng chống và kết luận P7 EmptyTue Jul 08, 2014 12:23 pm by Admin

» Anh K giải thích cái này nhé!
SQL injection - Các cách phòng chống và kết luận P7 EmptyFri 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
SQL injection - Các cách phòng chống và kết luận P7 EmptySun May 11, 2014 3:34 pm by Mr.Keen

» SQL injection - Một số tool khai thác P6
SQL injection - Các cách phòng chống và kết luận P7 EmptySun 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
SQL injection - Các cách phòng chống và kết luận P7 EmptySun May 11, 2014 3:32 pm by Mr.Keen

Hỗ trợ Kỹ Thuật
Chat With me

SQL injection - Các cách phòng chống và kết luận P7

Go down

SQL injection - Các cách phòng chống và kết luận P7 Empty SQL injection - Các cách phòng chống và kết luận P7

Bài gửi by Mr.Keen Sun May 11, 2014 3:34 pm

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:

  • 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 (INSERTUPDATE) (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
Admin

Tổng số bài gửi : 46
Join date : 30/12/2013
Age : 28
Đến từ : Phong Điền Cần Thơ

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết