Sql injection là gì – Happymobile.vn

Bài viết Sql injection là gì – Happymobile.vn thuộc chủ đề về Hỏi Đáp đang được rất nhiều bạn lưu tâm đúng không nào !! Hôm nay, Hãy cùng HappyMobile.vn tìm hiểu Sql injection là gì – Happymobile.vn trong bài viết hôm nay nha !
Các bạn đang xem nội dung về : “Sql injection là gì – Happymobile.vn”

Trong các lỗi tấn công bảo mật căn bản, thường nhật nhất và cũng là một trong số những lỗ hổng nguy hiểm nhất phải kể đến chính là lỗi: SQL injection. Một thống kê gần đây chỉ ra rằng rằng, gần một nửa số vụ tấn công bảo mật tới các hệ thống web có liên quan trực tiếp hoặc gián tiếp tới lỗ hổng SQL injection, điều đó đủ cho ta thấy tầm nghiêm trọng của lỗ hổng này. vì thế, việc trang bị kĩ năng phòng tránh lỗ hổng này gần như là bắt buộc đối với mọi lập trình viên cũng như mọi hệ thống phần mềm mà họ xây dựng.

Bạn đang xem: Sql injection là gì

Đây không phải là một lỗi bảo mật mới, ngược lại, nó đã xuất hiện từ rất lâu, nhưng không phải ai cũng biết (hoặc để ý) cách phòng tránh nó. Tấn công SQL injection khả năng được coi là một phương pháp tấn công kinh điển trong thế giới bảo mật. Rất nhiều framework hiện đại sau này đã cung cấp các giải pháp phòng chống mặc định cho lỗi tấn công này, mặc khác điều này cũng dẫn tới 2 vấn đề chính:

Lập trình viên không hiểu được bản chất của lỗi tấn công SQL injectionBởi vì đa phần các framework hiện đại đã hỗ trợ cách phòng tránh, dẫn tới việc lập trình viên lơ là cảnh giác. Nhưng vấn đề là: “đa phần” không có nghĩa là “tất cả”.

Chúng ta sẽ định nghĩa và phân tích tổng quan về tác nhân, tác hại cũng như cách phòng tránh, để giúp cho quy trình xây dựng hệ thống của chúng ta được an toàn hơn.

Tấn công SQL injection là gì

SQL injection là kĩ thuật cho phép các kẻ tấn công chèn và thực thi các lệnh SQL bất hợp pháp (mà người phát triển không lường trước được) bên trong hệ thống, bằng cách lợi dụng các lỗ hổng bảo mật từ dữ liệu nhập vào của các ứng dụng. Qua đó làm lộ thông tin trong cơ sở dữ liệu, tạo ra sự sai lệch hoặc gây ra hư hỏng dữ liệu của hệ thống.

Bài Viết Đọc Nhiều  Graduate Student Là Gì - Graduate Là Gì, Nghĩa Của Từ Graduate

Xem thêm: Subscribe Là Gì – Cách Subscribe Trên Youtube Chi Tiết 2020

Một cách nôm na, ta khả năng hiểu tấn công SQL injection là việc truyền vào các mã SQL thông qua các ô nhập liệu, để làm thay đổi ngay mục đích câu truy vấn ban đầu. Với định nghĩa trên, ta khả năng tạm chia SQL injection thành một vài loại chính sau đây dựa vào cách tấn công dữ liệu truyền vào:

Tấn công: không mã hóa kí tự nhậpTấn công: không kiểm tra kiểu dữ liệu nhập

Giải thích cách tấn công SQL injection

Như đã trình bày, lỗi Sql injection thường xảy ra do hệ thống đã thiếu kiểm tra dữ liệu truyền vào. Điều này sẽ thay đổi ngay mục đích ban đầu của câu truy vấn và vì thế gây ra ra những tác động không mong muốn. Ta hãy xem xét câu truy vấn sau:

$query_string = “SELECT * FROM users WHERE name = “$userName””;//Gọi thực thi truy vấn sau đó:$sql_executer->query( $query_string );Ta thấy rằng, mục đích chính của câu truy vấn này là lục tìm trong bảng users những dòng dữ liệu nào mà trường name có tổng giá trị bằng với tham số userName đã truyền vào.

Thoạt nhìn thì câu truy vấn này là đúng cấu trúc và không có bất cứ vấn đề gì, thế nhưng ta hãy thử phân tích một tình huống sau đây: giả sử người gọi câu truy vấn này truyền vào tham số userName có tổng giá trị:

somename” or “1”=”1Như vậy, sau khi ghép dữ liệu nhập vào bên trong, ta có được câu truy vấn như sau:

SELECT * FROM users WHERE name = “somename” or “1”=”1″Các bạn có thấy không, câu truy vấn của ta giờ đã mang một ý nghĩa khác. Mệnh đềWHEREcủa câu truy vấn trên luôn đúng, lí do là vì “1”=”1″ luôn cho ra tổng giá trị TRUE, dẫn tới câu truy vấn của ta luôn luôn thỏa điều kiện ở mệnh đề WHERE. Như vậy, thay vì trả về kết quả của MỘT dòng dữ liệu mong muốn, câu truy vấn này trả về kết quả là TOÀN BỘ dữ liệu của bảng users. Vậy là dữ liệu của hệ thống đã bị lộ.

