Hỏi đáp

Nghĩa Của Từ Injection Là Gì, Cách Hạn chế Thiểu Và Phòng Ngừa Sql Injection – viettingame

Một trong những kiểu tiến công thịnh hành nhất được nghe đến so với ứng dụng web là SQL injection. SQL injection là một kiểu tiến công nhắm vào trung tâm dữ liệu SQL, cho phép người sử dụng cấp những tham số của riêng họ cho một truy vấn SQL. Và thường thì điều này thường kéo theo một trung tâm dữ liệu bị xâm phạm do những quyền được update trải qua những lệnh SQL injection truyền vào.

Đang xem: Injection là gì

SQL injection là dạng injection thịnh hành nhất, nhưng vẫn không phải là dạng duy nhất. Những cuộc tiến công injection với hai thành phần chính: một trình thông dịch và payload từ người sử dụng bằng phương pháp nào khác được đọc vào trình thông dịch. Điều này tức là những cuộc tiến công injection thậm chí xẩy ra chống lại như FFMPEG (một bộ xử lý video) cũng như chống lại trung tâm dữ liệu (như trường hợp injection SQL truyền thống lịch sử)

SQL Injection

*

SQL injection là hình thức injectioncổ điển nhất. Một chuỗi SQL được đặt trong một HTTP payload, kéo theo những truy vấn SQL tùy chỉnh được thực thi thay đổi quyền cho end user.

*

Thường thì nhiều tập PMNM được xây dựng bằng phương pháp sử dụng phối hợp PHP và SQL (thông thường là MySQL). Nhiều lỗ hổng SQL injection đã xẩy ra do quan điểm thoải mái của PHP về luồng giữa những view, logic và data code. Những nhà phát triển PHP cũ sẽ xen kẹt sự phối hợp của SQL, HTML và PHP vào những tệp PHP của họ — một quy mô tổ chức được hỗ trợ bởi PHP sẽ bị lạm dụng quá, kéo theo một lượng to mã PHP dễ dẫn đến tiến công.

Hãy xem ví dụ về một quãng mã PHP cho phép người sử dụng đăng nhập:

if ($_SERVER != “POST”) { echo ”
Sign In
“;} else { // the user has already filled out the login form. // pull in database info from config.php $servername = getenv(“IP”); $username = $mysqlUsername; $password = $mysqlPassword; $database = $mysqlDB; $dbport = $mysqlPort; $database = new mysqli( $servername, $username, $password, $database, $dbport ); if ($database->connect_error) { echo “ERROR: Failed to connect to MySQL”; die; } $sql = “SELECT userId, username, admin, moderator FROM users WHEREusername =”” . $_POST . “” AND password =”” . sha1($_POST) . “”;”; $result = mysqli_query($database, $sql);}Như chúng ta thậm chí thấy trong mã đăng nhập này, PHP, SQL và HTML đều được đặt lẫn với nhau. Không dừng lại ở đó, truy vấn SQL được tạo dựa trên việc nối những tham số truy vấn mà không tồn tại sự khởi tạo nào xẩy ra trước lúc chuỗi truy vấn được tạo.Sự xen kẹt của mã HTML, PHP và SQL chắc khỏe làm cho việc đưa vào SQL đơn giản và dễ dàng hơn nhiều cho những ứng dụng web dựa trên PHP. Trong cả một số trong những ứng dụng PHP OSS to như WordPress, đã từng là nạn nhân của điều này trong quá khứ.

Trong những năm sắp trên đây, những tiêu chuẩn chỉnh mã hóa PHP đã trở nên nghiêm ngặt hơn nhiều và từ ngữ này đã triển khai những dụng cụ để hạn chế thời gian làm việc xẩy ra SQL injection. Không dừng lại ở đó, sự lựa mua PHP của những nhà phát triển ứng dụng đã hạn chế so với trước. Theo chỉ số TIOBE, một tổ chức thống kê giám sát mức phổ biến của từ ngữ lập trình, việc sử dụng PHP đã hạn chế đáng kể Tính từ lúc năm 2010.

Những bài học bảo mật rút ra từ PHP đã tồn tại trong những từ ngữ khác và việc tìm ra những lỗ hổng chèn SQL trong những ứng dụng web thời nay sẽ khó hơn nhiều. Tuy nhiên, nó vẫn thậm chí xẩy ra và vẫn thịnh hành trong những ứng dụng ko sử dụng những phương pháp hay nhất về mã hóa tin cậy.

Hãy xem xét một Node.js / Express.js server đơn giản và giản dị khác :

const sql = require(“mssql”);/** Recieve a POST request to /users, with a user_id param on the requestbody.** An SQL lookup will be performed, attempting to find a user in thedatabase* with the `id` provided in the `user_id` param.** The result of the database query is sent back in the response.*/app.post(“/users”, function (req, res) { const user_id = req.params.user_id; /* * Connect to the SQL database (server side). */ await sql.connect(“mssql://username:/database”); /* * Query the database, providing the `user_id` param from the HTTP * request toàn thân. */ const result = await sql.query(“SELECT * FROM users WHERE USER = ” + user_id); /* * Return the result of the SQL query to the requester in the * HTTP response. */ return res.json(result);});Trong ví dụ này, một nhà phát triển đã sử dụng nối chuỗi trực tiếp để đính kèm tham số truy vấn vào truy vấn SQL. Điều này giả định rằng tham số truy vấn được gửi qua không xẩy ra hàng nhái.Trong trường hợp user_id hợp lệ, truy vấn này sẽ trả về một đối tượng người dùng người sử dụng. Trong trường hợp chuỗi user_id ô nhiễm và độc hại hơn, nhiều đối tượng người dùng khác thậm chí được trả về từ trung tâm dữ liệu. Hãy xem một ví dụ:

const user_id = “1=1″Giờ đây, truy vấn SELECT * FROM users where USER = true, được dịch thành “trả lại toàn bộ những đối tượng người dùng người sử dụng cho tất cả những người yêu cầu.

Điều gì sẽ xẩy ra nếu chúng ta vừa chính thức một câu lệnh mới bên trong đối tượng người dùng user_id ?

user_id = “123abc; DROP TABLE users;”;Giờ đây truy vấn của con người trông tương tự như sau: SELECT * FROM người sử dụng WHERE USER = 123abd; DROP TABLE users ;. Ơ, chúng ta đã thêm một truy vấn khác lên trên truy vấn ban sơ. Và lúc này chúng ta cần xây dựng lại dữ liệu của users.

Một ví dụ thú zị hơn thậm chí là một chiếc gì đó như vậy này:

const user_id = “123abc; UPDATE users SET credits = 10000 WHERE user = 123abd;”Giờ đây, thay vì như thế yêu cầu danh sách tất từ đầu đến chân sử dụng hoặc drop người sử dụng, Shop chúng tôi đang sử dụng truy vấn thứ hai để update tài khoản người sử dụng của chính mình trong trung tâm dữ liệu — trong trường hợp này, tự tạo cho mình nhiều sô tín dụng trong ứng dụng hơn những gì chúng ta đã với.

Xem thêm: Tai trò chơi Ninja School 2 Full Crack Khong Kích Hoạt Sms, Tai trò chơi Ninja School 2 Hack Khong Can Kich Hoat

Code Injection

Trong toàn cầu injection, SQL injection chỉ là một phần con của những cuộc tiến công kiểu “injection”. SQL injection được phân loại là injection vì như thế nó liên quan tới một trình thông dịch (trình thông dịch SQL) được nhắm tiềm năng bởi payload được đọc vào trình thông dịch. Code injection dựa trên việc thực thi trên giao diện command-line (CLI) gọi một API endpoint được hỗ trợ thêm những lệnh ko mong muốn do thiếu sanitization.

*

SQL injection trước nhất là một cuộc tiến công injection và thứ hai là một cuộc tiến công chèn mã. Điều này là do tập lệnh injection chạy dưới trình thông dịch hoặc CLI (lệnh injection).Như đã đề cập trước đó, với nhiều kiểu chèn mã ít được nghe đến hơn mà ko dựa trên trung tâm dữ liệu. Những điều này ít thịnh hành hơn vì như thế một số trong những lý do. Trước tiên, hầu hết mọi ứng dụng web phức tạp thời nay đều phụ thuộc trung tâm dữ liệu để lưu trữ và truy xuất dữ liệu người sử dụng. Vì như thế vậy, nhiều thời gian làm việc các bạn sẽ tìm thấy SQL hoặc chèn trung tâm dữ liệu khác thay vì như thế đưa vào CLI ít thịnh hành hơn đang hoạt động trên máy chủHãy xem xét một sever nén hình ảnh / video mà MegaBank đã phân chia để sử dụng trong những chiến dịch tiếp thị nhắm tới người sử dụng của tớ. Sever này là một tập hợp những API REST được đặt tại https://truyền thông.megabank.com. Nó bao hàm một số trong những API:

uploadImage (POST)uploadVideo (POST)getImage (GET)getVideo (GET)

Endpoint uploadImage() là một endpoint Node.js đơn giản và giản dị như sau:

const imagemin = require(“imagemin”);const imageminJpegtran = require(“imagemin-jpegtran”);const fs = require(“fs”);/** Attempts to upload an image provided by a user to the server.** Makes use of imagemin for image compression to reduce impact onserver* drive space.*/app.post(“/uploadImage”, function (req, res) { if (!session.isAuthenticated) { return res.sendStatus(401); } /* * Write the raw image to disk. */ fs.writeFileSync(`/images/raw/${req.toàn thân.name}.png`, req.toàn thân.image); /* * Compresses a raw image, resulting in an optimized image with lower disk * space required. */ const compressImage = async function () { const res = await imagemin(, `/images/compressed/${req.toàn thân.name}.jpg`); return res; }; /* * Compress the image provided by the requester, continue script * expecution when compression is complete. */ const res = await compressImage(); /* * Return a link to the compressed image to the client. */ return res.status(200) .json({ url: `https://truyền thông.megabank.com/images/${req.toàn thân.name}.jpg` });});Trên đây là một endpoint khá đơn giản và giản dị thậm chí chuyển đổi hình ảnh PNG thành JPG. Nó sử dụng thư viện imagemin và ko lấy ngẫu nhiên thông số kỹ thuật nào từ người sử dụng để xác định kiểu nén, ngoại trừ tên tệp.Tuy nhiên, thậm chí một người sử dụng lợi dụng việc sao chép tên tệp và khiến cho thư viện imagemin ghi đè lên trên những hình ảnh hiện với. Này là thực chất của tên tệp trên hầu hết những hệ điều hành.

Lúc cho thêm những tuỳ mua option giữa những tập lệnh và những lệnh cấp khối hệ thống, điều quan trọng là phải ghi chú tới cụ thể về phong thái một chuỗi được sanitized trước lúc được thực thi trên hệ điều hành chủ (Linux, Macintosh, Windows, v.v.) hoặc trình thông dịch (SQL, CLI, v.v.) ) để ngăn chặn việc tiêm lệnh và chèn mã.

Command Injection

Với việc chèn lệnh, một endpointi API tạo ra những lệnh Bash, bao hàm cả một yêu cầu từ máy client. Người sử dụng sẽ thêm những lệnh tùy chỉnh sửa đổi hoạt động và sinh hoạt thông thường của endpoint API.Cho tới nay, chúng ta đã biết rằng việc chèn mã liên quan tới việc lợi dụng một API được viết ko đúng phương pháp để khiến cho trình thông dịch hoặc CLI tiến hành những hành vi mà nhà phát triển ko mong muốn. Chúng ta cũng từng biết rằng Injection Command là một hình thức Injection code nâng cao, trong đó thay vì như thế tiến hành những hành vi ko mong muốn so với CLI hoặc trình thông dịch, chúng ta đang tiến hành những hành vi ko mong muốn so với một hệ điều hành.

*

Hãy lùi lại một chút và xem xét tác động của một cuộc tiến công ở cấp độ này. Trước tiên, thời gian làm việc thực thi những lệnh (thông thường là Bash) so với hệ điều hành dựa trên Unix (Macintosh hoặc Linux) với những rủi ro rất trầm trọng kèm theo với nó. Nếu chúng ta với quyền truy vấn trực tiếp vào hệ điều hành Unix lưu trữ (hơn 95% sever dựa trên Unix) và những lệnh của con người được hiểu như một super user, chúng ta thậm chí làm bất kì điều gì chúng ta muốn với hệ điều hành đó.Hệ điều hành bị xâm nhập thậm chí bị đánh mất một số trong những thông tin ví dụ như:

/etc/passwdGiữ mọi thông tin tài khoản người sử dụng trên OS/etc/shadowChứa mật khẩu được mã hóa của người sử dụng~/.sshChứa những khóa SSH để tiếp xúc với những khối hệ thống khác/etc/apache2/httpd.confCấu hình cho sever Apache/etc/nginx/nginx.confCấu hình cho sever Nginx

Không dừng lại ở đó, việc chèn lệnh thậm chí hỗ trợ cho chúng quyền ghi so với những tệp này ngoài quyền đọc. Một lỗ hổng như vậy này sẽ mở ra một loạt những cuộc tiến công tiềm ẩn mà chúng ta thậm chí sử dụng lệnh injection để tạo ra nhiều tàn phá hơn dự kiến bao hàm:

Đánh cắp dữ liệu từ sever .Viết lại những tệp nhật ký để ẩn dấu vết.Thêm một người sử dụng trong trung tâm dữ liệu với quyền ghi để sử dụng sau này.Xóa những tệp quan trọng trên sever.Xóa sever và đánh sập nó.Sử dụng tích phù hợp với những sever / API khác (ví dụ: sử dụng những khóa Sendgrid của sever để gửi thư rác).Thay đổi một biểu mẫu đăng nhập duy nhất trong ứng dụng web thành một biểu mẫu lừa đảo gửi mật khẩu ko được mã hóa tới website.Khóa quản trị viên và tống tiền họ.

Như chúng ta thậm chí thấy, injection lệnh là một trong những kiểu tiến công nguy hiểm nhất mà hacker với trong bộ dụng cụ của họ. Nó đứng đầu trong mọi thang Reviews rủi ro về lỗ hổng bảo mật và sẽ kế tiếp ở đó trong một thời hạn dài tới đây, trong cả với những phương pháp hạn chế và giảm thiểu được vận dụng trên những sever web tân tiến.

Một trong những phương pháp hạn chế và giảm thiểu điều này trên những hệ điều hành dựa trên Unix là một khối hệ thống phân quyền mạnh thậm chí hạn chế và giảm thiểu một số trong những rủi ro bằng phương pháp hạn chế thiệt hại thậm chí tạo ra bởi một enpoint bị xâm phạm. Hệ điều hành dựa trên Unix cho phép vận dụng những quyền cụ thể cho tệp, thư mục, người sử dụng và lệnh. Việc thiết lập đúng đắn những quyền này thậm chí loại bỏ nguy hại của nhiều mối mối đe dọa trước đó bằng phương pháp buộc một API chạy với tư cách người sử dụng không tồn tại độc quyền. Thật rủi ro, hầu hết những ứng dụng với nguy hại injection lệnh ko tiến hành công việc này để tạo hồ sơ quyền người sử dụng nâng cao cho mã của họ.

Cùng đi thời gian nhanh qua một ví dụ đơn giản và giản dị khác về injection code:

const exec = require(“child_process”).exec;const fs = require(“fs”);const safe_converter = require(“safe_converter”);/** Upload a video to be stored on the server.** Makes use of the `safe_converter` library to convert the raw video* prior to removing the raw video from disc and returning an HTTP 200status* code to the requester.*/app.post(“/uploadVideo”, function (req, res) { if (!session.isAuthenticated) { return res.sendStatus(401); } /* * Write the raw video data to disk, where it can be later * compressed and then removed from disk. */ fs.writeFileSync(`/videos/raw/${req.toàn thân.name}`, req.toàn thân.video); /* * Convert the raw, unoptimized video—resulting in an optimized * video being generated. */ safe_converter.convert(`/videos/raw/${req.toàn thân.name}`, `”/videos/converted/${req.toàn thân.name}`) .then(() => { /* * Remove the raw video file when it is no longer needed. * Keep the optimized video file. */ exec(`rm /videos/raw/${req.toàn thân.name}`); return res.sendStatus(200); });});Mang một số trong những thao tác trong ví dụ này:

Chúng ta ghi dữ liệu video vào disk trong thư mục / videos / raw.Chúng ta chuyển đổi tệp video, ghi ra / video/converted.

Xem thêm: Windows Live Hotmail Là Gì ? Đăng Ký, Đăng Nhập, Sử Dụng Như Thế Nào?

// name to be sent in POST requestconst name = “myVideo.mp4 && rm -rf /videos/converted/”;Trong quy trình thực thi mã, một đầu vào được sanitized đúng cách dán ở trên đây thậm chí kéo theo những lệnh bổ sung cập nhật được thực thi so với hệ điều hành chủ — do đó mang tên là “command injection”.

Về Viettingame.com

Viettingame.com - Chuyên trang web tổng hợp những thông tin hữu ích trên internet như thông tin về game, tin tổng hợp
Xem tất cả các bài viết của Viettingame.com →

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *