SQL Injection là gì? Cách bảo mật website an toàn trước lỗ hổng này

Khi nói về vấn đề bảo mật an ninh mạng cho nền tảng website thì không thể không nhắc đến cuộc tấn công của SQL Injection. Bởi SQL Injection được cho là kiểu tấn công website nguy hiểm nhất hiện nay và gây ra hậu quả, thiệt hại rất lớn.

Tình trạng website bị tấn công bởi SQL Injection ngày càng trở nên phổ biến, tuy nhiên nhiều người chưa nhận thức được sự nguy hiểm của nó hoặc chưa biết cách để khắc phục và phòng tránh SQL Injection để giúp doanh nghiệp luôn an toàn và tránh những tác động xấu. Bài viết dưới đây, LPTech sẽ giúp bạn hiểu rõ hơn về SQL Injection và cách để bảo mật website an toàn trước lỗ hổng này.

SQL Injection là gì? 

SQL Injection (viết tắt SQLi) là kỹ thuật tấn công web lợi dụng lỗ hổng trong việc kiểm tra dữ liệu đầu vào (Input) của ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu, làm sai lệch các câu truy vấn ban đầu bằng SQL.

SQL Injection cho phép kẻ tấn công chèn vào các đoạn mã SQL bất hợp pháp và thực hiện các thao tác như nhà quản trị web. Với mục đích khai thác lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu, khai thác và lấy cắp thông tin, dữ liệu hoặc tệ nhất là chiếm quyền cơ sở dữ liệu.

SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao tác người tấn công chỉ cần được thực hiện với một trình duyệt web. Theo như các nhà nghiên cứu về SQL Injection thì có đến gần 50% các vụ tấn công bảo mật liên quan đến SQL Injection.

Nguyên nhân gây ra lỗi SQL Injection

Lỗi bắt nguồn từ mã nguồn của ứng dụng web chứ không phải từ phía database, chính vì thế bất cứ thành phần nào của ứng dụng mà người dùng có thể tương tác được để điều khiển nội dung. Dưới đây là các nguyên nhân gây ra lỗi SQL:

Không kiểm tra dữ liệu đầu vào (Input)

Đây là dạng lỗi SQL Injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng.

Xử lý không đúng trọng tâm

Lỗi SQL injection dạng này thường xảy ra do lập trình viên định nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng nhập vào có phải là số hay không.

Lỗi bảo mật bên trong máy chủ

Đôi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là trường hợp hàm mysql_real_escape_string()của các máy chủ MySQL. Điều này sẽ cho phép kẻ tấn công có thể thực hiện một cuộc tấn công SQL injection thành công dựa trên những ký tự Unicode không thông thường ngay cả khi dữ liệu đầu vào đã được kiểm soát.

Ảnh hưởng, hậu quả của SQL Injection gây ra.

SQL Injection tấn công bằng hình thức chèn, gửi lệnh SQL mang tính độc hại tới máy chủ thông qua việc lợi dụng thao tác đăng nhập, đăng ký,...từ phía người dùng. Bởi vậy nó sẽ tác động và gây ảnh hưởng rất lớn đến thông tin và dữ liệu thống gây ra những hậu quả rất nghiêm trọng.

SQL Injection cho phép kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng, gây ra những thiệt hại lớn khiến những dữ liệu trong database bị lộ ra ngoài.

Sự tấn công của SQL không những cho phép những kẻ tấn công đọc được, chỉnh sửa được dữ liệu. Họ có thể lợi dụng điểm này để xóa toàn bộ dữ liệu và làm cho hệ thống web ngừng hoạt động, tạo các bảng dữ liệu mới nó có thể điều khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn.

Việc lộ thông tin gây ảnh hưởng rất lớn đến hình ảnh, uy tín, bảo mật công ty, doanh nghiệp bạn. Khi thông tin và dữ liệu của khách hàng bị lộ, họ sẽ không tin tưởng và sử dụng dịch vụ của bạn nữa. Khách hàng họ thường để chung một mật khẩu cho nhiều tài khoản nên khi bị lỗ một tài khoản thì những tài khoản còn lại cũng vậy. Bởi vậy khách hàng sẽ bị ảnh hưởng rất lớn từ đó họ sẽ không sử dụng dịch vụ của công ty dẫn đến phá sản chủ doanh nghiệp.

