Lỗi Sql Injection Là Gì

     

Trong toàn bộ các cuộc tấn công nhằm mục tiêu vào website, tấn công SQL Injection là trong những loại nguy hại và thịnh hành nhất, nó đã tạo ra những thiệt hại đáng chú ý cho những doanh nghiệp với tổ chức giữa những năm qua.

Bạn đang xem: Lỗi sql injection là gì

SQL injection – còn được gọi là SQLi – sử dụng những lỗ hổng trong số kênh nguồn vào (input) của website nhằm nhắm kim chỉ nam vào cơ sở dữ liệu nằm vào phần suport của áp dụng web, nơi giữ gìn những thông tin nhạy cảm và có giá trị nhất. Chúng rất có thể được kẻ tiến công sử dụng để ăn cắp hoặc đảo lộn dữ liệu, ngăn trở sự hoạt động vui chơi của các ứng dụng, và, vào trường hợp xấu nhất, nó tất cả thể sở hữu được quyền truy cập quản trị vào sever cơ sở dữ liệu. Dưới đây là những gì bạn cần phải biết về tiến công SQL Injection và cách bảo đảm website của chúng ta khỏi chúng.

Cách thức website bịtấn công SQL Injection

Các cuộc tiến công SQL Injection được thực hiện bằng phương pháp gửi lệnh SQL ô nhiễm đến những máy chủ đại lý dữ liệu thông qua các yêu mong của người dùng mà website cho phép. Bất kỳ kênh input nào cũng hoàn toàn có thể được sử dụng để gửi các lệnh độc hại, bao gồm các thẻ, chuỗi tróc nã vấn (query strings), cookie cùng tệp tin.

Để xem cách nó hoạt động, đưa sử chúng ta có một form đăng nhập gồm 2 input đầu vào username và password như bên dưới đây:


*
Form đăng nhập gồm 2 đầu vào username và password.

Khi người tiêu dùng nhập thông tin đăng nhập của mình và bấm vào nút “log in”, thông tin sẽ tiến hành gửi lại cho sever web của bạn, ở đó nó sẽ tiến hành kết phù hợp với một lệnh SQL. Ví dụ, trong PHP, mã sẽ y như sau:

$sql_command="select * from users where username = "".$_POST<"username">;$sql_command.="" and password = "".$_POST<"password">.""";Lệnh này tiếp đến sẽ được gửi mang đến một máy chủ cơ sở tài liệu và tập dữ liệu công dụng sẽ khẳng định xem username và password có tương xứng với một tài khoản người dùng hợp lệ xuất xắc không. Ví dụ người dùng nhập “john” làm username với “123456” làm cho password (đừng khi nào sử dụng mật khẩu đăng nhập này) sẽ gửi mã trên thành lệnh sau:

SELECT * FROM users WHERE username="john" and password="123456"Nhưng điều gì sẽ xảy ra nếu người dùng quyết định thử dòng khác, ví dụ như sau:


*
Người dùng gắng tình biến đổi username cùng password

Lệnh tác dụng sẽ là như sau:

SELECT * FROM users WHERE username="john" OR 1=1; -- " và password="123456"Kết quả trả về là tin tức đăng nhập của bạn dùng mang tên là “john” mà lại không cần mật khẩu thiết yếu xác.Đây chỉ là một trong trong những hiệ tượng đơn giản duy nhất của tiến công SQL Injection. Với một vài ba thủ thuật, kẻ tấn công rất có thể thêm tài khoản mới, cùng xóa hoặc sửa đổi thông tin của những tài khoản người dùng hiện có. Thuộc một giải pháp tấn công rất có thể được sử dụng để mang cắp các phiên bản hồ sơ và tin tức của người dùng nếu chúng không xẩy ra giới hạn mang đến khách truy cập hoặc để đổi khác nội dung hồ sơ.Trong những trường hợp cực kỳ nghiêm trọng hơn, khi liên kết với sever cơ sở dữ liệu được triển khai thông qua tài khoản quản trị (như “root” trong MySQL hoặc “sa” vào MS SQL Server), kẻ tấn công hoàn toàn có thể đi sâu vào hệ điều hành của máy chủ. Kẻ tấn công sử dụng lỗ hổng SQL injection để cùng lúc tạo tài khoản người tiêu dùng trên máy chủ bị xâm nhập, kích hoạt tuấn kiệt Remote Desktop, thiết đặt thư mục share SMB và cài phần mềm ô nhiễm và độc hại – ngoài việc làm rối tung đa số thứ đang được lưu trữ trong cửa hàng dữ liệu.

Làm sao để tự vệ với các cuộctấn công SQL Injection?

Với vectơ chính cho những cuộc tiến công SQL Injection là các kênh đầu vào của tín đồ dùng, hầu như các phương pháp phòng các thủ tương quan đến kiểm soát và điều hành input của bạn dùngDưới đó là một số biện pháp hoàn toàn có thể đảm bảo an ninh cho đầu vào của tín đồ dùng.

Đừng khi nào tin tưởng vào input của fan dùng

Quy tắc trước tiên về đầu vào mà người dùng nhập là “don’t trust & verify” (không tin cậy và nên xác minh”), tức là tất cả phần lớn gì người tiêu dùng nhập vào yêu cầu được xem là độc sợ hãi trừ khi có vật chứng khác. Nó không chỉ giành riêng cho các hộp nhập liệu đơn giản dễ dàng như những vùng văn phiên bản mà còn cho hồ hết thứ khác – như input đầu vào ẩn, các chuỗi tham số truy hỏi vấn, cookie và tệp cài đặt lên.Browsers của trình chăm nom không chất nhận được người dùng làm việc với một input, ko nghĩa là nó cần thiết bị trả mạo. Những công cụ dễ dàng và đơn giản như Burp Suite chất nhận được người dùng chiếm hữu được HTTP requests cùng sửa đổi bất cứ điều gì, kể cả các giá trị dạng ẩn, trước khi gửi bọn chúng tới vật dụng chủ. Và nếu bạn nghĩ bản thân là fan thông minh bằng cách sử dụng Base 64 mã hóa dữ liệu, bạn đã nhầm, nó hoàn toàn có thể dễ dàng được giải mã, sửa đổi và mã hoá lại vì chưng kẻ tấn công

Xác nhận các chuỗi input ở phía đồ vật chủ

Xác dấn là vượt trình đảm bảo an toàn dữ liệu người tiêu dùng nhập vào là thích hợp lệ và vô hiệu hóa hóa bất kỳ lệnh độc hại tiềm ẩn nào hoàn toàn có thể được nhúng vào chuỗi nhập. Ví dụ, trong PHP, bạn cũng có thể sử dụng mysql _real _escape _string () nhằm thoát những ký tự rất có thể thay đổi thực chất của lệnh SQL.Mã singin được nhắc trước đó sẽ được biến hóa như sau:

$con=mysqli_connect("localhost","user","password","db");$username = mysqli_real_escape_string($con, $_POST<"username">);$password = mysqli_real_escape_string($con, $_POST<"password">);$sql_command = "select * from users where username = "" . $username; $sql_command .= "" and password = "" . $password . """;Sửa đổi đơn giản dễ dàng này sẽ đảm bảo mã của công ty khỏi cuộc tiến công SQL Injection bằng cách thêm một ký kết tự thoát () phía trước vệt nháy đối chọi đã được kẻ tiến công thêm vào.Ghi chú về xác nhận: Sẽ rất tốt nếu chúng ta đã thêm các tác dụng xác thực phía thiết bị khách. Tuy thế không nên phụ thuộc vào nó như là 1 trong những biện pháp bảo vệ chống lại các cuộc tấn công SQL injection. Tuy nhiên các tác dụng phía thứ khách rất có thể làm nó khó hoàn toàn có thể gửi tài liệu input nguy hiểm vào máy chủ của bạn, nhưng công dụng này hoàn toàn có thể dễ dàng bị phá đổ vỡ bằng một trong những browser tweak và dụng cụ khác. Vì vậy, bạn phải bổ sung thêm việc chứng thực phía thiết bị chủ.Một số căn nguyên lập trình, ví dụ như ASP.NET, bao gồm các hào kiệt tích vừa lòng sẽ tự động hóa đánh giá đầu vào của người dùng nhưng các tin tặc đầy đủ thông minh và tinh tế và sắc sảo vẫn rất có thể phá hoại chúng, bởi vậy các bạn nên có một quy trình chặt chẽ kiểm định input đầu vào của khách hàng, điều đó sẽ chẳng bao giờ là thừa thận trọng.

Sử dụng các câu lệnh tham số

Một lựa chọn tốt hơn để né khỏi tấn công SQL Injection là sử dụng những câu lệnh tham số. Những câu lệnh thông số được định nghĩa bằng phương pháp thêm thương hiệu của placeholder vào những lệnh SQL, thứ trong tương lai sẽ được thay thế bởi input đầu vào của bạn dùng. ASP.NET bao gồm một cỗ API khôn cùng trực quan cùng dễ thực hiện cho mục tiêu này.Đoạn mã sau, được viết bởi C#, cho biết cách chúng ta có thể sử dụng các câu lệnh tham số để bảo đảm an toàn trang web của khách hàng khỏi tấn công SQL Injection:

SqlCommand cmd = new SqlCommand ("SELECT * FROM users WHERE username=
username"; username.value = txtUsername.Text; cmd.Parameters.Add(username);SqlParameter password = new SqlParameter(); password.ParameterName = "
password"; password.value = txtPassword.Text; cmd.Parameters.Add(password);Bạn bắt đầu bằng cách tạo nên một SqlCommand object và sử dụng placeholder
parameter_name
trong chuỗi lệnh địa điểm mà dữ liệu người tiêu dùng nhập vào yêu cầu được chèn vào.Sau đó chúng ta tạo instance của các SqlParameter object, trong những số ấy bạn chèn input của fan dùng, thay bởi chèn trực tiếp nó vào chuỗi lệnh.Cuối cùng, các bạn thêm SqlParameter object vào bộ tham số SqlCommand object, nó sẽ sửa chữa thay thế các tham số bằng input được cung cấp.Trong PHP sẽ sở hữu được PDO với mysqli có thể giải quyết y hệt như ASP.net. Bạn có thể tham khảo ở đây.

Xem thêm: Cách Bảo Quản Mộc Nhĩ Đã Ngâm Nước, Nấm Mộc Nhĩ Để Được Bao Lâu Thì Hư

Phân định rõ ràng kiểu input

Mẹo này dành riêng cho các ngôn ngữ như PHP, khi chúng ta thường không định nghĩa các kiểu dữ liệu cho những biến sốViệc định nghĩa ví dụ kiểu input đầu vào như một cách để loại quăng quật những dữ liệu rất có thể gây sai cho câu lệnh SQL. Vị vậy, nếu như bạn đang hy vọng đợi người dùng nhập “int” cho tham số “age”, bạn cũng có thể đảm bảo sự an ninh của input với mã sau đây trong PHP:

$age = (int)$_POST<"age">;Lưu ý rằng đoạn mã này chỉ xác thực kiểu của input chứ chưa hẳn phạm vi của nó. Vì chưng vậy, bạn sẽ phải chạy mã không giống để bảo đảm an toàn người dùng không nhập vào dữ liệu không đúng theo lệNgoài ra,hành động tốt nhất có thể là kị sử dụng những dấu nháy đơn trong những lệnh SQL khi không tồn tại string được truyền vào. Chũm vì thực hiện mã sau đây …

$sql_command = "select * from users where age = " . $age;… sẽ bình yên hơn một chút nếu sử dụng lệnh sau:

$sql_command = "select * from users where age = "" . $age . """;

Làm nắm nào để diệt tận gốc những lỗ hổng SQL Injection


*
Làm thay nào để diệt tận gốc các lỗ hổng SQL injection.
Bạn phải kiểm tra mã của từng trang, ở đông đảo nơi mà bạn phối hợp nội dung trang, các lệnh, những chuỗi, v.v … cùng với dữ liệu tới từ người dùng. Rà soát lại mã nguồn, tìm kiếm lỗ hổng bảo mật phải là 1 phần thiết yếu đuối trong quy trình phát triển ứng dụng của bạn.Bạn cũng rất có thể sử dụng những công nắm quét như sql maps để tích lũy thông tin về các lỗ hổng SQL injection tiềm ẩn. Trên thực tế, tin tặc cũng thường thực hiện công thế này để tìm và khai thác các vectơ tiến công SQL Injection trên những website mục tiêu. Hay đơn giản dễ dàng hơn bạn có thể sử dụng phauthuatcatmimat.com Platform nhằm quét và phát hiện những lỗ hổng bảo mật thông tin một biện pháp miễn giá tiền để bảo vệ cho website của mình.

Hàng rào phòng thủ sau cùng của bạn

Cho cho dù bạn thiết đặt bảo mật cho website cao tới tầm nào đi nữa, chúng ta vẫn phải sẵn sàng chuẩn bị phòng bị cho ngày bị tấn công SQL injections. Bọn họ phải thành công mọi cuộc chiến, nhưng lại tin tặc chỉ việc giành thắng lợi một lần.Dưới đó là một số mẹo sẽ giúp đỡ bạn giảm tối thiểu thiệt hại khi bạn trở thành nàn nhân của tấn công SQL Injection.

Tránh quyền quản trị

Sử dụng tài khoản “root” hoặc “sa” để kết nối ứng dụng web với máy chủ cơ sở dữ liệu là một trong những sai lầm tồi tệ độc nhất vô nhị mà chúng ta cũng có thể mắc phải. Như đã có đề cập, một thông tin tài khoản quản trị bị xâm nhập bao gồm thể chất nhận được hacker truy vấn vào tổng thể hệ thống. Ngay cả những tài khoản chưa hẳn tài khoản quản lí trị mà lại được trao quyền truy cập vào tất cả các cơ sở dữ liệu bên trong một máy chủ cũng hoàn toàn có thể gây tổn hại, đặc trưng nếu máy chủ cơ sở tài liệu đang được chia sẻ giữa các ứng dụng cùng cơ sở tài liệu khác nhau.Do đó, cực tốt nên sử dụng thông tin tài khoản chỉ bao gồm quyền truy cập đọc- viết đơn giản dễ dàng để vào cụ thể từng cơ sở tài liệu riêng biệt, trong trường thích hợp website của người tiêu dùng bị tấn công SQL Injection, phạm vi thiệt hại vẫn phía bên trong ranh giới của cơ sở dữ liệu đó.Trong MySQL, cải thiện bảo mật bằng cách hạn chế quyền truy cập vào tài khoản người dùng đến các dải showroom IP ví dụ thay vì mô hình “%”, để ngăn các tài khoản bị xâm nhập bị truy cập từ xa.Trong máy chủ MS SQL, bạn nên sử dụng mô hình Windows Authentication để tránh truy cập của hacker vào cơ sở dữ liệu và đảm bảo an toàn họ sẽ không còn thể thực hiện các kênh tiếp thị khác để truy vấn vào cơ sở dữ liệu của bạn.Ngoài ra, trừ khi chúng ta đang đầu tư sử dụng một số trong những tính năng cải thiện của SQL Server, bạn nên tùy chỉnh dịch vụ windows để sử dụng một tài khoản giới hạn thay vì “Local System”. Điều này sẽ giảm thiểu thiệt hại trong ngôi trường hợp tài khoản “sa” bị xâm nhập.

Mã hóa dữ liệu nhạy cảm

Mã hóa những dữ liệu nhạy cảm vào cơ sở dữ liệu của bạn. Nó bao hàm mật khẩu, câu hỏi và câu trả lời về bảo mật, tài liệu tài chính, tin tức y tế và những thông tin khác hữu dụng cho các tác nhân độc hại. Điều này sẽ đảm bảo rằng trong cả khi tin tặc vậy trong tay tài liệu của bạn, chúng sẽ không thể khai quật nó ngay lập tức, cho mình thời gian nhằm phát hiện ra sự vi phạm, ghi lại và triển khai các phương án phản ứng khác như thực thi khôi phục mật khẩu, đảm bảo rằng tài liệu bị đánh cắp mất giá bán trị trước lúc kẻ tiến công giải mã nó.


*
Mã hóa tài liệu nhạy cảm làm hacker không thể không giống thác ngay lúc có được.

Nếu bạn đang hashing mật khẩu đăng nhập của mình, đề nghị sử dụng các thuật toán mạnh như SHA-2, nó đã sớm vươn lên là tiêu chuẩn chỉnh ngành công nghiệp để bảo đảm an toàn mật khẩu. MD5 với SHA-1 đã lỗi thời và hoàn toàn có thể bị giải mã.Đối cùng với các bề ngoài mã hóa khác, hãy cẩn thận khi các bạn cất giữ thông tin giải mã, và đừng khi nào đặt bọn chúng ở thuộc 1 nơi. đã thật vô nghĩa nếu bạn mã hóa tài liệu nhưng lại đặt phương pháp giải mã ngay cạnh chúng, hacker sẽ tiện lợi truy cập vào chúng ngay trong lúc chúng xâm hại thiết bị chủ

Không tàng trữ dữ liệu nhạy cảm nếu như bạn không nên nó

Khi các bạn lưu trữ tin tức trong các đại lý dữ liệu, hãy xem nó sẽ gây tai hại như cầm nào nếu bị lâm vào hoàn cảnh tay kẻ xấu, và đưa ra quyết định xem bạn có đích thực cần lưu trữ nó tuyệt không. Cuộc tiến công của Ashley Madison đã làm lộ những kín đáo đen buổi tối và thông tin mật của khoảng 37 triệu con người trên internet và đã tạo ra một số thiệt sợ nghiêm trọng, 1 phần trong sự thành công xuất sắc của kẻ tiến công là do nhà hỗ trợ web vẫn không dọn dẹp và sắp xếp các thông tin nhạy cảm từ các đại lý dữ liệu. Do vậy, điểm chủ yếu là, không lưu giữ trữ thông tin nhạy cảm trong cơ sở dữ liệu trừ khi chúng ta thực sự cần. Và thậm chí còn sau đó, xóa thông tin khi không thể sử dụng.

Xem thêm: To Infinitive Là Gì ? Các Quy Tắc Sử Dụng Bạn Cần Biết Các Quy Tắc Sử Dụng Bạn Cần Biết

Kết luận

SQL Injection đã tồn tại xung quanh ta trong tương đối nhiều thập kỷ và hoàn toàn có thể sẽ liên tiếp đứng đầu bảng xếp hạng những lỗ hổng nguy nan trong trong thời điểm tới. Chỉ mất một vài bước tiện lợi –nhưng sẽ là 1 trong những sự toan tính tốt nhất – để bảo đảm chính chúng ta và tín đồ dùng của người tiêu dùng khỏi sự tiến công này, và lỗ hổng này vẫn là trong những ưu tiên bậc nhất khi soát sổ mã nguồn cho những lỗ hổng bảo mật.Việc thứ nhất cần có tác dụng để tránh đổi thay nạn nhân của cuộc tiến công tiếp theo về vi phạm dữ liệu SQL injection là kiểm soát và chứng thực input của người dùng, tiếp sau đó cần tự trang bị đa số công cụ quan trọng để bảo đảm cho website của chính bản thân mình một khi chúng ghé thăm.