Cập nhật lần cuối: 20 Tháng 8, 2026

Spreadsheet Security Best Practices to Prevent Breaches & Data Leaks

Các Thực Hành Bảo Mật Bảng Tính Cho Nhà Phát Triển

Trang tính điều hành các hoạt động kinh doanh hiện đại. Từ dự báo tài chính và báo cáo hội đồng điều hành đến nhập khẩu người dùng hàng loạt, xuất khẩu thanh toán và bộ dữ liệu học máy, các định dạng như .xlsx, .xlsm và .csv là nền tảng cho quy trình doanh nghiệp. Do tính phổ biến này, các kỹ sư phần mềm thường xuyên viết mã để tạo, nhập, phân tích, chuyển đổi và xuất các tệp trang tính.

Tuy nhiên, các nhà phát triển thường coi trang tính như dữ liệu bảng vô hại — tương đương kỹ thuật số của một tệp văn bản thuần. Trên thực tế, các trang tính hiện đại là môi trường thực thi năng động có khả năng chạy các phép tính động, giải quyết các điểm cuối bên ngoài, gọi macro hệ thống và nhúng các đối tượng nhị phân tùy ý. Khi được xử lý một cách lơ là, các pipeline xử lý trang tính trở thành mục tiêu hấp dẫn cho các cuộc tấn công Remote Code Execution (RCE), Formula Injection (CSV Injection), Server-Side Request Forgery (SSRF), XML External Entity (XXE), và rò rỉ dữ liệu mật.

Dưới đây là hướng dẫn kỹ thuật về việc triển khai các biện pháp kỹ thuật phòng thủ khi xử lý bảng tính trong toàn bộ ngăn xếp phần mềm của bạn.

1. Trung Hóa Tấn Công Tiêm Công Thức (CSV & Spreadsheet Injection)

Formula Injection—thường được gọi là CSV Injection—xảy ra khi dữ liệu nhập từ người dùng không đáng tin cậy được ghi trực tiếp vào các ô bảng tính mà không được làm sạch đúng cách.

Khi người dùng cuối hoặc quản trị viên mở tệp được tạo trong Microsoft Excel, Google Sheets hoặc LibreOffice Calc, bất kỳ giá trị ô nào có tiền tố bằng các ký tự chức năng cụ thể sẽ được diễn giải và thực thi như một công thức hoạt động thay vì được hiển thị dưới dạng văn bản tĩnh.

Cơ Chế Đe Dọa

Kẻ tấn công sử dụng formula injection để thực hiện hai loại tấn công chính:

  1. Data Exfiltration: Tận dụng các hàm như HYPERLINK để lặng lẽ thêm dữ liệu nhạy cảm của các ô liền kề vào tham số truy vấn do kẻ tấn công kiểm soát.
  2. Command Execution: Sử dụng các công thức Dynamic Data Exchange (DDE) (ví dụ, trong cấu hình cũ) hoặc các liên kết xử lý giao thức để kích hoạt các tệp nhị phân hệ thống hoặc khởi chạy URL độc hại.

Các ký tự đầu nguy hiểm bao gồm:

  • = (Tính toán trực tiếp hoặc gọi hàm)
  • + (Phép cộng công thức hoặc gọi hàm ngầm)
  • - (Phép trừ công thức hoặc tiền tố phủ định)
  • @ (Gọi công thức mảng động trong các phiên bản Excel hiện đại)
  • \t (Ký tự Tab) hoặc \r (Ký tự carriage return) (được sử dụng để vượt qua các bộ lọc đơn giản)
  • | hoặc % (Các thao tác qua ống dẫn hoặc gọi shell trong các trình xem bảng tính dựa trên Unix)