Cách thức hoạt động và tấn công của SQL Injection

SQL Injection là một trong số những lỗi bảo mật phổ biến nhất. Xác suất gặp phải lỗ hổng bảo mật loại này trong một website là khá cao, bởi vậy doanh nghiệp nào cũng nên cảnh giác cao và để ngăn chặn được lỗ hổng bảo mật thì bạn phải nắm được cách thức hoạt động và tấn công của SQL Injection.

Cách thức hoạt động của SQL Injection

SQL Injection hoặt động như sau:

  1. Tìm kiếm mục tiêu: tìm kiếm các trang web cho phép việc submit dữ liệu ở bất kỳ trình duyệt nào chẳng hạn như các trang login, search, feedback,...
  2. Kiểm tra chỗ yếu của trang web: Thử gửi các file, tên đăng nhập, mật khẩu, field id, bằng hi' or 1=1-- . Nếu site chuyển sang tham số file ẩn, hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp.
  3. Thi hành lệnh từ xa của SQL Injection: Thông qua các yêu cầu của người dùng được cho phép bởi website, máy chủ cơ sở dữ liệu sẽ được gửi đến lệnh SQL độc hại.
  4. Nhận output của SQL: Có thể sử dụng sp_makewebtask để ghi các output của SQL query ra một file HTML, lưu ý folder "share" phải được share trước đó.
  5. Nhận dữ liệu qua “database using ODBC error message”: Nhập các thông tin quan trọng từ các thông báo lỗi của máy chủ SQL để nhập tên của table.
  6. Xác định tên của column trong table: Table INFORMATION_SCHEMA COLUMNS chứa tên của tất cả các column trong table. Xác định và khai thác tên của các cột có trong table.
  7. Thu thập các dữ liệu quan trọng: Sau khi xác định được tên của column và table, kẻ tấn công có thể dễ dàng thu thập được những thông tin quan trọng.
  8. Nhận các ký tự alphabet và numeric string: nhằm gây thất bại cho quá trình chuyển đổi từ từ text sang số của máy chủ.
  9. Thay đổi dữ liệu của CSDL: Khi đã có tên của tất cả các column trong table, có thể sử dụng lệnh update hoặc insert để sửa đổi/tạo mới một record vào table.

Các hình thức tấn công của SQL Injection

SQL Injection có thể tấn công bất cứ lúc nào qua các hình thức sau đây:

Vượt qua kiểm tra lúc đăng nhập (Bypass Login)

Dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. Thông thường để cho phép người dùng truy cập vào các website được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu.
Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Điểm sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện.

Dạng tấn công thu thập thông tin dựa trên các phản hồi từ database

Các database đều có tính năng thông báo lỗi xảy ra trong quá trình truy vấn dữ liệu. Mục đích của tính năng này là giúp người quản trị có thể dễ dàng nhận biết và sửa lỗi dễ dàng hơn. Tuy nhiên, nó lại là một điểm yếu bị lợi dụng trong các cuộc tấn công SQL Injection.
Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng sử dụng các câu lệnh SQL thông thường, biết cách lợi dụng sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công.

Cách bảo mật website an toàn trước lỗ hổng này.

Hiện nay có nhiều Framework hiện đại không ngừng đưa ra những giải pháp mặc định để phòng chống lại SQL Injection, tuy nhiên để đảm bảo an toàn trước cuộc tấn công thì bạn phải nắm được cách để phát hiện các lỗ hổng từ đó tìm ra cách khắc phù hợp giúp website được bảo mật an toàn.

Cách phát hiện lỗ hổng SQL

