X

Bảo mật website trước lỗi sql injection

SQL Injection là gì ?

SQL Injection là một trong những cơ chế tấn công nhiều trang web được sử dụng bởi tin tặc để ăn cắp dữ liệu từ các tổ chức. Nó có lẽ là một trong những ứng dụng kỹ thuật tấn công phổ biến nhất được sử dụng ngày hôm nay lớp.

Đây là kiểu tấn công mà lợi dụng không đúng mã hóa của các ứng dụng web của bạn cho phép hacker để tiêm lệnh SQL vào nói một hình thức đăng nhập để cho phép họ được truy cập vào dữ liệu tổ chức trong vòng cơ sở dữ liệu của bạn. 

Trong bản chất, SQL Injection phát sinh bởi vì các lĩnh vực có sẵn cho người dùng nhập vào câu lệnh SQL cho phép đi qua và truy vấn cơ sở dữ liệu trực tiếp.

Xem thêm: Sql injection là gì

SQL Injection: Một Giải thích sâu

Ứng dụng web cho phép khách truy cập website hợp pháp để nộp và lấy dữ liệu vào / từ một cơ sở dữ liệu qua Internet bằng cách sử dụng trình duyệt web ưa thích của họ. Cơ sở dữ liệu là trung tâm của các trang web hiện đại - họ lưu trữ dữ liệu cần thiết cho các trang web để cung cấp nội dung cụ thể cho du khách và làm cho thông tin cho khách hàng, nhà cung cấp, nhân viên và một loạt các bên liên quan. Người sử dụng các thông tin, tài chính và thanh toán thông tin, số liệu thống kê của công ty tất cả có thể được thường trú trong một cơ sở dữ liệu và truy cập của người sử dụng hợp pháp thông qua off-the-shelf và các ứng dụng web tùy chỉnh. Web ứng dụng và cơ sở dữ liệu cho phép bạn thường xuyên hoạt động kinh doanh của bạn.

SQL Injection là kỹ thuật hacking mà cố gắng để vượt qua các câu lệnh SQL (báo cáo) thông qua một ứng dụng web để thực hiện bởi các cơ sở dữ liệu phụ trợ. Nếu không khử trùng đúng cách, các ứng dụng web có thể dẫn đến các cuộc tấn công SQL Injection, cho phép tin tặc để xem thông tin từ cơ sở dữ liệu và / hoặc thậm chí xóa sạch nó ra.

tính năng này như các trang đăng nhập, hỗ trợ và các hình thức yêu cầu sản phẩm, hình thức phản hồi, các trang tìm kiếm, xe đẩy mua sắm và giao hàng chung của nội dung động, hình dạng các trang web hiện đại và cung cấp các doanh nghiệp với các phương tiện cần thiết để giao tiếp với khách hàng tiềm năng và khách hàng. Những tính năng này là tất cả các trang web ví dụ về các ứng dụng web có thể được, hoặc mua các off-the-shelf hay phát triển như các chương trình riêng biệt.

Những tính năng này là tất cả các trang web dễ bị tấn công SQL Injection phát sinh bởi vì các lĩnh vực có sẵn cho người dùng nhập vào câu lệnh SQL cho phép đi qua và truy vấn cơ sở dữ liệu trực tiếp.

SQL Injection: Một ví dụ đơn giản

Đi một trang đăng nhập đơn giản mà một người sử dụng hợp pháp sẽ nhập tên đăng nhập của mình và kết hợp mật khẩu để vào một khu vực an toàn để xem chi tiết cá nhân của mình hoặc tải lên ý kiến của mình trong một diễn đàn. 

Khi người sử dụng hợp pháp trình chi tiết của ông, một truy vấn SQL được tạo ra từ những chi tiết và nộp cho cơ sở dữ liệu để xác minh. Nếu hợp lệ, người dùng được phép truy cập. Nói cách khác, các ứng dụng web điều khiển các trang đăng nhập sẽ liên lạc với cơ sở dữ liệu thông qua một loạt các lệnh lên kế hoạch để xác minh tên người dùng và mật khẩu kết hợp. Xác minh, người sử dụng hợp pháp là cấp quyền truy cập thích hợp.

Thông qua SQL Injection, các hacker có thể đầu vào cụ thể crafted lệnh SQL với mục đích bỏ qua các rào cản mẫu đăng nhập và nhìn thấy những gì nằm phía sau nó. Điều này chỉ có thể nếu đầu vào không được khử trùng đúng cách (tức là, thực hiện bất khả xâm phạm) và được gửi trực tiếp với các truy vấn SQL vào cơ sở dữ liệu. Các lỗ hổng SQL Injection cung cấp phương tiện cho hacker một để giao tiếp trực tiếp với cơ sở dữ liệu. 

Các công nghệ dễ bị tổn thương để tấn công này là các ngôn ngữ script động bao gồm ASP, ASP.NET, PHP, JSP, và CGI. Tất cả các kẻ tấn công cần thực hiện một cuộc tấn công hack SQL Injection là một trình duyệt web, kiến thức về các truy vấn SQL và làm việc đoán sáng tạo để bàn quan trọng và tên trường. Sự đơn giản tuyệt của SQL Injection đã tiếp nhiên liệu phổ biến của nó.

Các nội dung khác:

Tại sao là nó có thể vượt qua truy vấn SQL vào cơ sở dữ liệu mặc dù đây là ẩn đằng sau một bức tường lửa?

  • Là cơ sở dữ liệu của tôi có nguy cơ để SQL Injection?
  • Tác động của SQL Injection là gì?

Ví dụ về một tấn công SQL Injection

Làm thế nào để ngăn chặn các cuộc tấn công SQL Injection?

Tại sao là nó có thể vượt qua các truy vấn SQL trực tiếp đến một cơ sở dữ liệu đó là ẩn đằng sau một bức tường lửa và bảo mật bất kỳ cơ chế nào khác không?

Bức tường lửa và cơ chế phát hiện xâm nhập tương tự cung cấp ít hoặc không có quốc phòng chống lại quy mô đầy đủ các cuộc tấn công SQL Injection web.

Từ trang web của bạn cần phải được công khai, cơ chế bảo mật sẽ cho phép công chúng web lưu lượng truy cập để giao tiếp với ứng dụng web của bạn / s (thường trên cổng 80/443). Các ứng dụng web đã truy cập mở cơ sở dữ liệu để trở về (cập nhật) các yêu cầu (thay đổi) thông tin.

Trong SQL Injection, hacker sử dụng các truy vấn SQL và sáng tạo để có được cơ sở dữ liệu của dữ liệu nhạy cảm của công ty thông qua ứng dụng web.

Truy vấn SQL hay cấu trúc ngôn ngữ là ngôn ngữ máy tính cho phép bạn lưu trữ, thao tác, và lấy dữ liệu lưu trữ trong một cơ sở dữ liệu quan hệ (hay một tập hợp các bảng có tổ chức và cấu trúc dữ liệu). SQL là, trên thực tế, cách duy nhất mà một ứng dụng web (và người sử dụng) có thể tương tác với cơ sở dữ liệu. Ví dụ về các cơ sở dữ liệu quan hệ bao gồm Oracle, Microsoft Access, MS SQL Server, MySQL, và Filemaker Pro, tất cả đều sử dụng SQL như là khối xây dựng cơ bản của họ. 

SQL bao gồm các lệnh SELECTINSERTDELETE và DROP TABLEDROP TABLE là đáng ngại vì nó là âm thanh và trong thực tế sẽ loại bỏ các bảng với một tên cụ thể.

Trong kịch bản ích hợp pháp của các ví dụ trang đăng nhập trên, câu lệnh SQL lên kế hoạch cho ứng dụng web có thể trông giống như sau: 

SELECT count (*)
FROM users_list_table
WHERE username = 'FIELD_USERNAME'
AND password = 'FIELD_PASSWORD' 

