Cách phòng tránh SQL Injection

Một phần của tài liệu Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng web service (Trang 34 - 69)

e) Kết luận

2.2Cách phòng tránh SQL Injection

Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh SQL. Để phòng tránh, ta có thể thực hiện ở hai mức :

2.2.1 Về phía người quản trị website

Kiểm soát chặt chẽ dữ liệu đầu vào

Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu lệnh SQL là bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ người dùng. Ví dụ, có thể giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm EscapeQuotes để thay thế các dấu nháy đơn bằng 2 dấu nháy đơn như sau :

<%

Function EscapeQuotes(sInput)

sInput = replace(sInput, " ' ", " ' ' ") EscapeQuotes = sInput

SVTH: Vĩnh Thái Cường - 49THM Page 35 End Function

%>

Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay không bằng hàm IsNumeric() để chắc chắn nó là một số integer, hay chuyển nó sang integer trước khi query SQL.

Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm như: ;, --, select, insert, xp_, … ra khỏi chuỗi dữ liệu nhập từ phía người dùng để hạn chế các tấn công dạng này :

<%

Function KillChars(sInput) dim badChars

dim newChars

badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_")

newChars = strInput

for i = 0 to uBound(badChars)

newChars = replace(newChars, badChars(i), "") next

KillChars = newChars End Function

%>

 Tắt các thông báo lỗi từ database trả về.

 Thay đổi các thói quen về đặt tên cơ sở dữ liệu, tên bảng, tên cột, đường dẫn trang quản trị … Tránh việc đặt tên bảng, tên cột dễ đoán như user, usr, username, user_name, pass, pwd, password, pass_word, … Việc này sẽ gây rất nhiều khó khăn cho kẻ tấn công, làm cho kẻ tấn công không phán đoán được tình hình, mất kiên nhẫn và bỏ cuộc.

SVTH: Vĩnh Thái Cường - 49THM Page 36  Mã hóa các dữ liệu quan trọng bằng thuật toán các thuật toán mã hóa. Thuật toán mã hóa thường được sử dụng là md5. Nên tạo thông tin tài khoản với độ phức tạp cao, dù kẻ tấn công có lấy được thì cũng không thể giải mã được.

 Đặt mật khẩu 2 lớp cho trang quản lý. Mật khẩu lớp ngoài sử dụng htaccess file với độ bảo mật cao có thể làm nản lòng bất kì một kẻ tấn công nào.

2.2.2 Về phía server

Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu

Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài khoản người dùng mà ứng dụng web đang sử dụng. Các ứng dụng thông thường nên tránh dùng đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít. Ngoài ra để tránh các nguy cơ từ SQL Injection, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.

Ngoài ra, ta có thể thay đổi "Startup and run SQL Server" dùng mức

low privilege user trong tab SQL Server Security.  Xóa các stored-procedure không sử dụng

Các stored-procedure rõ ràng rất hiệu quả và tiện dụng. Tuy nhiên một số stored-procedure trong database master mà người quản trị không có nhu cầu sử dụng, nhưng lại có thể là bàn đạp cho các cuộc tấn công SQL Injection, như : xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask ... Vì vậy, phía server nên xóa bỏ các stored procedure này đi để giảm thiểu nguy cơ bị tấn công.

SVTH: Vĩnh Thái Cường - 49THM Page 37

2.3 Tổng kết chương

Các cuộc tấn công SQL Injection thường rất đa dạng. Khả năng thành công của các cuộc tấn công dựa vào độ bảo mật của website, mức độ tư duy logic của kẻ tấn công để có thể phán đoán và xử lý được tình huống.

Các cách thức phòng chống SQL Injection ở trên chỉ một số ít, và chỉ dừng ở mức hạn chế phần lớn các cuộc tấn công SQL Injection. Cần có những phương pháp hiệu quả và tối ưu hơn trong cuộc chiến chống lại những kẻ tấn công trên mặt trận internet.

SVTH: Vĩnh Thái Cường - 49THM Page 38

CHƯƠNG 3

DỊCH VỤ MẠNG (WEB SERVICE) 3.1 Tìm hiểu về Web Service.

Khi ta xây dựng và phát triển một ứng dụng phân tán với số lượng người dùng lên đến hàng trăm, hàng nghìn người ở nhiều địa điểm khác nhau, khó khăn đầu tiên mà ta gặp phải là sự giao tiếp giữa Client và Server bị tường lửa (firewalls) và Proxy Server ngăn chặn lại.

Như ta đã biết DCOM (Distribited Component Object Model) làm việc thông qua việc gởi các thông tin dưới dạng nhị phân (binary) và chủ yếu hoạt động dựa trên giao thức TCP/IP. Thật là không dễ dàng để sử dụng DCOM trong trường hợp này.

Hình 3-1. Mô hình DCOM

Web Services có thể giúp bạn giải quyết vấn đề khó khăn nêu trên. Chúng ta có thể hiểu rằng Web Services (tạm dịch là dịch vụ web) là tập hợp các phương thức của một đối tượng mà các Client có thể gọi thực hiện.

SVTH: Vĩnh Thái Cường - 49THM Page 39 Hình 3-2. Mô hình Web Service

Web Services được xây dựng dựa trên SOAP (Simple Object Access Protocal). Không giống như DCOM, SOAP có thể được gọi thực hiện và trả về kết quả Text (theo định dạng XML) và có khả năng hoặt động "xuyên qua" tường lửa.

Ngoài khả năng ưu việt trên, Web Services có thể phối hợp hoạt động giữa các ứng dụng rất tốt. Hình minh họa trang bên là một ví dụ minh họa về sự phối hợp hoạt động giữa các ứng dụng.

Các nhà hàng, khách sạn cung cấp các Web Services cho phép đặt phòng, đặt tiệc. Đường sắt Việt Nam cung cấp các Web Services cho phép đặt vé tàu. Việt Nam Airline cung cấp các Web Services cho phép đặt vé cho các chuyến bay.

Các cơ quan, công ty, hay khách du lịch có nhu cầu tổ chức, tham gia các chuyến du lịch có thể truy cập vào website của các công ty dịch vụ lữ hành đăng ký tham gia các "tour" do họ tổ chức.

Công ty du lịch sẽ sử dụng Web Services được cung cấp đó để tiến hành đặt vé tàu lửa, máy bay và đặt phòng cho chuyến du lịch theo yêu cầu của khách hàng.

SVTH: Vĩnh Thái Cường - 49THM Page 40 Hình 3-3. Phối hợp hoạt động giữa các ứng dụng

Web Services là một chuẩn mới để xây dựng và phát triển ứng dụng phân tán, có khả năng làm việc trên mọi hệ điều hành, mở rộng khả năng phối hợp giữa các ứng dụng, có thể tái sử dụng, tăng cường sự giao tiếp giữa Client và Server thông qua môi trường Web.

SVTH: Vĩnh Thái Cường - 49THM Page 41

3.2 Đặc điểm của dịch vụ web 3.2.1 Đặc điểm 3.2.1 Đặc điểm

- Dịch vụ Web cho phép client và server tương tác được với nhau ngay cả trong những môi trường khác nhau. Ví dụ, đặt Web server cho ứng dụng trên một máy chủ chạy hệ điều hành Linux trong khi người dùng sử dụng máy tính chạy hệ điều hành Windows, ứng dụng vẫn có thể chạy và xử lý bình thường mà không cần thêm yêu cầu đặc biệt để tương thích giữa hai hệ điều hành này.

- Phần lớn kĩ thuật của Dịch vụ Web được xây dựng dựa trên mã nguồn

mở và được phát triển từ các chuẩn đã được công nhận, ví dụ như XML.

- Một Dịch vụ Web bao gồm có nhiều mô-đun và có thể công bố lên mạng Internet.

- Là sự kết hợp của việc phát triển theo hướng từng thành phần với những lĩnh vực cụ thể và cơ sở hạ tầng Web, đưa ra những lợi ích cho cả doanh nghiệp, khách hàng, những nhà cung cấp khác và cả những cá nhân thông qua mạng Internet.

- Một ứng dụng khi được triển khai sẽ hoạt động theo mô hình client- server. Nó có thể được triển khai bởi một phần mềm ứng dụng phía server ví dụ như PHP, Oracle Application server hay Microsoft.Net… - Ngày nay dịch vụ Web đang rất phát triển, những lĩnh vực trong cuộc

sống có thể áp dụng và tích hợp dịch vụ Web là khá rộng lớn như dịch vụ chọn lọc và phân loại tin tức (hệ thống thư viện có kết nối đến web portal để tìm kiếm các thông tin cần thiết); ứng dụng cho các dịch vụ du lịch (cung cấp giá vé, thông tin về địa điểm…), các đại lý bán hàng qua mạng, thông tin thương mại như giá cả, tỷ giá hối đoái, đấu giá qua

SVTH: Vĩnh Thái Cường - 49THM Page 42 mạng…hay dịch vụ giao dịch trực tuyến (cho cả B2B và B2C) như đặt vé máy bay, thông tin thuê xe…

- Các ứng dụng có tích hợp dịch vụ Web đã không còn là xa lạ, đặc biệt trong điều kiện thương mại điện tử đang bùng nổ và phát triển không ngừng cùng với sự lớn mạnh của Internet. Bất kì một lĩnh vực nào trong cuộc sống cũng có thể tích hợp với dịch vụ Web, đây là cách thức kinh doanh và làm việc có hiệu quả bởi thời đại ngày nay là thời đại của truyền thông và trao đổi thông tin qua mạng. Do vậy, việc phát triển và tích hợp các ứng dụng với dịch vụ Web đang được quan tâm phát triển là điều hoàn toàn dễ hiểu.

3.2.2 Ưu và nhược điểm

Ưu điểm :

- Dịch vụ Web cung cấp khả năng hoạt động rộng lớn với các ứng dụng

phần mềm khác nhau chạy trên những nền tảng khác nhau.

- Sử dụng các giao thức và chuẩn mở. Giao thức và định dạng dữ liệu dựa trên văn bản (text), giúp các lập trình viên dễ dàng hiểu được.

- Nâng cao khả năng tái sử dụng.

- Thúc đẩy đầu tư các hệ thống phần mềm đã tồn tại bằng cách cho phép các tiến trình/chức năng nghiệp vụ đóng gói trong giao diện dịch vụ Web.

- Tạo mối quan hệ tương tác lẫn nhau và mềm dẻo giữa các thành phần

trong hệ thống, dễ dàng cho việc phát triển các ứng dụng phân tán. - Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống, hạ giá

thành hoạt động, phát triển hệ thống nhanh và tương tác hiệu quả với hệ thống của các doanh nghiệp khác.

SVTH: Vĩnh Thái Cường - 49THM Page 43  Nhược điểm :

- Những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của Dịch vụ Web, giao diện không thay đổi, có thể lỗi nếu một máy khách không được nâng cấp, thiếu các giao thức cho việc vận hành.

- Có quá nhiều chuẩn cho dịch vụ Web khiến người dùng khó nắm bắt. - Phải quan tâm nhiều hơn đến vấn đề an toàn và bảo mật.

3.2.3 Kiến trúc của dịch vụ web

Dịch vụ Web gồm có 3 chuẩn chính: SOAP (Simple Object Access Protocol), WSDL (Web Service Description Language) và UDDI (Universal Description, Discovery, and Integration). Hình 1 mô tả chồng giao thức của dịch vụ Web, trong đó UDDI được sử dụng để đăng ký và khám phá dịch vụ Web đã được miêu tả cụ thể trong WSDL. Giao tác UDDI sử dụng SOAP để nói chuyện với UDDI server, sau đó các ứng dụng SOAP yêu cầu một dịch vụ Web. Các thông điệp SOAP được gửi đi chính xác bởi HTTP và TCP/IP.

SVTH: Vĩnh Thái Cường - 49THM Page 44 Chồng giao thức dịch vụ Web là tập hợp các giao thức mạng máy tính được sử dụng để định nghĩa, xác định vị trí, thi hành và tạo nên dịch vụ Web tương tác với những ứng dụng hay dịch vụ khác. Chồng giao thức này có 4 thành phần chính :

- Dịch vụ vận chuyển (Service Transport): có nhiệm vụ truyền thông điệp giữa các ứng dụng mạng, bao gồm những giao thức như HTTP, SMTP, FTP, JSM và gần đây nhất là giao thức thay đổi khổi mở rộng (Blocks Extensible Exchange Protocol- BEEP).

- Thông điệp XML: có nhiệm vụ giải mã các thông điệp theo định dạng