Phần lớn các lỗ hổng SQL Injection được tìm thấy nhanh chóng và đáng tin cậy bằng cách sử dụng trình quét lỗ hổng web có sẵn trên internet. SQL có thể được phát hiện thủ công bằng cách kiểm tra toàn bộ hệ thống vào mọi thời điểm trong ứng dụng:

  1. Gửi ký tự trích dẫn duy nhất ‘ và tìm kiếm lỗi hoặc bất thường khác.
  2. Đệ trình một số cú pháp dành riêng cho SQL để đánh giá giá trị cơ sở (bản gốc) của điểm nhập và đến một giá trị khác và tìm kiếm sự khác biệt có hệ thống trong các phản hồi của ứng dụng.
  3. Đệ trình các điều kiện Boolean như OR 1 = 1 và OR 1 = 2 và tìm kiếm sự khác biệt trong phản hồi của ứng dụng.
  4. Gửi tải trọng được thiết kế để kích hoạt độ trễ thời gian khi được thực hiện trong truy vấn SQL và tìm kiếm sự khác biệt về thời gian thực hiện để phản hồi.
  5. Gửi tải trọng được thiết kế để kích hoạt tương tác mạng ngoài băng khi được thực hiện trong truy vấn SQL và giám sát mọi tương tác kết quả.

Cách bảo mật website an toàn, ngăn chặn lỗ hổng SQL

Để bảo mật website một cách an toàn trước lỗ hổng SQL cần dựa vào các kênh Input từ phía người sử dụng. Dưới đây là cách các để ngăn chặn lỗ hổng nguy hiểm này:

  1. Không được tin tưởng những input người dùng nhập vào: bạn cần làm là xác thực mọi dữ liệu trước khi sử dụng câu lệnh SQL. Bạn cần nhìn nhận các dữ liệu nhập vào hệ thống đều là các yếu tố độc hại, bởi nó sử dụng rất nhiều yếu tố như cookie, chuỗi tham vấn, các tệp tin được tải lên hay Input bị ẩn.
  2. Sử dụng các thủ tục được lưu trữ: có thể trừu tượng hóa các lệnh SQL và xem xét toàn bộ input. Nhờ đó không gây ảnh hưởng đến cú pháp lệnh SQL.
  3. Chuẩn bị sẵn các lệnh: tạo truy vấn SQL như hành động đầu tiên và xử lý toàn bộ dữ liệu đã được gửi tương tự như những tham số.
  4. Thông báo lỗi đúng: các thông báo lỗi phải tuyệt đối chính xác thông tin, chi tiết nhạy cảm và vị trí xảy ra lỗi trên thông báo lỗi.
  5. Giới hạn quyền truy cập: chỉ các tài khoản có quyền truy cập mới được kết nối cơ sở dữ liệu, để giảm thiểu những lệnh SQL được thực thi tự động trên server.
  6. Loại bỏ các ký tự meta và extend: khi nhận được các input người dùng, các tham số từ URL hay các giá trị từ cookie thì bạn cần loại bỏ các ký tự meta và extend như /\, NULL, LF, CR,... trong các string.
  7. Chuyển các giá trị numeric sang integer hoặc dùng ISNUMERIC: trước khi Query SQL để chắc chắn nó là một integer.
  8. Xóa các stored procedure trong database master không dùng như xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask.

>>> Bài viết hữu ích: Nâng cấp webiste để tránh rủi ro bảo mật và tấn công mạng

SQL Injection là một trong lỗ hổng phổ biến và nguy hiểm đối với website, chính bởi vậy những nhà lập trình phải trang bị cho mình đầy đủ kiến thức về lỗ hổng SQL này. Hy vong bài viết dưới đây sẽ giúp bạn hiểu rõ hơn về SQL Injection để đảm bảo an toàn cho website.

Thông tin liên hệ

Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .

Công ty TNHH TMĐT Công nghệ LP

Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.

Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC

Hotline: 0338 586 864

Mail: sales@lptech.asia

Zalo:LP Tech Zalo Official

Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.

Bài viết cùng chuyên mục

Chiến lược giá là gì? Cách xây dựng chiến lược...

Chiến lược giá là chiến lược quan trọng giúp xác định được mức giá bán ra của sản phẩm. Vậy vai trò của chiến lược giá là gì? Cách xây...