Trong tiếng Anh đơn giản, lệnh này SQL (từ ứng dụng web) chỉ thị các cơ sở dữ liệu để phù hợp với tên người dùng và nhập mật khẩu của người sử dụng hợp pháp để kết hợp nó đã được lưu trữ.

Mỗi loại ứng dụng web là khó khăn cụ thể mã hoá với các truy vấn SQL mà nó sẽ thực hiện khi thực hiện hợp pháp của mình chức năng và giao tiếp với cơ sở dữ liệu. Nếu bất kỳ lĩnh vực đầu vào của các ứng dụng web không được khử trùng đúng cách, một hacker có thể chèn thêm các câu lệnh SQL mà mở rộng phạm vi của các câu lệnh SQL ứng dụng web sẽ thực hiện, do đó sẽ vượt ra ngoài dự định ban đầu thiết kế và chức năng.

Một hacker do đó sẽ có một kênh giao tiếp rõ ràng (hoặc, trong điều kiện giáo dân, một đường hầm) để không phân biệt cơ sở dữ liệu của tất cả các hệ thống phát hiện xâm nhập, thiết bị an ninh mạng được cài đặt trước khi máy chủ vật lý cơ sở dữ liệu.

Là cơ sở dữ liệu của bạn có nguy cơ để SQL Injection?

SQL Injection là một trong những lớp ứng dụng phổ biến nhất tại các cuộc tấn công đang được sử dụng trên Internet. Mặc dù thực tế rằng nó là tương đối dễ dàng để bảo vệ chống SQL Injection, có một số lượng lớn các ứng dụng web mà còn dễ bị tổn thương.

Theo Web Application Security Consortium (WASC) 9% của tổng số sự cố hack báo cáo trong các phương tiện truyền thông cho đến ngày 27 tháng 7 2006 là do SQL Injection. dữ liệu gần đây từ nghiên cứu của chúng tôi cho thấy rằng khoảng 50% của các trang web chúng tôi đã quét năm nay rất nhạy cảm với các lỗ hổng SQL Injection.

Nó có thể là khó để trả lời câu hỏi liệu trang web của bạn và các ứng dụng web là dễ bị SQL Injection đặc biệt là nếu bạn không phải là một lập trình viên hoặc bạn không phải là người đã mã hóa các ứng dụng web của bạn. 

kinh nghiệm của chúng tôi sẽ đưa chúng ta để tin rằng có một cơ hội đáng kể rằng dữ liệu của bạn đã được nguy cơ từ SQL Injection.

Cho dù kẻ tấn công có thể nhìn thấy các dữ liệu được lưu trữ trong cơ sở dữ liệu hay không, thực sự phụ thuộc vào cách trang web của bạn được mã hoá để hiển thị các kết quả của các truy vấn được gửi đi. Điều chắc chắn là các kẻ tấn công sẽ có thể thực thi các lệnh SQL độc đoán trên hệ thống dễ bị tổn thương, hoặc để thỏa hiệp đó hoặc người nào khác để có được thông tin. 

Nếu không đúng mã hóa, sau đó bạn chạy các nguy cơ của việc có dữ liệu khách hàng của bạn và công ty bị tổn hại.

Điều gì một kẻ tấn công lợi truy cập vào cũng phụ thuộc vào mức độ an ninh được thiết lập bởi cơ sở dữ liệu. Cơ sở dữ liệu có thể được thiết lập để hạn chế các lệnh nhất định. Một truy cập đọc thông thường được kích hoạt để sử dụng bởi ứng dụng web trở lại kết thúc.

Ngay cả khi kẻ tấn công không thể sửa đổi hệ thống, ông vẫn sẽ có thể đọc thông tin giá trị.

 

Tác động của SQL Injection là gì?