Bài Viết Đọc Nhiều  Stitch TikTok là gì? Cách dùng Stitch TikTok quay video

tác nhân chính của việc truy vấn sai này chính là: tấn công truyền dữ liệu vào tham số của câu truy vấn nhằm thay đổi ngay ý nghĩa truy vấn. Hãy tưởng tượng rằng toàn bộ dữ liệu này bị dùng nhằm mục đích không tốt, hậu quả thật khó lường phải không nào?

*

Dữ liệu nhập từ người dùng là mục tiêu tấn công của SQL injection

một vài ví dụ về tấn công SQL injection

Ví dụ: dữ liệu truyền vào làm thay đổi ngay mệnh đề điều kiện của truy vấn. Từ đây kẻ tấn công sẽ thực hiện xóa dữ liệu hệ thống

//Câu truy vấn gốc$query_string = “SELECT * FROM users WHERE name = “$userName””;Tham số truyền vào sẽ gây ra ra lỗi:

a”; DROP TABLE users;Khi đó câu truy vấn khi bị tấn công sẽ trở thành:

SELECT * FROM users WHERE name = “a”; DROP TABLE users;Với ý nghĩa ban đầu là: truy vấn thông tin một user với tên được truyền vào, giờ đây câu truy vấn đã thực thi lệnh xóa bảng users. Việc này cực kì nguy hiểm.

một vài tình huống khác dễ bị tấn công SQL injection

Bất cứ thao tác nào của ứng dụng có thực thi truy vấn tới cơ sở dữ liệu đều khả năng bị lợi dụng để tấn công Sql injection. Các thao tác cơ bản với CSDL là: select, insert, update đều khả năng bị tấn công.

khả năng kể ra vài thao tác thường nhật để tấn công như:

Kiểm tra đăng nhập ứng dụng.Thao tác lưu comment của user xuống DB.Thao tác tìm kiếm thông tin: tên user, tên danh mục, ……

Cách phòng tránh

Như đã phân tích ở trên: điểm để tấn công chính là tham số truyền vào câu truy vấn. Do vậy, cần phải đảm bảo thực hiện việc kiểm tra dữ liệu truyền vào từ người dùng, để tránh người dùng nhập vào những nội dung khả năng gây ra ra sai lệch khi thực hiện truy vấn. Để kiểm tra dữ liệu từ người dùng, ta cần lọc bớt những nội dung nguy hiểm. Giải pháp cho việc lọc dữ liệu này là dùng chuỗi được escape (mã hóa). Lưu ý: mình sẽ dùng từ “escape” để chỉ việc mã hóa cho sát nghĩa.

Bài Viết Đọc Nhiều  Merger Là Gì - Dịch Nghĩa Của Từ Merger

Khi thực hiện escape một chuỗi, tức là mã hoá các kí tự đặc biệt của chuỗi (ví dụ như kí tự ‘, &, |, …) để nó không còn được hiểu là 1 kí tự đặc biệt nữa. Mỗi ngôn ngữ lập trình đều cung cấp các hàm để thực hiện escape chuỗi, trong PHP ta sẽ dùng hàm mysqli_real_escape_string() hoặc cũng khả năng dùng addslashes() để thực hiện điều này.

Xem thêm: Raspberry Là Gì – Raspberry Pi Là Gì

$uname_escaped = mysqli_real_escape_string($sql_executer, $userName);$query_string = “SELECT * FROM users WHERE name = “$uname_escaped””;//Gọi thực thi truy vấn sau đó, dùng biến đã escaped:$sql_executer->query( $query_string );

Tóm lại

Như vừa trình bày ở trên, lỗ hổng SQL injection thực tế không quá phức tạp và cũng không quá khó để phòng tránh. Tuy vậy, nó vẫn là một trong số những lỗ hổng thường xảy ra và cũng bị nhòm ngó tấn công nhiều nhất. Lí do khả năng là do lập trình viên không biết cách phòng tránh, hoặc cũng khả năng do “quên” (vì cứ nghĩ là Framework đã hỗ trợ hết rồi)

Hi vọng những giải thích ở phía trên đã giúp bạn hình dung phần nào đó nguyên lí của cách tấn công này, từ đó biết cách phòng tránh để bảo vệ cho hệ thống của mình an toàn hơn.

Chuyên mục: Hỏi Đáp

Các câu hỏi về Sql injection là gì – Happymobile.vn


Nếu có bắt kỳ câu hỏi thắc mắt nào vê Sql injection là gì – Happymobile.vn hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha

Các Hình Ảnh Về Sql injection là gì – Happymobile.vn

Sql injection là gì - WEB GIẢI ĐÁP

Các từ khóa tìm kiếm cho bài viết #Sql #injection #là #gì #WEB #GIẢI #ĐÁP

Tham khảo thêm kiến thức tại WikiPedia

Bạn nên tìm thông tin chi tiết về Sql injection là gì – Happymobile.vn từ trang Wikipedia.◄

source: https://happymobile.vn/

Xem thêm các bài viết về Giải Đáp tại : https://happymobile.vn/hoi-dap/

Related Posts

About The Author

Add Comment