Theo dõi Top Thủ Thuật để cập nhật các Thủ Thuật mới nhất nhé!
Theo dõi
Top Thu Thuat
  • Thủ Thuật
    • Thủ Thuật Điện Thoại
    • Thủ Thuật Phần Mềm
    • Thủ Thuật internet
    • Thủ Thuật Tiện Ích
  • Network
  • Security
  • Công Nghệ
  • Kiến Thức
  • Ứng Dụng
  • Office
    • Học Word
    • Học Excel
    • Học Power Point
  • Game Offline
    • Code Game
    • Game Nhập Vai
    • Kinh Nghiệm Chơi Game
No Result
View All Result
Top Thủ Thuật
  • Thủ Thuật
    • Thủ Thuật Điện Thoại
    • Thủ Thuật Phần Mềm
    • Thủ Thuật internet
    • Thủ Thuật Tiện Ích
  • Network
  • Security
  • Công Nghệ
  • Kiến Thức
  • Ứng Dụng
  • Office
    • Học Word
    • Học Excel
    • Học Power Point
  • Game Offline
    • Code Game
    • Game Nhập Vai
    • Kinh Nghiệm Chơi Game
No Result
View All Result
Top Thủ Thuật
No Result
View All Result
Home Thủ Thuật

SQL Injection là gì? Làm thế nào để ngăn chặn lỗ hổng SQL Injection

Funky Boy by Funky Boy
28 Tháng Tám, 2022
in Thủ Thuật
0 0
0
SQL Injection là gì? Làm thế nào để ngăn chặn lỗ hổng SQL Injection
0
SHARES
0
VIEWS
Share on FacebookShare on Twitter
Rate this post

Các lỗ hổng SQL injection phát sinh khi bạn tạo ra các truy vấn cơ sở dữ liệu một cách không an toàn. Hiểu đơn giản là người dùng có thể xem được database của website bạn bằng cách nhập câu truy vấn vào URL hoặc form điền thông tin. Đừng coi thường SQL injection nhé vì nó nằm trong Top 10 lỗ hổng bảo mật web theo công bố OWASP 2020 đấy.

sql injection

Nội dung

  • Cách khai thác lỗ hổng SQL Injection
  • Làm thế nào để ngăn chặn lỗ hổng SQL injection?
  • Ví dụ đơn giản
  • Sử dụng Object Relational Mapping
  • Cảnh báo
  • Prepared statements
  • Web Application Firewall
  • Database Firewall
  • Kết luận

Cách khai thác lỗ hổng SQL Injection

Đơn giản nhất là dùng tool auto exploit SQLi. Mình thường dùng SQLmap, vì theo kinh nghiệm đây là tool có khả năng khai thác tốt nhất. Nhưng nhược điểm là bạn phải dùng lệnh thay vì giao diện.

Hoặc bạn có thể dùng công cụ SQL Dumper có giao diện với nhiều tính năng dễ thiết lập hơn. Nếu mới tìm hiểu bạn có thể dùng thử công cụ này để khai thác database của Website.

Làm thế nào để ngăn chặn lỗ hổng SQL injection?

Cách tốt nhất để ngăn chặn các lỗ hổng SQL injection là sử dụng framework cho phép bạn lọc dữ liệu đầu vào một cách an toàn trước khi đưa vào database. ORM (Object Relational Mapper) là một lựa chọn tốt mà bạn nên thử. Đối với các lớp bảo mật bổ sung, hãy xác thực tất cả đầu vào và sử dụng WAF (Web Application Firewall).

Ví dụ đơn giản

Giả sử mình có một ứng dụng Java cho phép người dùng truy xuất tài liệu của họ bằng ID. Mình có thể làm như thế này:

String query = "SELECT * FROM documents WHERE ownerId=" + authContext.getUserId() + " AND documentName="" + request.getParameter("docName") + """;
executeQuery(query);

Nếu ID người dùng là 25 và URL là https://www.example.com/documents/?docName=ABC123, thì truy vấn sẽ là:

SELECT * FROM documents WHERE ownerId=25 AND documentName="ABC123";

Vẫn ổn mà đúng không? Nhưng điều gì sẽ xảy ra nếu URL là https://www.example.com/documents/?docName=ABC123’OR’1’=’1?

Bây giờ mình sẽ nhận được truy vấn sau đây trả về tất cả các tài liệu của tất cả người dùng (vì 1 = 1 luôn đúng):

SELECT * FROM documents WHERE ownerId=25 AND documentName="ABC123" OR '1'='1';

Vậy làm thế nào để tránh lỗi này?

Xem Thêm:  Cách ép xung RAM - Overlock RAM giúp tăng tốc nhanh hơn

Sử dụng Object Relational Mapping

Lấy Java làm ví dụ, sử dụng ORM chẳng hạn như hibernate để triển khai JPA (Java Persistence API) có thể trông như thế này.

Đầu tiên, xác định model.

@Entity
public class Document {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  private String documentName;
  private Integer ownerId;
}

Sau đó, xác định class repository.

@Repository
public interface DocumentRepository extends JpaRepository<Document, Long> {
  List<Document> findByDocumentNameAndOwnerId(String documentName, Integer ownerId);
}

Cuối cùng, bạn có thể sử dụng repository và tìm nạp các tài liệu như sau:

List<Document> docs = documentRepository.findByDocumentNameAndOwnerId(request.getParameter("docName"), authContext.getUserId());

ORM sẽ xử lý tất cả các tham số một cách an toàn. Bây giờ, giả sử bạn muốn kiểm soát các truy vấn nhiều hơn. Trong trường hợp đó, nhiều ORM cung cấp trình tạo truy vấn mà bạn có thể sử dụng, chẳng hạn như Hibernate Criteria API.

Nếu bạn sử dụng Python, Django cũng có ORM tuyệt vời không kém; còn nếu bạn không sử dụng Django, sqlalchemy là một lựa chọn tuyệt vời.

PHP có Doctrine. Bạn chỉ cần google để tìm kiếm các ORM phù hợp với công nghệ mà bạn chọn.

Cảnh báo

Các framework ORM không hoàn hảo 100%.

Đầu tiên là chúng vẫn có chức năng hỗ trợ truy vấn SQL thô/query parts. Bạn chỉ cần tránh sử dụng các tính năng đó là được.

Thứ hai là các framework ORM thường có lỗ hổng bảo mật, giống như bất kỳ gói phần mềm nào khác. Vì vậy, hãy tìm hiểu các phương pháp hay khác: xác thực tất cả dữ liệu đầu vào, sử dụng WAF, cập nhật các package…

Prepared statements

Prepared statements là một sự lựa chọn thủ công hơn và nên tránh vì so với ORM, nó có nguy cơ mắc lỗi do con người cao hơn đáng kể. Tuy nhiên, cách này vẫn đánh bại phương pháp nối chuỗi đơn giản (như ví dụ trên). Cách tiếp cận này giống như sau:

String query = "SELECT * FROM documents WHERE ownerId=? AND documentName = ?";
PreparedStatement ps = conn.prepareStatement(query);
ps.setString(1, authContext.getUserId());
ps.setString(2, request.getParameter("docName"));
ResultSet rs = ps.executeQuery();

Về lý thuyết, cách này khá an toàn. Tuy nhiên, theo kinh nghiệm của mình, khi codebase phát triển lớn hơn, các sai lầm sẽ bắt đầu xuất hiện. Bạn chỉ cần một lần mắc sai lầm là hoàn toàn có thể bị tấn công. Các trường hợp như mảng (documentId IN (“foo”, “bar”)) là nơi dev thường mắc sai lầm.

Xem Thêm:  Control Panel trong win 8

