Security Guide

Bảo mật Tích hợp Công nghệ

Hướng dẫn bảo mật khi kết nối Lovable với các dịch vụ và công nghệ bên ngoài.

Bảo mật Supabase
Backend

🧑‍🎓 Giải thích đơn giản: Supabase là 'kho chứa dữ liệu' phía sau app của bạn. Nó có 2 loại chìa khóa: anon key (chìa khóa khách — bị giới hạn quyền) và service_role key (chìa khóa chủ nhà — toàn quyền). Nếu lộ chìa khóa chủ nhà, hacker đọc/xóa được toàn bộ dữ liệu!

📋 Prompt để thực hiện:

Kiểm tra project đảm bảo: anon key chỉ dùng phía client, service_role key chỉ dùng trong Server Functions. Bật RLS cho mọi bảng. Thêm auth middleware verify user token trong mọi server function.

Phân biệt các keys

anon key (public)

Dùng phía client, bị giới hạn bởi RLS policies

service_role key (private)

Bypass RLS — CHỈ dùng phía server

Auth Middleware

// Trong server function, verify user
import { createServerFn } from "@tanstack/react-start";
import { createClient } from "@supabase/supabase-js";

const protectedAction = createServerFn({ method: "POST" })
  .handler(async () => {
    const supabase = createClient(
      process.env.SUPABASE_URL!,
      process.env.SUPABASE_SERVICE_ROLE_KEY!
    );
    
    // Verify token từ request headers
    const { data: { user }, error } = await supabase.auth.getUser(token);
    if (error || !user) throw new Error("Unauthorized");
    
    // Tiếp tục xử lý...
  });

Best Practices

  • Luôn bật RLS cho mọi bảng
  • Không dùng service_role key phía client
  • Test policies bằng SQL Editor trước khi deploy
  • Sử dụng schema public cho app data, không dùng schema auth