Một khi nhận ra rằng kẻ tấn công một hệ thống được dễ bị SQL Injection, ông có thể tiêm SQL Query / lệnh thông qua một trường mẫu đầu vào. Điều này tương đương để bàn giao cơ sở dữ liệu của bạn kẻ tấn công và cho phép anh thực hiện bất kỳ lệnh DROP TABLE SQL bao gồm cả cơ sở dữ liệu! 

Một kẻ tấn công có thể thực hiện báo cáo tùy tiện SQL trên hệ thống dễ bị tổn thương. Điều này có thể thỏa hiệp sự toàn vẹn của cơ sở dữ liệu của bạn và / hoặc lộ thông tin nhạy cảm. Tùy thuộc vào cơ sở dữ liệu back-end sử dụng, các lỗ hổng SQL injection dẫn đến mức độ khác nhau của dữ liệu / hệ thống truy cập cho kẻ tấn công. Nó có thể là có thể thao tác truy vấn hiện tại, để UNION (được sử dụng để chọn thông tin liên quan từ hai bảng) dữ liệu tùy tiện, sử dụng subselects, hoặc nối thêm các truy vấn thêm. 

Trong một số trường hợp, nó có thể được thể đọc hoặc viết ra tác phẩm, hoặc để thực thi các lệnh trình bao trên hệ điều hành cơ bản. Một số máy chủ SQL như Microsoft SQL Server chứa lưu giữ và mở rộng thủ tục (cơ sở dữ liệu các chức năng máy chủ). Nếu kẻ tấn công có thể được truy cập vào các thủ tục này, nó có thể spell thiên tai.

Thật không may tác động của SQL Injection chỉ phát hiện khi trộm được phát hiện. Dữ liệu đang được vô tình bị đánh cắp thông qua các hack tấn công tất cả các thời gian. Các chuyên gia nhiều hơn của các tin tặc hiếm khi bị bắt.

Ví dụ về một cuộc tấn công SQLInjection

Đây là một mẫu hình thức cơ bản HTML với hai đầu vào, đăng nhập và mật khẩu. 

<form method="post" action="http://sql.hvngroups.net">
name="tfUName" <input type="text" id="tfUName">
name="tfUPass" <input type="password" id="tfUPass">
</form>

Cách đơn giản nhất cho login.asp để làm việc được bằng cách xây dựng một truy vấn cơ sở dữ liệu trông như thế này:

SELECT id
FROM login
WHERE username = '$username' AND password = '$password'

Nếu các biến $ username và $ password được yêu cầu trực tiếp từ đầu vào của người dùng, đây có thể dễ dàng bị xâm nhập. Giả sử chúng ta đã "Joe" như một tên người dùng và rằng chuỗi sau được cung cấp như một mật khẩu: bất cứ điều gì 'OR' x '=' x

SELECT id
FROM login WHERE username = 'LPTech'
AND password = 'admin' OR '1' = '1'

Khi các đầu vào của các ứng dụng web không khử trùng đúng cách, việc sử dụng dấu ngoặc kép đơn đã chuyển lệnh WHERE SQL vào một điều khoản hai thành phần. 

Các '1' = '1' bảo đảm một phần là đúng bất kể những gì các Phần thứ nhất.

Điều này sẽ cho phép kẻ tấn công để vượt qua hình thức đăng nhập mà không thực sự biết một tên người dùng mật khẩu hợp lệ!

Làm thế nào để ngăn chặn  SQL Injection?

Bức tường lửa và cơ chế phát hiện xâm nhập tương tự cung cấp quốc phòng chống lại các cuộc tấn công ít web quy mô đầy đủ. Từ trang web của bạn cần phải được công khai, cơ chế bảo mật sẽ cho phép công chúng web lưu lượng truy cập để giao tiếp với máy chủ cơ sở dữ liệu của bạn thông qua ứng dụng web. Đó không phải là những gì họ đã được thiết kế để làm gì?

Vá lỗi máy chủ, cơ sở dữ liệu của bạn, ngôn ngữ lập trình và hệ điều hành là rất quan trọng nhưng sẽ không có cách nào là cách tốt nhất để ngăn ngừa tấn công SQL Injection.