Vì vậy, nếu bạn quyết định sử dụng phương pháp này, hãy cẩn thận với nó khi bạn mở rộng codebase.

Web Application Firewall

Các sản phẩm WAF không nên được coi là một biện pháp kiểm soát SQL injection tốt. Nhưng chúng là một lớp bổ sung bảo mật tuyệt vời và thường khá hiệu quả để chống lại các cuộc tấn công SQL injection.

Một giải pháp mã nguồn mở tuyệt vời là triển khai Apache với ModSecurity CRS trước webapp của bạn.

Database Firewall

Tùy thuộc vào database và ngân sách của bạn, bạn có thể cân nhắc dùng thử database firewalls. Mình thì chưa từng thử cái này, nhưng các bạn cũng có thể tìm hiểu link dưới, biết đâu nó sẽ giúp ích cho bạn.

Kết luận

SQL injection là một lỗ hổng injection đơn giản. Và giống như tất cả các lỗ hổng bảo mật khác, bạn có thể ngăn chặn nó bằng cách sử dụng một thư viện hoặc framework thích hợp để xây dựng protocol, trong trường hợp này là SQL.

ORM an toàn hơn prepared statements. Và nếu bạn không cần kiểm soát các truy vấn quá nhiều, hãy sử dụng ORM cấp thấp hơn thường được gọi là trình tạo truy vấn (query builder). WAF có thể thêm một lớp bảo mật, nhưng bạn đừng bao giờ dựa vào nó để bảo mật.

Cảm ơn các bạn đã theo dõi TOP Thủ Thuật trên đây là những chia sẻ của chúng tôi về SQL Injection là gì? Làm thế nào để ngăn chặn lỗ hổng SQL Injection. Hy vọng bài viết tại chuyên mục Thủ Thuật sẽ giúp ích được cho bạn. Trân trọng !!!

vote
Article Rating
ShareTweetPin
Funky Boy

Funky Boy

Tôi là Funky Boy luôn chia sẻ kiến thức về tất cả những gì liên quan đến công nghệ, như sử dụng máy tính, sử dụng điện thoại, thủ thuật để sử dụng Internet một cách hiệu quả nhất...giúp bạn có được những trải nghiệm mới thú vị và đạt được hiệu quả cao trong công việc

BÀI VIẾT LIÊN QUAN

Cách tạo Chữ ngược, chữ nghiêng, gạch dưới để đặt tên, chat
Thủ Thuật

Cách tạo Chữ ngược, chữ nghiêng, gạch dưới để đặt tên, chat

by Funky Boy
8 Tháng Chín, 2022
Tạo Phòng học ảo trên Zoom bằng Immersive View
Thủ Thuật

Tạo Phòng học ảo trên Zoom bằng Immersive View

by Funky Boy
8 Tháng Chín, 2022
Các lệnh nguy hiểm nhất trên Windows bạn không nên dùng
Thủ Thuật

Các lệnh nguy hiểm nhất trên Windows bạn không nên dùng

by Funky Boy
8 Tháng Chín, 2022
Cách tăng FPS trong game trên Laptop
Thủ Thuật

Cách tăng FPS trong game trên Laptop

by Funky Boy
8 Tháng Chín, 2022
6 thói quen hằng ngày khiến máy tính mau bị hỏng
Thủ Thuật

6 thói quen hằng ngày khiến máy tính mau bị hỏng

by Funky Boy
8 Tháng Chín, 2022
Cách ẩn lượt like trên Facebook
Thủ Thuật

Cách ẩn lượt like trên Facebook

by Funky Boy
8 Tháng Chín, 2022
Next Post
Cách chặn Update lên Windows 10 21H1 để tránh bị lỗi

Cách chặn Update lên Windows 10 21H1 để tránh bị lỗi

