SaaS của bạn đang làm thất thoát tiền bạc

Hầu hết các nhà phát triển sau khi phát hành SaaS xong là bỏ qua luôn. Họ coi bảo mật là một nhiệm vụ để sau này mới làm. Họ đợi cho đến khi có người dùng thật hoặc tiền thật đổ về.

Những tổn thất tài chính thực sự thường đến từ những sai lầm đơn giản. Đó không phải là những vụ hack phức tạp. Đó là những lỗi logic trong mã nguồn của bạn.

Dưới đây là bốn cách phổ biến khiến bạn mất tiền:

  1. Race Conditions trong hệ thống tín dụng Bạn đọc số dư của người dùng, kiểm tra nó, sau đó ghi số dư mới. Nếu một người dùng gửi hai yêu cầu cùng một lúc, cả hai yêu cầu đều có thể vượt qua bước kiểm tra trước khi yêu cầu đầu tiên cập nhật cơ sở dữ liệu. Bạn đang cung cấp hai dịch vụ với giá của một.

The fix: Sử dụng các thao tác cơ sở dữ liệu nguyên tử (atomic database operations). Thay vì đọc rồi mới ghi, hãy sử dụng một lệnh duy nhất để cập nhật số dư chỉ khi người dùng có đủ tín dụng.

  1. Tin tưởng dữ liệu đầu vào từ Client để xác định danh tính Bạn lấy địa chỉ email từ request body trong quá trình thanh toán. Một người dùng đã được xác thực có thể thay đổi email đó thành địa chỉ của người khác. Điều này cho phép họ tạo các phiên thanh toán cho các tài khoản sai hoặc thăm dò hệ thống của bạn.

The fix: Đừng bao giờ tin tưởng danh tính từ request body. Hãy trích xuất email từ session token đã được xác thực trên máy chủ của bạn.

  1. Lỗi logic thanh toán hàng năm Nhiều nhà phát triển đặt lại (reset) tín dụng của người dùng bằng cách lắng nghe các sự kiện thanh toán từ Stripe. Cách này hoạt động với các gói hàng tháng, nhưng lại thất bại với các gói hàng năm. Stripe chỉ gửi một sự kiện mỗi năm. Người dùng của bạn nhận được tín dụng vào ngày đầu tiên và không nhận được gì trong mười một tháng tiếp theo.

The fix: Tách biệt việc reset tín dụng khỏi các sự kiện thanh toán. Sử dụng một cron job hàng ngày để kiểm tra xem người dùng nào cần được reset dựa trên ngày reset.

  1. Lưu trữ token không an toàn Bạn lưu trữ các token đặt lại mật khẩu trong localStorage. Bất kỳ script nào trên trang của bạn đều có thể truy cập localStorage. Điều này bao gồm cả các tiện ích mở rộng trình duyệt và các công cụ phân tích bên thứ ba.

The fix: Sử dụng SDK xác thực của bạn để xử lý các token khôi phục. Hãy để thư viện tự động xử lý token mà không cần lưu trữ nó trong local storage.

Vấn đề luôn giống nhau: bạn tin tưởng client. Bạn tin rằng các yêu cầu sẽ đến lần lượt từng cái một. Bạn tin rằng các sự kiện thanh toán sẽ bao quát mọi trường hợp.

Việc khắc phục những vấn đề này mất chưa đến một ngày. Hãy kiểm tra lại mã nguồn của bạn trước khi bạn bị mất tiền.

Nguồn: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38