banner
 .::Exploit::. SQL Injection Tutorial - Sưu tầm của HVA cũ Go to original post Author: Unknown - Translator: BigballVN Sưu Tầm - Entry Date: 14/02/2009 01:29:29
Phòng tránh SQL Injection như thế nào ?

Hãy suy nghĩ như 1 hackers và thiết kế website của bạn với sự thận trọng tối đa. Như bạn đã thấy , những cách thức tấn công mà tôi ví dụ như trên không hề đòi hỏi 1 sự hiểu biết rộng về SQL mà đơn giản , hackers chỉ ứng dụng tốt những thứ cơ bản và lợi dụng vào ...sự chủ quan của bạn. Qui tắc số 1 trong thiết kế website có tương tác với người sử dụng là : ĐỪNG TIN NHỮNG GÌ USER ĐÁNH VÀO

Một số biện pháp an toàn mà tôi biết được như sau:
* Giới hạn quyền user:
Đừng bao giờ sử dụng Default system account (sa) trong SQL server 2000 bởi vì account này có quá nhiều quyền hành. Bạn nên thiết kế 1 account để chỉ đáp ứng "đủ" những yêu cầu của website. Nếu bạn không sử dụng triggers, stored procedures, user-defined functions,... hãy Remove tất cả. Một trong những thứ hay bị Hackers lợi dụng là xp_cmdshell , xp_grantlogin. Vì vậy , hãy mạnh tay remove tất cả những gì bạn không sử dụng và không chắc sẽ sử dụng.

* Loại bỏ dấu nháy (Quotes)
Như bạn đã thấy , một số cách Injection là lợi dụng sự sơ hở của dấu ' , bằng cách tạo ra 1 hàm loại bỏ dấu ' như sau:


CODE
<% <br/> function stripQuotes(strWords)
stripQuotes = replace(strWords, "'", "''")
end function
%>



Thì câu Injection từ

CODE
select countsmilie from users where userName='john' and
userPass='' or 1=1 --'



Trở thành

CODE
select countsmilie from users where userName='john'' and
userPass=''' or 1=1 --'



Và câu SQL trên trở nên vô nghĩa.

* Cấm những từ "nhạy cảm":
Thông qua 1 số ví dụ trên , chúng ta dễ dàng nhận ra những từ nhạy cảm của SQL là ;, --, select, insert và xp_ . Bằng cách tạo ra 1 hàm để loại bỏ những từ trên:


CODE
<% <br/> function killChars(strWords)
dim badChars
dim newChars
badChars = array("select", "drop", ";", "--", "insert",
"delete", "xp_")
newChars = strWords
for i = 0 to uBound(badChars)
newChars = replace(newChars, badChars(i), "")
next
killChars = newChars
end function
%>



Sử dụng kết hợp giữa stripQuotes và killChars để loại bỏ những từ "nhạy cảm" 1 cách triệt để , hãy xem nếu câu SQL Injection có dạng :


CODE
select prodName from products where id=1; xp_cmdshell 'format
c: /q /yes '; drop database myDB; --



Sẽ trở thành:


CODE
prodName from products where id=1 cmdshell ''format c:
/q /yes '' database myDB


Và hoàn toàn vô nghĩa.

* Giới hạn những gì họ nói:
Bằng cách giới hạn những Textbox và input càng ngắn càng tốt , bạn sẽ giảm thiểu nguy cơ tối đa bị tấn công bằng Injection. Ngoài ra phải kiểm tra những input có dạng số (VD như Product=1) bằng hàm IsNumeric()..

Kết luận:

Những ví dụ trên này chỉ giúp bạn hình dung về SQL Injection và suy nghĩ như Hackers. Thật không thể nào bảo đảm được rằng có 1 cách nào đó có thể chống lại lỗi này và tự bạn phải liên tưởng ra các tình huống cụ thể để bảo vệ server của bạn.

Mặc dù trên đây chúng ta chỉ đưa ra ví dụ với Mircosoft SQL Server , nhưng lỗi SQL Injection xuất hiện trong tất cả các phiên bản của SQL như MySQL , Oracle... và không thể sửa chữa bởi nhà cung cấp vì đó là lỗi sơ xuất của người lập trình web.

Những kiến thức, ví dụ trên đây chỉ nhằm mục đích học tập, bạn không được sử dụng chúng để phá hoại. Chúng tôi không chịu trách nhiệm về bất cứ hành vi nào do người đọc bài viết này gây ra.

[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Other posts in the same group:

SQL Injection Tutorial - Sưu tầm của HVA cũ
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|