Subscribe
Connect with
I allow to create an account
When you login first time using a Social Login button, we collect your account public profile information shared by Social Login provider, based on your privacy settings. We also get your email address to automatically create an account for you in our website. Once your account is created, you'll be logged-in to this account.
DisagreeAgree
Notify of
guest
I allow to create an account
When you login first time using a Social Login button, we collect your account public profile information shared by Social Login provider, based on your privacy settings. We also get your email address to automatically create an account for you in our website. Once your account is created, you'll be logged-in to this account.
DisagreeAgree
guest
0 Comments
Inline Feedbacks
View all comments

Có thể bạn sẽ cần

Native app là gì? Những ưu nhược điểm nổi bật của Native app
Công Nghệ

Native app là gì? Những ưu nhược điểm nổi bật của Native app

by Funky Boy
30 Tháng Mười Một, 2022
0

Native app là gì được xem là câu hỏi được rất nhiều người quan tâm hiện nay khi tìm hiểu...

Read more

Đề xuất cho bạn

Native app là gì? Những ưu nhược điểm nổi bật của Native app

Native app là gì? Những ưu nhược điểm nổi bật của Native app

30 Tháng Mười Một, 2022
Cách Kiếm Tiền Online Cho Mẹ Bỉm Sữa Uy Tín Và Ổn Định

Cách Kiếm Tiền Online Cho Mẹ Bỉm Sữa Uy Tín Và Ổn Định

23 Tháng Mười Hai, 2022
Cách tạo Chữ ngược, chữ nghiêng, gạch dưới để đặt tên, chat

Cách tạo Chữ ngược, chữ nghiêng, gạch dưới để đặt tên, chat

8 Tháng Chín, 2022
Tạo Phòng học ảo trên Zoom bằng Immersive View

Tạo Phòng học ảo trên Zoom bằng Immersive View

8 Tháng Chín, 2022
Các lệnh nguy hiểm nhất trên Windows bạn không nên dùng

Các lệnh nguy hiểm nhất trên Windows bạn không nên dùng

8 Tháng Chín, 2022
Cách tăng FPS trong game trên Laptop

Cách tăng FPS trong game trên Laptop

8 Tháng Chín, 2022

TOP THỦ THUẬT

Top Thủ Thuật – Chia Sẻ Kiến Thức Công Nghê, Máy Tính, Phần Mềm

ĐỐI TÁC

✩ S666

✩ https://iwin68.ltd/

✩ Go88 tài xỉu

✩ IWIN

✩ VN138

✩ 789BET

✩ May 88

✩ Sunc888

✩ Sunwin tài xỉu

LIÊN KẾT

✩ QH88

✩ FAFA191

✩ Top game bài đổi thưởng 

✩ SV368

✩ IWIN88

✩ Tải IWIN86

✩ Ku fun

Thông tin liên hệ

• 247 Hàm Nghi, Mỹ Đình, Nam Từ Liêm, Hà Nội

• Email: [email protected]

• Mobile: 0878310247

• Website: https://topthuthuat.com.vn/

✩ Bong da lu

  • Giới Thiệu
  • Liên Hệ
  • Chính Sách
  • Game Bài đổi thưởng
  • 168bet
  • BK8
  • TWIN

© 2021 Top Thủ Thuật - Tải game Offline miễn phí

No Result
View All Result
  • Thủ Thuật
    • Thủ Thuật Điện Thoại
    • Thủ Thuật Phần Mềm
    • Thủ Thuật internet
    • Thủ Thuật Tiện Ích
  • Network
  • Security
  • Công Nghệ
  • Kiến Thức
  • Ứng Dụng
  • Office
    • Học Word
    • Học Excel
    • Học Power Point
  • Game Offline
    • Code Game
    • Game Nhập Vai
    • Kinh Nghiệm Chơi Game

© 2021 Top Thủ Thuật - Tải game Offline miễn phí

Welcome Back!

Login to your account below

Forgotten Password?

Create New Account!

Fill the forms bellow to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In
wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply