INJECTION LÀ GÌ

     

Trong trở nên tân tiến phần mềm, các bạn thường giỏi nghe đến các khái niệm Dependency Injection, SQL Injection, etc nhưng thiếu hiểu biết nó như thế nào.

Bạn đang xem: Injection là gì

Thực ra những cơ chế này thì vốn rất đơn giản, chả bao gồm gì quánh biệt.Bài viết này mình sẽ lý giải về nguyên lý Injection với Ví dụ tương quan trong Software Engineering

Ai yêu cầu đọc bài xích này:

Dành cho dân siêng đã biếtrồi có cách để tiết kiệm time để phân tích và lý giải hoặc chém cho chúng ta không biết gì.Dân ko chuyên, đắn đo gì có thể hiểu với tự tin chém về các nguyên tắc Injection trong Software Engineering.Dành cho việc tìm hiểu thêm giúp các bạn lười giải thích share cho nhau.

I. Injection là gì?

Trước hết các bạn cần hiểu Injection là gì?

Injection dịch trằn từ giờ Anh thì là việc tiêm chích, tiêm nhiễm. Ex: tiêm thuốc phòng, tiêm chích ma túy, etc.

Kết trái của việc tiêm này thì có thể mang lại hiệu ứng tốt hoặc xấu tùy vào bản thân tiêm thuốc tốt là ma túy hoặc tiêm thuốc độc dành cho việc tử hình các tử tù làm việc Việt Nam hay như là một số nước trên cụ giới.

Nhìn 1 cách khái quát hơn, quy trình tiêm là đến thuốc hoặc kích thích vào hệ tuần trả máu của khung người và lợi dụng hệ tuần trả máu này nhằm làm đổi khác (tốt hoặc xấu) mang đến cơ thể.

Tuy nhiên ví dụ ở trên là tôi đang nói tới việc tiêm thuốc dịch nai lưng tiếng anh là Vaccine Injection. Nó chỉ là một trong những trường đúng theo của Injection trong giờ Anh thôi.

Thật ra Injection trong tiếng Anh thì có thể tiêm (injection) tương đối nhiều các nhiều loại khác ngoài thuốc. Ví dụ như trong Software Engineering thì có các khái niệm như SQL Injection, OS command Injection, Dependency Injection.

Do tự vựng giờ đồng hồ việt tiêu giảm nên tín đồ ra dịch là tiêm, với chỉ có từ tiêm thuốc là map với injection yêu cầu mọi tín đồ chỉ nghĩ mang lại là câu hỏi tiêm thuốc. Cùng hiện chưa xuất hiện từ như thế nào để maps với tự injection này nên khiến cho mọi tín đồ bị hiểu lầm là việc tiêm thuốc (vốn chỉ là một trong những trường hợp cụ thể của injection trong giờ Anh). Nói chung bài toán phối giống đến gà tuyệt thụ tinh ở fan thì tiếng anh cũng rất có thể gọi là 1 quy trình injection do tác động vào nguyên lý sinh sản bao gồm sẵn.

Tôi thì không phải là nhà ngôn ngữ học yêu cầu cũng không đủ can đảm định nghĩa thêm từ tiếng việt như thế nào đáp ứng chính xác với từ Injection. Cho nên vì thế từ những đoạn tiếp sau tôi sẽ sử dụng từ Injection đến nó phân minh với tự "tiêm" trong tiếng Việt nhé.

Nói một cách trừu tượng hóa Injection là việc tác động mang đến đến cơ chế gồm sẵn và lợi dụng cơ chế này cho 1 mục đích nào đó.

Như trường vừa lòng tiêm dung dịch thì là cần sử dụng thuốc tác động đến hiệ tượng tuần hoàn máu. Cùng nhờ phương pháp này thuốc được vạc tán mọi cơ thể.

Ở trong trở nên tân tiến phầm mượt thì cơ chế này cũng y hệt như vậy. Nếu đọc như trên thì vẻ ngoài này thì vốn khôn xiết simple, chả gồm gì quan trọng đúng ko nào?

Đi sâu so với sâu thêm một chút thì để tiến hành được việc injection khá đầy đủ thì đã cần các đối tượng sau :

Đối tượng đề nghị inject.Lỗ hổng của cơ chế.Cơ chế sẵn có.

Tôi xin phép lấy một ví dụ trường vừa lòng tiêm thuốc (1 trong những trường hòa hợp của injection) thì đang như sau :

Đối tượng đề xuất inject: thuốc.Lỗ hổng: lỗ, ven huyết mạch để hoàn toàn có thể tiêm tác động ảnh hưởng vào hệ tuần hoàn.Cơ chế sẵn có: hệ tuần trả máu.

Ở đây tôi ko nói đến hiệu quả của việc injection bởi nói tầm thường mục đích sau cuối là đã tác động biến đổi đến vật chủ, tác dụng tốt hay xấu không bàn làm việc đây.

Như lấy ví dụ tôi nói trên thì quy trình tiêm thuốc mọi bạn đều không lưu ý đến 1 đối tượng người sử dụng rất quan trọng, đó là "lỗ hổng" - nói một bí quyết dễ hiểu..

Khi triển khai tiêm thì sẽ cần tìm lỗ ven mạch máu đầu tiên. Giả dụ như trên cơ thể không có 1 cái "lỗ" làm sao để hoàn toàn có thể chọc kim tiêm vào, thì sẽ không cách nào ảnh hưởng tác động vào hệ tuần hoàn máu để xong việc tiêm thuốc(injection).

Và trong những khái niệm về Injection vào Software Engineering thì mẫu "lỗ" cũng khá quan trọng, và bao giờ ban đầu việc injection thì bạn ta đang cần tìm đến cái "lỗ" thứ nhất như việc ban đầu quá trình giao phối của những loài động vật có vú.

Các phần tiếp theo tôi cũng nhắc đến những "lỗ" hổng này và chúng ta nhớ để ý nhé.

II - SQL Injection

SQL Injection thì trong Software Engineering thường kể đến lỗ hổng bảo mật thông tin của phầm mềm chất nhận được người dùng hoàn toàn có thể truy nhập thẳng vào cơ sở tài liệu (database) của cả khối hệ thống nhằm đánh cắp thông tin, phá hoại hệ thống.

Trước hết giành cho ai không biết, SQL ở đây là các câu lệnh dùng để làm truy nhập vào database của 1 hệ thống.

*

Cũng hệt như việc tiêm thuốc, thay bởi inject thuốc thì rất có thể inject những câu lệnhSQL từ bên ngoài thông qua hình thức truy nhập cơ sở tài liệu của phần mềm. Các đối tượng người sử dụng trong câu hỏi injection này bao gồm :

Đối tượng đề xuất inject: các câu lệnh SQL.Lỗ hổng: các nguồn input từ người tiêu dùng bên ngoài. Ex: nhập user name, password, nhập thông tin trên trang web, phần mềm.Cơ chế sẵn có: nguyên tắc truy nhập đến cơ sở tài liệu của hệ thống.

Ví dụ như khi tôi viết blog trên website này. Tôi thay vị viết văn bản blog mà ráng vào đó, thêm các câu lệnh SQL biến hóa database của hệ thông web nhằm sửa 1 topic của mình thì rank cao nhất, rate tối đa để ăn tiền công viết chẳng hạn.

Xem thêm: Ở Phương Đó Hãy Tha Thứ Ch O Phuong Do Hay Tha Thu Cho Anh (Lâm Chấn Khang)

Cũng hệt như việc tiêm dung dịch thôi, thay do tôi tiêm (inject) thuốc nhằm chữa căn bệnh hay làm chết bạn thì tôi Inject SQL vào hệ thông để chỉnh sửa data của hệ thống hoặc làm chết hệ thống.

Về phương diện bảo mật thông tin khi mà bạn dùng thoải mái và dễ chịu lấy hoặc cụ data của hệ thống thông qua bài toán inject các câu lệnh SQL như bên trên là cực kỳ nguy hiểm.

Ví dụ: đánh tráo thông tin, sửa dổi tài khoản trên hệ thống tài chính, ngân hàng. Ăn cắp bảng lương của doanh nghiệp thông qua trang web thống trị của công ty.

Như tôi đã nhắc tới ở bên trên lỗ hổng rất quan trọng để tiến hành việc injection, tại đây lỗ hổng là từ input đầu vào của bạn dùng, khi mà tín đồ dùng thoải mái và dễ chịu inject các câu lệnh SQL để biến hóa cả hệ thống.

Cho đề xuất về phương diện bảo mật tin tức thì việc kiểm tra, validate những nguồn input đầu vào này của người dùng để ngăn chặn truy nhập thẳng vào là rất quan trọng. Tương tự còn tồn tại khái niệm khác về bảo mật thông tin như OS Command Injection, trường hòa hợp này do đó inject những câu lệnh điện thoại tư vấn đến hệ điều hành của hệ thống nhằm giật quyền kiểm soát điều hành hoặc phá hoại. Về nguyên lý nó vốn đơn giản dễ dàng như việc tiêm đã lý giải ở phần I.

III - Dependency Injection

Để hiểu được về nguyên tắc Dependency Injection trước hết bạn phải hiểu trước về nguyên lý Dependencyinversion. Tuy nhiên về Dependencyinversion thì lại là tư tưởng hơi ngùng ngoằng 1 chút, nhưng nó vấn solo giản.

Để lý giải tôi bước đầu với ví dụ như sau:

Bạn là ông chủ của công ty, hằng ngày cứ cho chiều về phải xem lại tin tức tổng kết lệch giá của công ty. Và để làm được thư ký kết của bạn sẽ phải phun mail tổng kết hàng ngày. Tuy vậy ngày nào các bạn cũng yêu cầu mất công giục bạn thư ký bắt buộc viết báo cáo đúng giờ, rồi thời gian thì cần thông tin này thời điểm thì cần tin tức kia. Nói chung là quá trình của các bạn rất phụ thuộc vào vào chúng ta thư ký.

Thời gian sau đó bạn rút kinh nghiệm tay nghề sâu sắc, biên soạn template, ra cách thức về thời gian report bắt thư ký đề xuất làm theo. Và sau đó cứ cho chiều là bạn xem thông tin tổng kết doanh thu của người tiêu dùng mà không cần phải giục hay phụ thuộc nhiều vào thư ký kết nữa.

Như vậy có phải là sự nhờ vào vào các bạn thư ký đã trở nên đảo ngược đúng không? các bạn thư ký sẽ yêu cầu tuân theo những điều kiện mà chúng ta qui định vắt vì bạn phải đuổi theo và giục thư cam kết viết báo cáo.

Quá trình đảo ngược sự phụ thuộc vào này trong phần mềm gọi là nguyên lý dependency inversion. Module call sẽ chuyển ra những phương thức, qui định để dependency module nên tuân theo khi thực hiện 1 chức năng nào đó của phần mềm.

Như trong lấy ví dụ như trên thì sau khoản thời gian ra những qui định bên trên thì chúng ta cũng có thể thay nạm bất ký kết cô thư ký nào miễn là vừa lòng điều kiện báo cáo đúng theo template với đúng giờ. Nói theo cách khác khác bạn cũng có thể inject bất kỳ cô thư ký kết nào vào cách thức xem lại thông tin tổng kết lệch giá của công ty.

*

Khái quát lác thêm chút thì một cô thư ký ngẫu nhiên gọi là 1 trong sự phụ thuộc (dependency) trong hình thức xem lại tin tức tổng kết lệch giá của công ty.

Cơ chế nhưng injectDependency trên gọi là Dependency Injection.

Các đối tượng người sử dụng trong câu hỏi injection này bao gồm :

Đối tượng đề nghị inject: thư ký.Lỗ hổng: các quy định về template, ngày giờ report dành cho một thư cam kết bất kỳ.Cơ chế sẵn có: việc xem lại tin tức tổng kết lệch giá của công ty.

Thế còn về Software enginering thì sao? thiệt ra nguyên lý nó vãn như trên. Trong 1 phần mềm thì thường được thiết kế chia thành nhiều các thành phần bé dại gọi là những module/class. Những module/class thường xuyên sẽ hotline nhau để triển khai 1 công dụng của phần mềm.

Ví dụ: như khi người tiêu dùng login vào trang web này ví dụ điển hình thì thường sẽ sở hữu được ít độc nhất 2 module sau điện thoại tư vấn nhau bao gồm:

Module chính (làm trọng trách login, đúng đắn username/password).Module truy nã nhập vào các đại lý dữ liệu.

Module chính sẽ hotline đến module truy vấn nhập vào cửa hàng dữ liệu để lấy username/password rồi kiểm tra tất cả hơp lệ nhằm login tốt không. Module được gọi đến ví dụ là module tầm nã nhập vào cơ sở tài liệu thì điện thoại tư vấn là 1dependency module giỏi còn dịch là module phụ thuộc vào của module chính.Dependency Injection là phép tắc inject bất kỳdependency module không giống vào cơ chế gọi cho nó.

Để có tác dụng được điều đó như những đã giải thích về qui định injection trong phần I thì nhằm thực hiên được sẽ cần phải có 1 chiếc "lỗ" hổng, để tạo nên lỗ hổng này sẽ buộc phải dựa trên nguyên tắc dependency inversion (sự đảo ngược phụ thuộc) trong software design.

Cụ thể lỗ hổng được tạo thành ở đây là các phương thức, phương pháp mà dependency module bắt buộc phải hỗ trợ cho phép tắc gọi đến nó. Trong software design thì call là interface qui định các phương thức giữa 2 module.

Ví dụ như trong phép tắc login, dependency module sẽ cần cung ứng cácinteface bao gồm phương thức để khám nghiệm username, password vào database.

Các đối tượng trong việc injection của phép tắc login bao hàm :

Đối tượng đề nghị inject : dependency module mà truy nhập vào cửa hàng dữ liệu.Lỗ hổng :inteface qui định những phương thức màdependency module bắt buộc follow và hỗ trợ (dựa trên nguyên tắc Dependency Inversion đang nói sinh sống trên)Cơ chế sẵn bao gồm : qui định login vào hệ thống.

Xem thêm: Onboard Là Gì Và Cấu Trúc Cụm Từ On Board Trong Câu Tiếng Anh

Kết luận

Cơ chế Dependency Injection này siêu có ý nghĩa trong bài toán phát triển ứng dụng khai mà các đội trong dự án trở nên tân tiến song tuy vậy các module, unit chạy thử hoặc việc gia hạn thay đổi, không ngừng mở rộng source code của module này nhưng mà không bị tác động đến module khác.

Như tôi đang ví dụ cho trường phù hợp sếp cùng thư ký kết ở trên thì các chúng ta cũng có thể thấy cơ Dependency Injection này cực kỳ có ý nghĩa ngay cả vào đời sống nên không?

Khái niệm Dependency Injection này vẫn dễ dàng và đơn giản như việc tiêm dung dịch đúng không?

Nếu đọc rồi thì nhớ lượt thích và mô tả nhé để tôi còn có động lực viết các blog không giống :)