Sql injection là một khái niệm quen thuộc với các lập trình viên bởi nó thuộc một trong những kiểu tấn công website nguy hiểm nhất hiện nay và gây ra nhiều thiệt hại cho các doanh nghiệp. Tuy nhiên, vẫn có nhiều người chưa nhận thức được sự nguy hiểm của nó. Bài viết này Ngọc Thắng sẽ giải đáp cho bạn đọc Sql injection là gì? Chúng nguy hiểm đến mức nào và cách phòng tránh bị tấn công. Cùng xem ngay nhé!
Sql injection là gì?
MỤC LỤC
Sql injection (SQLi) là một kỹ thuật hack web bằng cách lợi dụng các lỗ hổng và truy vấn trong các kênh đầu vào của ứng dụng web để chèn thêm một đoạn SQL, làm sai lệch câu truy vấn ban đầu.
Mục đích nhằm khai thác, ăn cắp hay xáo trộn các thông tin, dữ liệu nằm trong phần phụ trợ của web – nơi có những dữ liệu có giá trị và nhạy cảm nhất.
Sql injection cho phép những kẻ tấn công website có khả năng thực hiện được các thao tác tương tự như một người quản trị web. Điều này không những gây cản trở sự hoạt động của ứng dụng mà thậm chí họ còn chiếm được quyền truy cập quản trị vào các máy chủ.
Ví dụ thực tiễn về SQL Injection
Ví dụ, trong form đăng nhập, người dùng nhập dữ liệu, trong trường tìm kiếm người dùng nhập văn bản tìm kiếm, trong biểu mẫu lưu dữ liệu, người dùng nhập dữ liệu cần lưu. Tất cả các dữ liệu được chỉ định này đều đi vào cơ sở dữ liệu.
Thay vì nhập dữ liệu đúng, kẻ tấn công lợi dụng lỗ hổng để insert và thực thi các câu lệnh SQL bất hợp pháp để lấy dữ liệu của người dùng… SQL Injection được thực hiện với ngôn ngữ lập trình SQL. SQL (Structured Query Language) được sử dụng để quản lý dữ liệu được lưu trữ trong toàn bộ cơ sở dữ liệu.
Tuy nhiên ngày nay chứng ta thường làm việc trên những framework hiện đại. Các framework đều đã được test cẩn thận để phòng tránh các lỗi, trong đó có SQL Injection.
Các loại SQL Injection là gì?
SQL Injection có ba loại: In-band SQLi (Classic), Inferential SQLi (Blind) và Out-of-band SQLi. Bạn có thể phân loại các kiểu SQL injection dựa trên phương pháp sử dụng để truy cập dữ liệu backend, hoặc khả năng gây hại của chúng.
1. In-band SQLi
Kẻ tấn công sử dụng cùng một kênh liên lạc để khởi động các cuộc tấn công và thu thập các kết quả. Tính đơn giản và hiệu quả của In-band SQLi khiến nó trở thành một trong những kiểu tấn công SQLi phổ biến nhất hiện nay. Có hai biến thể phụ của phương pháp này:
Error-based SQLi – Hacker sẽ thực hiện các hành động làm cơ sở dữ liệu tạo ra thông báo lỗi. Hacker có thể dùng dữ liệu được cung cấp bởi các thông báo lỗi này để thu thập thông tin về cấu trúc của cơ sở dữ liệu.
Union-based SQLi – Kỹ thuật này lợi dụng toán tử UNION SQL để kết hợp nhiều câu lệnh được tạo bởi Cơ sở dữ liệu để nhận được một HTTP response. Response này có thể chứa dữ liệu mà kẻ tấn công có thể sử dụng.
2. Inferential (Blind) SQLi
Hacker sẽ gửi các data payload đến server và quan sát phản ứng, hành vi của server để tìm hiểu về cấu trúc của nó. Phương pháp này được gọi là Blind SQLi vì dữ liệu không được chuyển từ Cơ sở dữ liệu trang web đến hacker. Do đó hacker không thể nhìn thấy thông tin về cuộc tấn trong in-band.
Blind SQL injection dựa trên phản ứng và các hành vi hoạt động của server. Do đó chúng thường thực thi chậm hơn, nhưng có thể gây ảnh hưởng tương tự. Blind SQL injection có thể được phân loại thành:
– Boolean – Hacker gửi một truy vấn SQL đến Cơ sở dữ liệu, làm ứng dụng trả về một kết quả. Kết quả có thể khác nhau tùy vào truy vấn đúng hay sai. Dựa trên kết quả, thông tin trong HTTP response sẽ sửa đổi hoặc không. Sau đó, hacker có thể tìm hiểu xem thông báo tạo ra kết quả có đúng không.
– Time-based – Hacker sẽ gửi một truy vấn SQL đến Cơ sở dữ liệu, làm cho Cơ sở dữ liệu đợi (trong vài giây) trước khi có thể hoạt động. Sau đó, hacker có thể xem từ thời gian Cơ sở dữ liệu cần để phản hồi, một truy vấn là đúng hay sai. Dựa trên kết quả, một HTTP repsonse sẽ được tạo ra. Vì vậy hacker có thể tìm ra thông báo mà chúng đã sử dụng trả về đúng hay sai, không cần dựa vào dữ liệu từ Cơ sở dữ liệu.
3. Out-of-band SQLi
Hacker chỉ có thể thực hiện hình thức này khi có một số tính năng nhất định được kích hoạt trên server Cơ sở dữ liệu được ứng dụng web sử dụng. Hình thức này chủ yếu được dùng để thay thế cho khác kỹ thuật in-band và inferential SQLi.
Out-of-band SQLi được thực hiện khi hacker không thể sử dụng cùng một kênh để khởi động tấn công và thu thập thông tin. Hoặc do server quá chậm, không ổn định tấn thực hiện hành động. Các kỹ thuật này dựa vào khả năng server tạo ra các DNS hay HTTP request để chuyển dữ liệu cho kẻ tấn công.
Sự nguy hiểm của lỗi SQL Injection
SQL Injection là gì? Hiện nay, SQL Injection được xem là kiểu tấn công vô cùng nguy hiểm vì:
- SQL Injection có thể hack được tài khoản cá nhân.
- Thực hiện sao chép hoặc ăn cắp các dữ liệu của hệ thống cũng như trang web.
- SQL Injection có thể thay đổi các dữ liệu nhạy cảm được tích hợp của hệ thống.
- SQL Injection xóa được các dữ liệu quan trọng và dữ liệu mang tính nhạy cảm của toàn bộ hệ thống.
- Người sử dụng có thể đăng nhập vào ứng dụng một cách dễ dàng với tư cách của người dùng khác. Kể cả việc đăng nhập với tư cách là một quản trị viên cũng được thực hiện một cách dễ dàng.
- Khi lỗi SQL Injection xuất hiện thì người sử dụng có thể xem mọi thông tin cá nhân thuộc về những người khác. Ví dụ như: chi tiết về hồ sơ cá nhân của họ, chi tiết về các giao dịch của họ, chi tiết về các truy cập của họ,…
- Khi lỗi SQL Injection xảy ra, thì mọi người dùng đều có thể sửa đổi cấu trúc của dữ liệu một cách dễ dàng, thậm chí họ còn có thể xóa các bảng nằm trong cơ sở dữ liệu của ứng dụng.
Người dùng hoàn toàn có thể kiểm soát máy chủ cơ sở dữ liệu cũng như thực hiện các lệnh thay đổi theo ý muốn của chính mình.
Ví dụ về một cuộc tấn công SQL Injection
Cuộc tấn công SQL Injection sẽ được thực hiện một cách dễ dàng với ví dụ như sau: Việc thực hiện kiểm tra các lỗ hổng này có thể được thực hiện dễ dàng hơn. Đôi khi thì bạn có thể nhập ký hiệu ‘ hoặc “ vào các trường kiểm tra. Thì, nó đều sẽ được trả về với bất kỳ thông báo bất ngờ khác hoặc bất thường khác.
Khi đó, bạn hoàn toàn có thể chắc chắn rằng SQL Injection sẽ khả thi cho trường hợp đó. Nếu như người dùng không còn nhập như bình thường nữa mà họ đã thêm một dấu nháy ‘ hoặc “ thì dòng code của bạn sẽ bị lỗi một cách dễ dàng. Hoặc họ có thể thực hiện sửa thành một câu truy vấn luôn đúng hoặc chèn thêm một câu lệnh truy vấn ở phía sau.
Các phần dễ bị tấn công trên website
Các phần dễ bị SQL Injection tấn công là những phần gì?
- Form đăng nhập
- Form tìm kiếm
- Form nhận xét
- Bất kì trường lưu hoặc trường đầu vào của dữ liệu
- Liên kết của website
Cần lưu ý là trong khi thử nghiệm chống lại tấn công này là không thể chỉ kiểm tra một hoặc một vài trường bởi vì một trường có thể được bảo vệ chống lại SQL Injection, nhưng một trường khác thì không. Do đó, điều quan trọng là đừng quên kiểm tra tất cả các trường của trang web.
Cách thức website bị tấn công SQL Injection
Các cuộc tấn công website bằng SQL injection là gì? Hacker sẽ gửi tới máy chủ bộ SQL độc hại bằng cách truyền qua thông tin đăng nhập, truy cập của người dùng vào website.
Chính vì thế những lệnh inputs đều dễ dàng bị lợi dụng làm kênh truyền SQL đen tới hệ thống quản trị và máy chủ. Đây là hình thức xâm nhập vô cùng đơn giản, chỉ qua vài bước hacker đã có thể tấn công và khai thác thông tin website, nắm quyền quản trị ở cấp độ cao nhất.
Nếu nghiêm trọng hơn hacker có thể xâm nhập cả vào hệ điều hành của máy chủ để điều khiển desktop từ xa, phát tán mã độc tới nhiều máy khác trong mạng lưới kết nối.
Cách phòng tránh tấn công SQL Injection
Chúng ta cần biết được cách phòng chống SQL injection hiệu quả. Vì SQL Injection có vector chính là các kênh input của người dùng. Nên cách tiếp cận tốt nhất là kiểm soát và xem xét input của người dùng để theo dõi các kiểu tấn công. Các developer cũng có thể tránh các lỗ hổng bảo mật bằng cách áp dụng các cách phòng chống SQL injection sau:
1. Luôn xác minh input của người dùng
Nhiều người cho rằng sử dụng Base64 là đã đảm bảo mã hoá thông tin và phòng chống mã độc xâm nhập qua thông tin người dùng. Tuy nhiên những mã hoá này dễ dàng bị phá bỏ bởi những thủ thuật đơn giản. Chính vì thế bất kỳ thông tin input nào của người dùng cũng được xác minh kỹ lưỡng, tránh trường hợp “mất bò mới lo làm chuồng”.
2. Xác nhận chuỗi input đến từ máy chủ
Đây là quá trình tự động xác minh dữ liệu do người dùng nhập vào, đảm bảo mã không chứa phần tử độc hại trước khi đến với máy chủ. Hiện nay có các nền tảng hỗ trợ vấn đề này khá tốt như ASP.NET, tự thêm vào những ký hiệu đặc trưng nhằm phân biệt dữ liệu sạch và các nguồn dữ liệu chứa mã độc.
3. Sử dụng câu lệnh tham số
Khi tên của placeholder được thêm vào các lệnh SQL sẽ xảy ra hiệu ứng thay thế tham số do người dùng input hiệu quả. Dù bạn chưa biết SQL injection là gì thì ngay bây giờ đây có thể thực hiện cách này để bảo vệ web của mình.
Cách diệt tận gốc các lỗ hổng SQL Injection
SQL injection là gì có lẽ đến đây bạn đọc đã hiểu rất rõ về định nghĩa và những nguy hiểm mà chúng có thể đem lại cho website của bạn.
Dù có cài đặt bảo mật cho website ở mức cao đi nữa, bạn vẫn nên sẵn sàng tới những ngày có thể bị tấn công SQL injection. Dưới đây là một số biện pháp giúp bạn đối mặt với các trường hợp xấu nhất đó.
- Nên sử dụng những tài khoản chỉ có quyền truy cập độc – viết đơn giản để vào từng cơ sở dữ liệu riêng biệt. Trong trường hợp web bị tấn công, phạm vi thiệt hại chỉ nằm trong ranh giới cơ sở dữ liệu đó.
- Với máy chủ MS SQL, bạn nên sử dụng mô hình Windows Authentication để hạn chế quyền truy cập của hacker vào cơ sở dữ liệu nhằm đảm bảo họ không thể sử dụng các kênh khác để truy cập vào cơ sở dữ liệu của bạn.
- Mã hóa dữ liệu nhạy cảm trong cơ sở dữ liệu (bao gồm mật khẩu, các câu hỏi và câu trả lời bảo mật, dữ liệu tài chính, thông tin y tế,…). Điều này sẽ giúp kẻ tấn công không thể khai thác được thông tin ngay trước khi bạn phát hiện ra những dấu hiệu sai phạm.
- Không lưu trữ dữ liệu nhạy cảm nếu không cần tới nó sẽ là cách tốt nhất tránh tình trạng bị hack mất.
Lời kết
Hy vọng với bài viết này, bạn đã có thêm những kiến thức mới về Sql injection và hiểu được Sql injection là gì để có thể tìm cách phù hợp để ngăn chặn được sự tấn công của nó. Nếu bạn là một nhà quản trị website thì việc tìm hiểu về những kiến thức này là rất cần thiết để có thể đảm bảo được sự an toàn cho các dữ liệu trong ứng dụng web của mình.
Hiện nay Ngọc Thắng đang cung cấp các dịch vụ như thiết kế website, dịch vụ SEO tổng thể, SEO từ khóa chuyên nghiệp và hiệu quả đã được rất nhiều khách hàng sử dụng giúp mang lại sức mạnh và thứ hạng tốt cho website của bạn.
Nếu còn bất kỳ thắc mắc gì về các thông tin mà chúng tôi chia sẻ bên trên hay bạn đang tìm kiếm một dịch vụ webiste uy tín thì đừng ngần ngại hãy liên hệ ngay với chúng tôi để được tư vấn thêm nhé!
Với nhiều năm kinh nghiệm cũng như được khách hàng đánh giá cao, Ngọc Thắng tự tin là đơn vị cung cấp các dịch vụ website hàng đầu hiện nay.
Đại chỉ: Số 07 Ngách 2, Ngõ 121 Trần Phú, P. Văn Quán, Hà Đông, Hà Nội, Việt Nam
Tổng đài: 1900 89 21
Hotline: 098 148 1368
MST: 0107994795
Email: lienhe@ngocthang.vn
Website: https://ngocthang.net/
Tôi là Trần Đức Thắng, hiện đang là CEO & Co-Founder của Công Ty Ngọc Thắng. Tôi phát triển với nền tảng thiết kế website, SEO và Inbound Marketing. Hiện nay Ngọc Thắng cung cấp dịch vụ thiết kế website, SEO, quảng cáo Google Ads… Với kinh nghiệm triển khai nhiều dự án những năm qua, đội ngũ của Ngọc Thắng không ngừng nỗ lực mang đến những dịch vụ tốt với chi phí thấp nhất cho quý khách hàng.!