Collab là gì? Vai trò của Collab đối với doanh...

Collab là gì? Collab - viết tắt của Collaboration, là sự hợp tác giữa tổ chức với tổ chức, cá nhân với cá nhân hoặc tổ chức với cá nhân...

Hotmail là gì? Cách đăng ký tài khoản và sử dụng...

Hotmail là một ứng dụng được cung cấp bởi Microsoft từ năm 2007. Hotmail hoạt động như một công cụ giúp người dùng gửi và nhận thư điện...

Outlook là gì? Phần mềm Microsoft Outlook sử dụng...

Outlook là phần mềm gửi và nhận thư điện tử được phát triển bởi Microsoft, hỗ trợ việc giao tiếp qua lại giữa các cá nhân, tổ chức. Tìm...

Discord Là Gì? Hướng Dẫn đăng ký tài khoản và Sử...

Discord là một ứng dụng giao tiếp và trò chuyện qua tin nhắn hay cuộc gọi video miễn phí với nhau bằng giọng nói hoặc văn bản, cho người...

Những cách tải video YouTube về điện thoại,...

Hướng dẫn cách tải video trên Youtube về điện thoại, máy tính đơn giản, miễn phí. Lưu ý và cách thay đổi thư mục lưu video tải trên...

Bài viết mới nhất


Top 15 phần mềm quản lý KPI miễn phí cho doanh...

Phần mềm quản lý KPI giúp doanh nghiệp kiểm tra và đánh giá các chỉ số đo lường hiệu quả (KPI) của mình liên tục và dễ dàng. Xem ngay top 15 phần mềm!

Fiverr là gì? Cách tạo tài khoản kiếm tiền từ...

Fiverr là nền tảng cung cấp việc làm cho freelancer lớn nhất thế giới hiện nay. Trên đây, freelancer có thể tìm kiếm các công việc đa lĩnh vực để...

ID Zalo là gì? Cách đăng nhập và lấy ID Zalo Me...

ID Zalo có thể được hiểu là username riêng của từng tài khoản Zalo. Hướng dẫn cách đăng nhập và lấy ID Zalo Me đơn giản trên điện thoại theo 5 cách...

Cách tải và sử dụng remote desktop trên win 10...

Remote desktop giúp công ty dễ dàng quản lý hệ thống máy tính từ xa, nhằm tiết kiệm thời gian và đảm bảo tính bảo mật. Hướng dẫn cách tải và sử...

NodeJS là gì? Tổng hợp kiến thức cơ bản về Node.JS

Node JS là nền tảng phát triển dựa trên V8 Javascript engine của Chrome. Nó là nền tảng có thể mở rộng và được dùng để phát triển thêm nhiều ứng...

10+ Công cụ xóa nền, tách phông ảnh online miễn...

Trong một số bức ảnh cần tách chủ thể ra thì ta có thể xóa nền. Hướng dẫn xóa background, tách nền ảnh, xóa phông online bằng các công cụ miễn phí.

Cách tạo tài khoản gmail không cần số điện...

Hướng dẫn cách tạo tài khoản Gmail không cần dùng số điện thoại trên điện thoại Android, iOS và PC. Lưu ý khi tạo tài khoản Gmail không số điện thoại.

Mạng máy tính là gì? Thành phần và lợi ích của...

Mạng máy tính là gì? Đây là hệ thống hoạt động bằng cách kết nối nhiều thiết bị máy tính lại với nhau để trao đổi và chia sẻ dữ liệu, tài nguyên,...

Dropbox là gì? Cách tải và sử dụng Dropbox trên...

Dropbox là một công cụ lưu trữ hoạt động được trên cả trình duyệt web và trên ứng dụng tải về. Cho phép người dùng tải lên dữ liệu và chia sẻ dễ dàng

Scam là gì? Cách nhận biết các loại Scam phổ...

Scam là gì? Scam hay còn được gọi là lừa đảo, là thuật ngữ chỉ hành vi lợi dụng, gian lận thông tin nhằm chiếm đoạt tài sản. Vậy làm sao để nhận...