XML để có thể hiểu được ở mức ứng dụng tương tác với người dùng. Hiện tại, những giao thức thực hiện nhiệm vụ này là XML-RPC, SOAP và REST.

- Mô tả dịch vụ: được sử dụng để miêu tả các giao diện chung cho một dịch vụ Web cụ thể. WSDL thường được sử dụng cho mục đích này, nó là một ngôn ngữ mô tả giao tiếp và thực thi dựa trên XML. Dịch vụ Web sẽ sử dụng ngôn ngữ này để truyền tham số và các loại dữ liệu cho các thao tác và chức năng mà dịch vụ Web cung cấp.

- Khám phá dịch vụ: tập trung dịch vụ vào trong một nơi được đăng ký, từ đó giúp một dịch vụ Web có thể dễ dàng khám phá ra những dịch vụ nào đã có trên mạng, tốt hơn trong việc tìm kiếm những dịch vụ khác để tương tác. Một dịch vụ Web cũng phải tiến hành đăng ký để các dịch vụ khác có thể truy cập và giao tiếp. Hiện tại, UDDI API thường được sử dụng để thực hiện công việc này.

SVTH: Vĩnh Thái Cường - 49THM Page 45 Hình 3-6. Kiến trúc Web Service

Trong đó, tầng giao thức tương tác dịch vụ (Service Communication Protocol) với công nghệ chuẩn là SOAP. SOAP là giao thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, cho phép người dùng triệu gọi một dịch vụ từ xa thông qua một thông điệp XML. Ngoài ra, để các dịch vụ có tính an toàn, toàn vẹn và bảo mật thông tin, trong kiến trúc dịch vụ Web, chúng ta có thêm các tầng Policy, Security, Transaction, Management.

3.2.4 Các thành phần của dịch vụ web

3.2.4.1 XML – eXtensible Markup Language

Là một chuẩn mở do W3C đưa ra cho cách thức mô tả dữ liệu, nó được sử dụng để định nghĩa các thành phần dữ liệu trên trang web và cho những tài liệu B2B. Về hình thức, XML hoàn toàn có cấu trúc thẻ giống như ngôn ngữ HTML nhưng HTML định nghĩa thành phần được hiển thị như thế nào thì XML lại định nghĩa những thành phần đó chứa cái gì. Với XML, các thẻ có

SVTH: Vĩnh Thái Cường - 49THM Page 46 thể được lập trình viên tự tạo ra trên mỗi trang web và được chọn là định dạng thông điệp chuẩn bởi tính phổ biến và hiệu quả mã nguồn mở.

Do dịch vụ Web là sự kết hợp của nhiều thành phần khác nhau nên nó sử dụng các tính năng và đặc trưng của các thành phần đó để giao tiếp. XML là công cụ chính để giải quyết vấn đề này và là kiến trúc nền tảng cho việc xây dựng một dịch vụ Web, tất cả dữ liệu sẽ được chuyển sang định dạng thẻ XML. Khi đó, các thông tin mã hóa sẽ hoàn toàn phù hợp với các thông tin theo chuẩn của SOAP hoặc XML-RPC và có thể tương tác với nhau trong một thể thống nhất.

3.2.4.2 WSDL - Web Service Description Language

WSDL định nghĩa cách mô tả dịch vụ Web theo cú pháp tổng quát của XML, bao gồm các thông tin:

- Tên dịch vụ.

- Giao thức và kiểu mã hóa sẽ được sử dụng khi gọi các hàm của dịch vụ Web.

- Loại thông tin: thao tác, tham số, những kiểu dữ liệu (có thể là giao diện của dịch vụ Web cộng với tên cho giao diện này).

Một WSDL hợp lệ gồm hai phần: phần giao diện (mô tả giao diện và phương thức kết nối) và phần thi hành mô tả thông tin truy xuất CSDL. Cả hai phần này sẽ được lưu trong 2 tập tin XML tương ứng là tập tin giao diện dịch vụ và tập tin thi hành dịch vụ. Giao diện của một dịch vụ Web được miêu tả trong phần này đưa ra cách thức làm thế nào để giao tiếp qua dịch vụ Web. Tên, giao thức liên kết và định dạng thông điệp yêu cầu để tương tác với dịch vụ Web được đưa vào thư mục của WSDL.

Một phần của tài liệu Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng web service (Trang 34 - 69)