Anken - Phòng tránh SQL Injection như thế nào ? - Y!m: This_Love_No1

Màu nền
Font chữ
Font size
Chiều cao dòng

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

<%

function stripQuotes(strWords)

stripQuotes = replace(strWords, "'", "''")

end function

%>

Thì câu Injection từ

CODE

select count(*) from users where userName='john' and

userPass='' or 1=1 --'

Trở thành

CODE

select count(*) 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

<%

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.

Bạn đang đọc truyện trên: Truyen2U.Pro