Một trong những lớp lỗ hổng web lớn nhất được gọi là “SQL Injection”, hay SQLi. Ngôn ngữ truy vấn có cấu trúc, hay còn gọi là SQL, là ngôn ngữ được sử dụng để tương tác với phần lớn cơ sở dữ liệu, mặc dù một số biến thể của ngôn ngữ được sử dụng tùy thuộc vào nền tảng cơ sở dữ liệu. Bất kỳ trang web nào lưu trữ dữ liệu người dùng, chẳng hạn như thông tin tài khoản hoặc cung cấp chức năng tải lên của người dùng, chẳng hạn như trang web lưu trữ hình ảnh sẽ sử dụng cơ sở dữ liệu để lưu trữ dữ liệu đó.
Mẹo: SQL thường được phát âm là “ess cue ell” hoặc “phần tiếp theo” với tùy chọn đầu tiên phổ biến hơn trong tiếng Anh Anh và tùy chọn thứ hai phổ biến hơn trong tiếng Anh Mỹ. Cả hai cách phát âm thường được hiểu trong ngữ cảnh nói về cơ sở dữ liệu.
SQLi là gì?
SQLi là một lỗ hổng trong đó các nhà phát triển web thiết kế mã giao tiếp giữa máy chủ web và cơ sở dữ liệu không triển khai các biện pháp bảo vệ chống lại các lệnh SQL do người dùng gửi. Vấn đề là có thể thoát ra khỏi các câu lệnh cơ sở dữ liệu và thêm các đối số mới hoặc một câu lệnh hoàn toàn mới. Câu lệnh cơ sở dữ liệu đã thay đổi hoặc thứ hai có thể thực hiện một loạt các hành động bao gồm cả việc xóa hoặc rò rỉ dữ liệu trên quy mô lớn có khả năng xảy ra.
Việc khai thác thường xoay quanh việc làm cho các câu lệnh hiện có trở thành đúng trong mọi trường hợp hoặc cung cấp một lệnh theo đợt thứ hai thực hiện một hành động cụ thể như xóa hoặc hiển thị tất cả dữ liệu. Ví dụ: một câu lệnh SQL để đăng nhập vào một trang web có thể kiểm tra xem tên người dùng và mật khẩu đã gửi có khớp với mục nhập trong cơ sở dữ liệu hay không. Để cố gắng đạt được quyền truy cập, một khai thác SQL injection có thể cố gắng thêm một mệnh đề “hoặc true” chẳng hạn như “hoặc 1 = 1”. Điều này sẽ làm cho lệnh dọc theo dòng “đăng nhập bằng tên người dùng [this], nếu mật khẩu là [this], hoặc câu lệnh này là đúng”.
Cách ngăn chặn SQLi
SQLi từng là một cách rất phổ biến để các trang web có cơ sở dữ liệu của họ bị xâm phạm và sau đó bị rò rỉ trực tuyến. Do nỗ lực phối hợp để đảm bảo rằng nhận thức về bảo mật là một phần của quá trình đào tạo nhà phát triển, lớp lỗ hổng này phần lớn đã được giải quyết và hiếm khi được nhìn thấy nữa.
Phương pháp chính xác để ngăn chặn SQLi là sử dụng các câu lệnh chuẩn bị sẵn, còn được gọi là truy vấn được tham số hóa. Theo truyền thống, các câu lệnh SQL được khai báo và có đầu vào của người dùng được nối với chúng trong quá trình khai báo đó. Với các câu lệnh đã chuẩn bị, lệnh cơ sở dữ liệu được viết ra và sau đó một hàm nói sẽ chạy lệnh và chèn dữ liệu người dùng. Mặc dù điều này có vẻ như là một sự khác biệt nhỏ nhưng nó thay đổi hoàn toàn cách xử lý lệnh. Sự khác biệt ngăn không cho bất kỳ lệnh SQL có ý nghĩa nào được chạy và coi tất cả đầu vào của người dùng là một chuỗi, ngăn không cho việc tiêm SQL xảy ra.