Phòng thủ Kỹ thuật

  • Character Prefixing (Single-Quote Escaping): Nếu đầu vào chuỗi không tin cậy bắt đầu bằng =, +, -, @, \t, hoặc \r, hãy thêm một dấu nháy đơn (') vào đầu chuỗi trước khi ghi vào ô. Excel và LibreOffice coi dấu nháy đơn đầu tiên như một chỉ thị định dạng, buộc ô hiển thị chính xác dưới dạng văn bản nguyên gốc trong khi loại bỏ dấu nháy đơn khỏi đầu ra hiển thị.
  • Strict Serialization Libraries: Không bao giờ tạo tệp CSV hoặc XLSX bằng cách nội suy chuỗi thô (ví dụ, f\"{user_input_1},{user_input_2}\\n\"). Hãy dựa vào các thư viện tuần tự hoá bảng đã được kiểm chứng, chúng tự động quản lý việc thoát ký tự phân tách theo RFC 4180, bao bọc trường và nhân đôi dấu nháy.
  • Cell Type Enforcement: Khi tạo tệp OpenXML (.xlsx) một cách lập trình, hãy xác định rõ kiểu dữ liệu ô là String (hoặc InlineString) thay vì để engine suy đoán kiểu ô dựa trên giá trị.

2. Củng cố quy trình nhập liệu & bộ phân tích

Việc phân tích các bảng tính do người dùng tải lên làm lộ các bề mặt tấn công ở mức độ parser cho hệ thống backend. Các tệp .xlsx hiện đại là các kho lưu trữ ZIP nén chứa các tài liệu XML phụ thuộc lẫn nhau tuân theo Open Packaging Conventions (OPC).

Phân tích XML không đáng tin cậy trên backend sẽ mở các dịch vụ của bạn cho các lỗ hổng parser cổ điển nếu cấu hình parser để mặc định.

Chiến lược giảm thiểu:

  • Vô hiệu hoá DTD và Thực thể Ngoài (Phòng thủ XXE): Đảm bảo engine XML của bạn rõ ràng cấm Document Type Definitions (DTDs) và tắt việc giải quyết schema bên ngoài (disallow-doctype-decl = true, resolve-external-entities = false). Nếu không làm như vậy, một tệp .xlsx được tải lên có thể đọc các tệp máy chủ cục bộ (ví dụ /etc/passwd) hoặc thăm dò các dịch vụ đám mây nội bộ.
  • Bảo vệ khỏi các bom giải nén (ZIP Bombs): Người dùng độc hại có thể gửi các kho lưu trữ nhỏ bé mà khi giải nén sẽ tạo ra hàng chục gigabyte dữ liệu XML lặp lại, gây sập bộ nhớ và tiêu tốn không gian đĩa. Theo dõi số byte chưa nén trong quá trình giải nén và áp dụng giới hạn cứng cho cả kích thước kho lưu trữ nén và tổng dung lượng bộ nhớ đã giải nén.
  • Áp dụng Trình phân tích phát luồng: Tránh tải các bảng tính khổng lồ vào các biểu diễn Document Object Model (DOM) trong bộ nhớ. Đối với các nhập khẩu hàng loạt lớn, sử dụng phát luồng, dựa trên SAX, hoặc các bộ lặp từng hàng chia thành khối để giữ mức tiêu thụ bộ nhớ phía sau không đổi.

3. Kiểm soát macro và làm sạch nội dung hoạt động

Macro Visual Basic for Applications (VBA), tải trọng OLE (Object Linking and Embedding) và các script nhúng là một trong những vector tấn công kiên trì nhất trong máy tính để bàn.

Thực hành tốt nhất cho nhà phát triển:

  • Thực thi Chính sách Tiện ích Mở Rộng Chặt chẽ: Từ chối các định dạng tệp có macro (.xlsm, .xltm, .xlsb, hoặc các định dạng cũ .xls) tại cổng API của bạn trừ khi có yêu cầu kinh doanh đã được xác minh và không thể thay đổi để xử lý chúng.
  • Thực thi Định dạng .xlsx Sạch: Định dạng container chuẩn .xlsx được thiết kế cấu trúc không hỗ trợ macro. Bất kỳ mã macro nào có trong tệp .xlsx sẽ làm cho định dạng tệp không hợp lệ trong các công cụ Office tuân thủ.
  • Kiểm tra và Loại bỏ Các Luồng Hoạt động: Nếu dịch vụ của bạn xử lý các tệp đính kèm tùy ý, tích hợp một bước làm sạch tự động để loại bỏ các tệp nhị phân dự án VBA (vbaProject.bin), điều khiển ActiveX và các gói OLE nhúng trước khi lưu trữ các tệp vào bộ nhớ đối tượng hoặc phục vụ chúng cho các khách hàng khác.

4. Ngăn chặn SSRF trong quá trình xem trước không giao diện và chuyển đổi PDF

Các ứng dụng doanh nghiệp hiện đại thường cung cấp thẻ xem trước tài liệu hoặc tạo báo cáo PDF tự động. Để thực hiện điều này, các backend thường sử dụng bộ công cụ văn phòng không giao diện (ví dụ, LibreOffice ở chế độ headless) hoặc trình duyệt không giao diện.

Bảng tính có thể chứa các phụ thuộc bên ngoài động, chẳng hạn như công thức hình ảnh liên kết (=IMAGE("http://internal-host/...")), liên kết OData từ xa, hoặc khung web nhúng. Khi bộ xử lý không giao diện render bảng tính, nó có thể tự động lấy các tài nguyên liên kết này, gây ra Server-Side Request Forgery (SSRF).

Các biện pháp phòng thủ sâu:

  • Cách ly môi trường chuyển đổi: Chạy các dịch vụ render không giao diện trong các micro-container được cô lập hoặc các hàm serverless tạm thời được trang bị quyền hệ thống tối thiểu.
  • Thực thi cách ly mạng: Đặt các worker render tài liệu vào các subnet bị hạn chế mà không có quyền truy cập định tuyến tới VPC nội bộ của bạn, cơ sở dữ liệu riêng, hoặc endpoint metadata đám mây (169.254.169.254).
  • Vô hiệu hoá việc giải quyết tài nguyên từ xa: Gửi các cờ cấu hình tới engine render của bạn để cấm việc giải quyết tài nguyên dựa trên mạng (ví dụ, chỉ đạo LibreOffice từ chối tải tài nguyên bên ngoài trong quá trình xuất).

5. Bảo vệ bảng tính so với mã hóa tệp thực sự bằng mật mã

Một trong những hiểu lầm kéo dài nhất trong các đội sản phẩm là sự khác biệt giữa Worksheet/Workbook Protection gốc của Excel và Cryptographic Encryption.

Ảo tưởng về các ô “bị khóa”

Các tính năng "Protect Sheet" và "Protect Workbook" gốc của Excel là các tiện ích ở mức giao diện người dùng, được thiết kế để ngăn các chỉnh sửa không cố ý của nhân viên văn phòng. Chúng không sử dụng các rào cản truy cập mật mã. Một script cơ bản có thể loại bỏ các thẻ bảo vệ sheet trực tiếp từ các tệp XML nền trong một kho lưu trữ .xlsx chỉ trong vài giây, khiến các hạn chế trở nên vô hiệu trước việc can thiệp có chủ ý.

Bảo vệ mật mã thực tế:

  • Transport and At-Rest Encryption: Lưu các bản xuất bảng tính nhạy cảm trên các ổ lưu trữ được mã hoá theo tiêu chuẩn hiện đại (ví dụ, AWS S3 SSE-KMS, Azure Storage Encryption) và chuyển chúng chỉ qua TLS 1.3.
  • Standard OpenXML Encryption: Khi một bảng tính cần được bảo vệ bằng mật khẩu để phân phối, hãy sử dụng mã hoá OpenXML AES-256 tiêu chuẩn công nghiệp thay vì mã hoá Office XOR lạc hậu.
  • Redaction ở mức cơ sở dữ liệu (RBAC): Áp dụng Kiểm soát Truy cập Dựa trên Vai trò ở các lớp cơ sở dữ liệu và ứng dụng trước khi tạo bảng tính. Nếu người dùng xuất không có quyền xem Số An sinh Xã hội, ID tài khoản nội bộ, hoặc lợi nhuận gộp, hãy loại bỏ hoàn toàn các cột đó khỏi truy vấn. Không bao giờ để dữ liệu nhạy cảm ở các hàng hoặc cột “ẩn”.

6. Kiểm soát truy cập, phân phối và nhật ký kiểm toán

Vì bảng tính là các tệp di động, tự chứa, chúng thường vượt qua các kiểm soát biên giới tập trung một khi đã tải xuống.

Các thực hành tốt nhất cho nhà phát triển:

  • Phục vụ qua URL đã ký trước xác thực, thời gian ngắn: Không bao giờ để các tệp xuất bảng tính được tạo ra vào các bucket công cộng. Tạo URL đã ký trước có thời gian giới hạn (hết hạn dưới 5 phút) gắn với phiên người dùng đã xác thực và được ủy quyền.
  • Kiểm toán xuất khẩu toàn diện: Xem mỗi hành động xuất như một sự kiện truy cập dữ liệu. Ghi lại ID người dùng, ID khách thuê, các tham số truy vấn, thời gian tạo, và địa chỉ IP người nhận trong sổ kiểm toán không thể thay đổi.
  • Loại bỏ siêu dữ liệu: Loại bỏ siêu dữ liệu gỡ lỗi nội bộ, đường dẫn tệp máy chủ cục bộ, tài khoản tác giả và lịch sử chỉnh sửa công thức khỏi các thuộc tính tài liệu cuối cùng trước khi phục vụ tệp cho khách hàng bên ngoài.

Danh sách kiểm tra tóm tắt cho nhà phát triển

Danh mục Mối đe dọaLỗ hổng Cốt lõiBiện pháp giảm thiểu chính
Tạo dữ liệuTiêm công thức / Tiêm CSVThêm tiền tố cho các ký tự nguy hiểm (=, +, -, @) bằng '; sử dụng các thư viện tuần tự hoá mạnh mẽ.
Tiếp nhận tệpXXE & Bom giải nénVô hiệu hoá DTD và các thực thể bên ngoài trong bộ phân tích XML; thực thi giới hạn giải nén lưu trữ.
Loại tệpMacro độc hại & Đối tượng OLEChỉ cho phép .xlsx; loại bỏ các luồng macro (vbaProject.bin) khi tải lên.
Kết xuấtSSRF qua Trình chuyển đổi không giao diệnCác worker kết xuất trong sandbox; chặn lưu lượng mạng ra tới VPC nội bộ và các điểm cuối metadata.
Bảo mậtBảo vệ Sheet không hiệu quảLoại trừ các trường nhạy cảm ở lớp truy vấn; không bao giờ dựa vào việc khóa ô giao diện người dùng hoặc cột ẩn.
Phân phốiTiết lộ dữ liệu không kiểm soátCung cấp tải xuống qua các URL có thời hạn, đã ký trước; ghi lại các dấu vết kiểm toán có cấu trúc của mọi hoạt động xuất dữ liệu.

Câu hỏi thường gặp (FAQ)

Câu hỏi 1. Xuất dữ liệu ra tệp CSV tiêu chuẩn có hoàn toàn an toàn khỏi việc thực thi mã không? Không, vì các ứng dụng bảng tính tự động diễn giải các ký tự đầu tiên như =, @, +, hoặc - thành công thức hoạt động, có thể rò rỉ nội dung ô hoặc gọi các lệnh cục bộ.

Câu hỏi 2. Mật khẩu trang tính Excel có thể được dùng để bảo vệ dữ liệu nhạy cảm khỏi các nhà phát triển hoặc người dùng không được phép không? Không, mật khẩu bảo vệ trang tính và sổ làm việc gốc chỉ giới hạn việc chỉnh sửa ở mức giao diện người dùng và có thể bị loại bỏ trực tiếp từ các tệp XML nền mà không cần công cụ khôi phục mật khẩu.

Câu hỏi 3. Cách an toàn nhất để ngăn chặn các cuộc tấn công XML External Entity (XXE) khi phân tích các tệp .xlsx là gì? Cấu hình bộ phân tích XML của bạn để rõ ràng không cho phép DTD nội tuyến và tắt việc giải quyết các schema và thực thể bên ngoài trước khi phân tích các tệp XML nội bộ của kho lưu trữ.

Q4. Tại sao việc dựa vào “các cột ẩn” trong bảng tính đã xuất để che giấu các ID nội bộ hoặc chỉ số nhạy cảm lại nguy hiểm? Các cột ẩn vẫn hoàn toàn tồn tại trong payload dữ liệu nền và có thể bị lộ chỉ với một cú nhấp chuột trong giao diện bảng tính hoặc được đọc trực tiếp từ nội dung tệp thô.

Q5. Làm thế nào để ngăn chặn Server-Side Request Forgery (SSRF) khi tạo bản tóm tắt PDF hoặc hình thu nhỏ của bảng tính người dùng? Chạy các engine render trong các container cách ly, bị hạn chế mạng, cấm nghiêm ngặt việc truy cập mạng ra ngoài tới các subnet riêng và dịch vụ metadata đám mây.

Xem Thêm