QL Injection là gì? Phương pháp phòng chống SQL Injection

minhduongpro

Thành viên
Tham gia
21/7/2017
Bài viết
4
SQL Injection là gì?

SQL Injection là một trong khoa học chèn code đc lạm dụng quá trong tiến công các phần mềm chứa độc ác liệu (data-driven). Trong đó, các lệnh SQL ô nhiễm đc chèn vào trong một entry field để thực thi (chẳng hạn như để kết xuất nội dung cơ sở hung ác liệu cho hacker). SQL Injection nên khai quật lỗ hổng bảo mật trong ứng dụng của ứng dụng.

SQL Injection chủ yếu được nghe đến như 1 vector tấn công giành cho những trang web. Nhưng nó cũng có thể được dùng để tiến công bất cứ cái cơ sở hung tàn liệu SQL nào. Các cuộc tiến công SQL Injection chất nhận được hacker hàng fake danh tính, xáo trộn ác nghiệt liệu. Hay xáy ra các vấn đề như làm mất hiệu lực thực thi đơn hàng, biến hóa số dư, tiết lộ hay tiêu diệt hung tàn liệu bên trên hệ thống. Thậm chí là làm hung liệu không khả dụng hoặc biến thành admin của server cơ sở Ác liệu.

các chiếc SQL Injection

SQL Injection mang ba loại: In-band SQLi (Classic), Inferential SQLi (Blind) & Out-of-band SQLi. Bạn cũng có thể phân cái các kiểu SQL injection dựa trên phương pháp sử dụng quá để truy vấn ác nghiệt liệu backend, hoặc khả năng gây hại của chúng.

In-band SQLi

Kẻ tiến công sử dụng cùng một kênh liên lạc để khởi động những cuộc tiến công và tích lũy những hiệu quả. Tính dễ chơi & tác dụng của In-band SQLi khiến cho nó trở thành trong những kiểu tấn công SQLi thông dụng nhất hiện thời. Mang hai biến thể phụ của phương pháp này:

  • Error-based SQLi – Hacker sẽ triển khai những cử chỉ khiến trung tâm độc ác liệu tạo ra thông tin lỗi. Hacker mà thậm chí sử dụng ác nghiệt liệu đc cung ứng bởi các thông tin lỗi này để tích lũy thông báo về cấu trúc của cơ sở ác nghiệt liệu.
  • Union-based SQLi – khoa học này lợi dụng toán tử UNION SQL để phối kết hợp đa dạng câu lệnh được tạo bởi trung tâm ác ôn liệu để nhận đc một HTTP response. Response này mà thậm chí chứa hung liệu mà kẻ tiến công thậm chí lạm dụng.
>>> Xem thêm: mua máy chủ sr850



Inferential (Blind) SQLi

Hacker sẽ gửi các data payload đến server và quan sát phản ứng, hành động của server để tìm hiểu về cấu tạo của nó. Biện pháp này được thường gọi là Blind SQLi vì độc ác liệu ko được chuyển từ cơ sở hung ác liệu website đến hacker. Do đấy hacker không còn tìm thấy thông báo về cuộc tấn trong in-band.

Blind SQL injection dựa theo phản ứng và các hành vi hoạt động của server. Do đấy chúng tầm thường thực thi chậm hơn, nhưng có thể gây ảnh hưởng gần giống. Blind SQL injection thậm chí đc phân cái thành:

  • Boolean – Hacker gửi một truy cập SQL đến cơ sở tàn ác liệu, làm cho ứng dụng trả về một công dụng. Công dụng mà thậm chí không giống nhau tùy vào truy cập đúng hay sai. Dựa trên công dụng, thông báo trong HTTP response sẽ sửa đổi hoặc không. Tiếp đến, hacker có thể đào bới xem thông báo tạo ra công dụng mang đúng không nào.
  • Time-based – Hacker sẽ gửi một truy cập SQL đến cơ sở độc ác liệu, để cho cơ sở ác nghiệt liệu đợi (trong vài giây) trước lúc mà thậm chí vận động. Kế tiếp, hacker mà thậm chí xem từ khoảng thời gian cơ sở độc ác liệu buộc phải để comment, một truy cập là đúng hay sai. Dựa theo tác dụng, một HTTP repsonse sẽ đc sinh ra. Vì như thế hacker mà thậm chí tìm ra thông báo mà chúng đã lạm dụng quá trả về đúng hay sai, ko phải căn cứ vào ác nghiệt liệu từ trung tâm ác nghiệt liệu.
Out-of-band SQLi

Hacker chỉ thậm chí triển khai hình thức này khi có 1 số chức năng nhất định được kích hoạt bên trên server cơ sở ác nghiệt liệu được phần mềm web sử dụng quá. Hiệ tượng này cơ bản được dùng để làm thay thế sửa chữa cho khác khoa học in-band và inferential SQLi.

Out-of-band SQLi đc triển khai khi hacker không hề lạm dụng quá cùng một kênh để khởi động tiến công và thu thập thông tin. Hoặc bởi vì server quá chậm, không ổn định tấn triển khai hành động. Những kỹ thuật này căn cứ vào thời gian làm việc server tạo ra những DNS hay HTTP request để chuyển ác nghiệt liệu cho kẻ tiến công.

rõ ràng về cách sử dụng SQL Injection

Kẻ tiến công muốn tiến hành SQL injection sẽ thao túng một truy vấn SQL chuẩn mức, để khai quật các lỗ hổng input không đc chứng thực trong cơ sở Ác liệu. Có nhiều phương pháp để tiến hành vector tấn công này. Sau đây là một số cách để vận hành SQLi:

Lấy cụ thể về input ở bên trên. Nó sẽ lấy thông tin cho một loại sản phẩm chi tiết, có thể đc đổi thành

Bash

Vì lệnh 1=1 là luôn đúng, cần truy vấn trả về toàn bộ tên và mô tả dòng sản phẩm trong cơ sở hung ác liệu, ngay cả các tên mà bạn không đủ điều kiện truy cập.

những hacker cũng đều có thể lợi dụng các ký tự được lọc không chính xác để đổi khác những lệnh SQL. Trong số đó gồm cả việc sử dụng dấu chấm phẩy để bóc hai trường.

Bash

lúc ấy, toàn thể trung tâm hung liệu mà thậm chí bị xóa.

1 cách khác để thao túng truy cập SQL là lạm dụng quá lệnh UNION SELECT. Nó kết hợp hai truy cập SELECT không liên quan để mang hung tàn liệu từ những bảng cơ sở hung tàn liệu khác nhau.

Bash

Bằng cách sử dụng lệnh UNION SELECT, truy cập này kết hợp request cho tên và mô tả mục item 999 với cùng một request khác, pull tên & password cho đa số người dùng trong trung tâm tàn ác liệu.

>>> Xem thêm: sr650 máy chủ



cách ngăn chặn SQL Injection

chúng ta nên biết được phương pháp phòng chống SQL injection công dụng. Vì SQL Injection có vector đó là các kênh input của người dùng. Nên cách tiếp cận nổi trội là khống chế & cân nhắc input của người dùng để quan sát và theo dõi các kiểu tiến công. Các developer cũng có thể có thể tránh các lỗ hổng bảo mật bằng cách áp dụng những cách phòng chống SQL injection sau:

Input Validation (Xác thực đầu vào)

quá trình chứng thực nhằm xác minh xem cái input do người tiêu dùng gửi với hợp lệ hay không. Xác nhận đầu vào bảo đảm an toàn đó là kiểu, độ dài, định dạng… được đồng ý. Chỉ những giá trị qua đc xác thực mới thậm chí đc xử trí. Nó giúp chống lại tất cả lệnh được chèn vào trong chuỗi input.

xác nhận cần được áp dụng với những trường được cho phép người dùng nhập đầu vào, mà bạn còn cần quan tâm đến các trường hợp sau:

  • lạm dụng biểu thức chính quy làm whitelist cho các hung tàn liệu mang cấu tạo (chẳng hạn như tên, tuổi, thu nhập, zip code) để đảm bảo an toàn xác nhận đầu vào hợp lệ.
  • Trong trường hợp có 1 bộ rét trị cố định (như drop-down list), hãy xác định giá trị đc trả về. Ác liệu đầu vào nên khớp có 1 trong những tùy chọn được cung cấp.
sau đây là phương pháp xác thực tên bảng:

switswitch ($tableName)

case 'fooTable': return true;

case 'barTable': return true;

default: return new BadMessageException('unexpected value provided as table name');



PHP

Biến $tableName có thể được append trực tiếp, bây chừ nó được nghe đến là 1 trong lạnh lẽo trị hợp pháp cho tên của Table.

Stored Procedures

những stored procedures (SP) yêu cầu developer nhóm một hay đa dạng lệnh SQL thành một đơn vị xúc tích để có thể tạo một kế hoạch thực thi. Các lần thực thi tiếp theo chất nhận được những lệnh đc tham số hóa tự động. Nói một cách dễ chơi, nó là 1 trong những dòng code mà thậm chí đc lưu trữ để lạm dụng quá trong tương lai.

do vậy, bất kì một khi bạn cần triển khai truy vấn, thay vì viết đi viết lại thì thậm chí gọi một stored procedure.

đây là một quá trình tạo một SP trong server MySQL. Cụ thể bạn có 1 bảng như sau:

CREATE TABLE `salary` (

`empid` int(11) NOT NULL,

`sal` int(11) DEFAULT NULL,

PRIMARY KEY (`empid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Bash

nhái sử có 1 chuyên viên bắt buộc lấy hung tàn liệu tổng hợp về lương công ty từ Table đó. Trước tiên, bạn bắt buộc tạo một người dùng ‘tr’:

CREATE USER 'tr'@'localhost' IDENTIFIED BY 'mypass';

Bash

người tiêu dùng đó sẽ chỉ việc quyền EXECUTE đối với lược đồ nơi với Table:

grant execute on hris.* to tr@`%`

Bash

SP sẽ đc tạo như sau:

DELIMITER $$

CREATE PROCEDURE `avg_sal`(out avg_sal decimal)

BEGIN

select avg(sal) into avg_sal from salary;

END

Bash

chu trình phát hành lệnh tạo một avg_sal SP & nó sẽ được lưu trữ trong trung tâm hung tàn liệu.

Để gọi một SP từ 1 ừng dụng PHP, bạn cũng có thể lạm dụng quá PDO:

$db_connection = new PDO('mysql:host=localhost;dbname=hris', 'tr', 'mypass');

$query = $db_connection->exec('call avg_sal(@out)');

$res = $query->query('select @out')->fetchAll();

print_r($res);

Bash

$res sẽ hiện thị mức lương trung bình theo nhu yếu người dùng. Tiếp đến, người dùng có thể tiến hành quá trình output sở hữu PHP.

>>> Xem thêm: mua máy chủ lenovo sr550
 
×
Quay lại
Top