Hướng dẫn

Biến Môi Trường và Bí Mật Là Gì? Hướng Dẫn Dễ Hiểu

Một biến môi trường là một cài đặt có tên — như DATABASE_URL hay STRIPE_SECRET_KEY — được truyền cho ứng dụng khi nó chạy, thay vì được viết vào mã. Một bí mật là biến môi trường mà giá trị phải được giữ kín: API key, mật khẩu, khóa ký. Giữ những giá trị này bên ngoài mã nghĩa là bạn có thể thay đổi chúng mà không cần sửa ứng dụng, dùng các giá trị khác nhau cho thử nghiệm và cho khách hàng thật, và tránh bị lộ khi bạn chia sẻ hoặc xuất bản mã.

Vì sao điều này quan trọng khi bạn xây dựng bằng AI

Ngay khi ứng dụng của bạn làm điều gì hữu ích với một dịch vụ khác — nhận thanh toán, gửi email, gọi một mô hình AI — nó cần một khóa. Các công cụ xây dựng ứng dụng bằng AI thường xuyên yêu cầu những khóa này, và nơi khóa được đặt sẽ quyết định ứng dụng của bạn có an toàn hay không.

Có hai lỗi thường gặp ở ứng dụng do AI xây dựng:

  • Khóa được dán vào chat hoặc vào mã. Khi đó nó nằm trong lịch sử chat, các tệp dự án và bất kỳ bản xuất hay kho mã nào. Ai nhìn thấy đều có thể dùng tài khoản của bạn.
  • Khóa được dùng trong trình duyệt. Nếu đoạn mã gọi Stripe hay OpenAI chạy trong trang, khóa sẽ được gửi đến mọi người truy cập. Người ta thực sự kiểm tra điều này — và các công cụ quét tự động liên tục tìm kiếm khóa bị lộ.

Hiểu về biến môi trường giúp bạn nhận ra cả hai lỗi và yêu cầu cách khắc phục.

Một ví dụ đời thường: két sắt trong phòng khách sạn

Mã của ứng dụng giống như căn phòng khách sạn. Khách (và nhân viên dọn phòng, và bất kỳ ai bạn đưa thẻ từ) đều đi qua đó. Bạn sẽ không để hộ chiếu nằm trên bàn.

Biến môi trường giống như két sắt trong phòng. Căn phòng biết là có két và biết cách mở khi cần, nhưng hộ chiếu không nằm bừa bãi. Và nếu bạn chuyển sang một phòng khác — từ môi trường thử nghiệm sang website thật — bạn chỉ cần đặt một hộ chiếu khác vào két của phòng đó, mà không cần trang trí lại.

Cách hoạt động

Mã của bạn tham chiếu đến một tên, không phải một giá trị. Trong JavaScript trên máy chủ, điều đó trông như process.env.STRIPE_SECRET_KEY. Khi ứng dụng khởi động, nền tảng nơi nó chạy sẽ điền giá trị cho tên đó. Thay đổi giá trị trong cài đặt của nền tảng, khởi động lại hoặc triển khai lại, và ứng dụng sẽ dùng giá trị mới — không cần sửa mã.

Giá trị đến từ đâu tùy thuộc vào nơi ứng dụng chạy:

Nơi chạyNơi lưu giá trị
Trên máy tính của nhà phát triểnMột tệp cục bộ thường gọi là .env, không bao giờ được commit lên git
Trong bản xem trước của công cụ AI builderBảng secrets hoặc cài đặt của dự án
Trên nền tảng hostingPhần biến môi trường trong cài đặt của nền tảng đó
Trong GitHub Actions hoặc tự động hóa khácKho bí mật được mã hóa của chính dịch vụ đó

Biến công khai và biến bí mật

Không phải biến môi trường nào cũng là bí mật. Nên phân chúng thành hai nhóm:

LoạiVí dụTrình duyệt có thấy được không?
Cấu hình công khaiTên website, ID analytics công khai, khóa publishable của Stripe, công tắc tính năngCó, điều đó không sao
Bí mậtKhóa secret của Stripe, API key của OpenAI hay Anthropic, chuỗi kết nối cơ sở dữ liệu, khóa nhà cung cấp email, khóa ký webhookKhông bao giờ

Các framework web làm rõ sự phân chia này. Trong Vite, chỉ những biến có tên bắt đầu bằng VITE_ mới được đưa vào mã trình duyệt; trong Next.js, tiền tố là NEXT_PUBLIC_. Đây là một tính năng an toàn: bất cứ thứ gì có các tiền tố đó đều nằm trong các tệp mà mọi người truy cập tải về, nên một bí mật không bao giờ được đặt tiền tố như vậy.

Ví dụ thực tế: nút tóm tắt bằng AI

Bạn muốn một nút "Tóm tắt ghi chú này" gọi một mô hình AI.

Phiên bản không an toàn: mã của nút, chạy trong trình duyệt, gọi trực tiếp nhà cung cấp AI với API key được viết sẵn trong đó. Nó hoạt động trong bản xem trước. Nhưng điều này cũng có nghĩa là bất kỳ ai cũng có thể mở công cụ phát triển của trình duyệt, sao chép khóa và chạy các yêu cầu làm tăng hóa đơn trên tài khoản của bạn.

Phiên bản an toàn:

  1. Bạn tạo khóa tại nhà cung cấp AI và lưu nó dưới dạng bí mật tên OPENAI_API_KEY (hoặc tương tự) trong cài đặt dự án.
  2. Phần backend có một route, POST /api/summarise, đọc process.env.OPENAI_API_KEY, kiểm tra người dùng đã đăng nhập và gọi nhà cung cấp.
  3. Nút gọi route của bạn, không gọi nhà cung cấp. Trình duyệt không bao giờ thấy khóa.
  4. Bạn thêm cùng bí mật đó vào cài đặt của ứng dụng đã xuất bản và triển khai lại, để website thật cũng có nó.

Mô hình đó — trình duyệt gọi máy chủ của bạn, máy chủ giữ khóa và gọi dịch vụ — áp dụng cho thanh toán, email, bản đồ và mọi API trả phí khác. Hướng dẫn sử dụng LLM API đi sâu hơn vào trường hợp AI.

Thuật ngữ chính

  • Tệp .env: tệp văn bản gồm các dòng TÊN=giá_trị dùng khi phát triển cục bộ. Hãy liệt kê nó trong .gitignore để không bị commit.
  • .env.example: bản sao chỉ có tên mà không có giá trị thật, được commit để người khác biết cần đặt những biến nào.
  • Rotate (xoay khóa): thay một bí mật bằng cái mới và thu hồi cái cũ.
  • Phạm vi / quyền: nhiều nhà cung cấp cho phép tạo khóa chỉ làm được một số việc nhất định. Khóa chỉ gửi email ít nguy hiểm hơn khóa làm được mọi thứ.
  • Khóa thử nghiệm và khóa thật: các nhà cung cấp như Stripe cấp khóa riêng cho thử nghiệm và cho tiền thật. Hãy dùng khóa thử nghiệm cho đến khi ra mắt.
  • Khóa ký (signing secret): bí mật dùng để kiểm tra một thông điệp, như webhook, có thật sự đến từ người gửi hay không.

Những lỗi và hiểu lầm thường gặp

  • "Kho mã của tôi là riêng tư nên để khóa trong đó cũng không sao." Kho riêng tư vẫn bị chia sẻ, fork, xuất ra và sao chép về máy tính. Khóa vẫn không nên nằm ở đó. Nếu bạn kết nối dự án với GitHub, hãy kiểm tra không có tệp .env nào được đưa vào.
  • "Tôi đã xóa rồi, vậy là hết." Git giữ lịch sử, và nhật ký chat giữ tin nhắn. Nếu khóa từng bị lộ, hãy xoay khóa.
  • Dùng tiền tố công khai cho bí mật. VITE_OPENAI_KEY đưa khóa của bạn vào gói mã trình duyệt.
  • Quên triển khai lại. Thay đổi biến trong cài đặt thường chỉ có hiệu lực sau khi ứng dụng khởi động lại hoặc được xuất bản lại.
  • Một khóa dùng cho mọi thứ. Tách khóa cho thử nghiệm và khóa thật, và theo từng ứng dụng, giúp bạn thu hồi một khóa mà không làm hỏng phần còn lại.
  • Không có giới hạn chi tiêu. Với API trả phí, hãy đặt ngân sách hoặc giới hạn trong bảng điều khiển của nhà cung cấp, phòng khi khóa bị lộ.

Điều nên yêu cầu AI builder của bạn

  • "Đọc khóa bí mật Stripe từ biến môi trường tên STRIPE_SECRET_KEY. Chỉ dùng nó trên máy chủ."
  • "Đảm bảo không bí mật nào được dùng trong mã phía client hay được đặt tiền tố VITE_ / NEXT_PUBLIC_."
  • "Tạo .env.example liệt kê mọi biến ứng dụng cần, không kèm giá trị, và đảm bảo .env nằm trong git-ignore."
  • "Kiểm tra các tệp frontend đã build xem có chuỗi nào trông giống API key không."

Danh sách kiểm tra bảo mật cho ứng dụng do AI xây dựng của chúng tôi đề cập đến bí mật cùng các kiểm tra khác nên chạy trước khi ra mắt.

Bí mật trên Mythex

Trên Mythex, bí mật là các biến môi trường của dự án được đưa vào cả sandbox xem trước lẫn ứng dụng đã xuất bản. Bạn thêm chúng trong cài đặt dự án → Secrets hoặc bằng /secrets trong chat, và khi agent cần một khóa, nó hiển thị thẻ secrets trong chat, nên giá trị được nhập vào một ô biểu mẫu thay vì xuất hiện trong nội dung tin nhắn. Nếu bạn thay đổi bí mật của một ứng dụng đang chạy, hãy xuất bản lại để lần triển khai nhận được giá trị mới. Các bản xuất dự án không bao gồm bí mật, và tệp .env nhập vào sẽ bị loại bỏ để bạn thêm lại trong cài đặt. Xem biến môi trường và bí mật và bí mật trong chat trong tài liệu.

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

Biến môi trường là gì?

Biến môi trường là một cài đặt có tên, như STRIPE_SECRET_KEY hoặc DATABASE_URL, được truyền cho chương trình khi nó chạy thay vì được viết cứng vào mã. Cùng một đoạn mã có thể dùng các giá trị khác nhau khi phát triển và khi chạy thật.

Khác nhau giữa biến môi trường và bí mật là gì?

Bí mật là một biến môi trường mà giá trị phải được giữ kín, như API key, mật khẩu cơ sở dữ liệu hay khóa ký webhook. Các biến môi trường khác, như tên website hay công tắc tính năng, có thể công khai.

Đặt API key trong frontend có an toàn không?

Không. Mọi thứ trong mã frontend đều được tải về trình duyệt của từng người truy cập và có thể bị đọc. Khóa bí mật chỉ nên dùng trên máy chủ; trình duyệt nên gọi máy chủ của bạn, rồi máy chủ mới gọi nhà cung cấp.

Nếu API key của tôi bị lộ thì phải làm gì?

Thu hồi hoặc thay mới ngay tại nhà cung cấp, tạo khóa mới, cập nhật ở mọi nơi ứng dụng lưu bí mật, rồi triển khai lại. Chỉ xóa khóa khỏi mã hoặc lịch sử chat là chưa đủ, vì các bản sao có thể đã tồn tại.

Mythex · Pricing · Xây dựng mọi thứ với AI · Mẫu website và ứng dụng · So sánh Mythex · Thuật ngữ xây dựng ứng dụng bằng AI · Công cụ miễn phí để xây dựng ứng dụng bằng AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو 简体中文 繁體中文(香港) 繁體中文(台灣)