Bỏ qua tới nội dung
Bảo mật

Điều gì bảo vệ một bên thuê, nói thẳng.

Không có chứng nhận nào chúng tôi không nắm, không có tính từ nào thay cho chốt kiểm soát. Đây là những gì được thực thi, thực thi ở đâu, và những gì còn thiếu.

Mười sáu không gian làm việc, và không gì ở giữaMột lưới bốn nhân bốn gồm các ô không gian làm việc, mỗi ô chứa người vận hành, khoá, các phiên bản cấu hình và một nhật ký kiểm toán. Khoảng cách giữa chúng được vẽ bằng nét liền, và không đường nào trong hình vượt qua chúng ở bất cứ đâu. Một ô được mở ra ở kích thước gấp ba: một kho lưu trữ chỉ thuộc không gian làm việc đó, một khoá API và một bí mật webhook đều mang key id, cùng một nhật ký kiểm toán chỉ ghi thêm được cưỡng chế bằng trigger của cơ sở dữ liệu.Không gian làm việcCô lập là cấu trúc01020304050607080910111213141516Một không gian làm việcworkspace_idmọi truy vấn ở tầng dữ liệu đều cần mộtapi_key(kid)xoay vòng trong khoảng chồng lấnwebhook_secret(kid)xoay vòng theo cách tương tựaudit_logchỉ thêm mới — được thực thi bằng trigger CSDLKhông đường nào vượt qua khe — sự vắng mặt chính là điểm mấu chốtMọi truy vấn ở tầng dữ liệu đều nhận một không gian làm việc. Không có nơi gọi nào bỏ qua được.
Mười sáu không gian làm việc. Không có đường nối nào giữa hai ô, vì giữa chúng không thể ghi được gì.
Đa bên thuê

Cách ly là chuyện cấu trúc, không phải chuyện canh chừng.

Mọi truy vấn trên dữ liệu thuộc một không gian làm việc đều mang id của không gian đó trong điều kiện lọc. Không tồn tại đường truy cập không giới hạn phạm vi nào để người ta quên dùng.

Kiểu hỏng mà thiết kế này loại bỏ là kiểu bình thường nhất: một hệ thống đúng đắn, trong đó một endpoint mới viết vội bỏ sót mệnh đề WHERE. Nếu tầng dữ liệu không trả lời một câu hỏi không nêu tên không gian làm việc, thì endpoint đó không biên dịch thành một lỗ rò — nó không biên dịch được.

Các bài kiểm thử rò rỉ theo hướng đối kháng ghim chặt tính chất này thay vì tin vào quy ước, bởi một quy ước chỉ đáng tin bằng người cuối cùng đã đọc tập tin đó.

internal/tenancy · migrations/0002

Bản ghi

Nhật ký kiểm toán chỉ ghi thêm ở cơ sở dữ liệu, không phải ở ứng dụng.

Một trigger báo lỗi với mọi thao tác sửa hoặc xóa. Một ứng dụng quyết định không viết lại lịch sử là một chính sách; một cơ sở dữ liệu từ chối viết lại mới là một chốt kiểm soát.

Đây chính là khác biệt mà kiểm toán viên hỏi tới và nhà cung cấp thường không trả lời được. Nếu thứ duy nhất ngăn một lần sửa hồi tố là “không có đường mã nào làm thế”, thì một script hỗ trợ, một lần migration, hay một người vận hành cầm bảng điều khiển đều làm được, và nhật ký sẽ không hề hay biết.

internal/tenancy · migrations/0002 audit_log_immutable()

Thông tin xác thực

Khóa xoay mà không gián đoạn. Đăng nhập chống được lừa đảo.

Một quy trình xoay khóa cần cửa sổ bảo trì là quy trình xoay khóa không bao giờ diễn ra.

Hai khối, và mặt phẳng giữa chúngHai khối isometric đứng trên hai mảng nền kẻ ô tách biệt, giữa chúng là một mặt phẳng đứng nhìn từ cạnh. Khối bên trái là của đơn vị vận hành, chia làm bốn ngăn: Stripe, NOWPayments, ngân hàng và ví. Khối bên phải là của nền tảng, chia thành sổ cái, các đợt chạy, yêu cầu rút và hộp gửi. Bốn đường cắt qua mặt phẳng ở giữa, được ghi nhãn ngay trên mặt phẳng đó: sự kiện, chỉ thị, biên nhận và lệnh. Không đường nào mang tiền, và khối bên phải không có ngăn nào có thể giữ số dư.Hai khối · một mặt phẳng · không cửaSTRIPESổ cáiNOWPAYMENTSCác đợt chạyNgân hàngYêu cầu rútHộp gửiĐơn vị vận hànhXEXRanh giới lưu kýSự kiệnChỉ thịBiên nhậnLệnhKhông khối nào vượt quaTiền nằm trong các ngăn của đơn vị vận hành và không bao giờ được sao sang phía chúng tôi.Bốn thứ vượt qua mặt phẳng này. Không thứ nào là số dư, và không thứ nào là khoá.
Hai khối, một mặt phẳng ở giữa. Trên đó không có cửa.
  1. 01

    Id khóa với thời hạn chồng lấn

    Khóa API và khóa ký webhook của mỗi không gian làm việc đều mang một id khóa. Trong lúc xoay, cả hai đều hợp lệ, nên bạn chuyển đổi theo lịch của mình rồi thu hồi khóa cũ sau.

    internal/tenancy · internal/outbox/sign.go

  2. 02

    Passkey cho cả thành viên lẫn người vận hành

    WebAuthn với yêu cầu bắt buộc về xác minh người dùng và thông tin xác thực có thể khám phá — không phải tùy chọn, vì những khóa này đứng ngay trước một dòng tiền. Đăng nhập kiểu khám phá tự tìm ra tài khoản từ chính thông tin xác thực, nên không phải gõ gì cả và cũng chẳng có gì để lừa lấy.

    internal/passkey

  3. 03

    Xác thực hai lớp bằng ứng dụng, lưu đúng cách

    Bí mật TOTP không thể băm được — vì khâu xác minh phải tính lại mã từ nó — nên bí mật của thành viên được niêm phong bằng AES-256-GCM dưới một khóa con riêng theo ngữ cảnh, thay vì lưu dạng rõ. Bộ đếm của một mã đã được chấp nhận sẽ được ghi ngược lại, nên không thể dùng lại mã đó trong cùng khung thời gian.

    internal/membertotp · internal/secretbox

  4. 04

    Băm được thì băm, không được thì niêm phong

    Mật khẩu hay mã khôi phục thì được băm, vì nền tảng chỉ cần trả lời “có phải cái này không?”. Bí mật mà nền tảng buộc phải đọc lại thì được niêm phong, và những kho có trước cấu trúc này đang được chuyển sang chứ không bị bỏ nguyên như cũ.

    internal/secretbox

Lưu lượng đi ra

Không gì rò ra qua một URL do bạn cấu hình.

Đích đến của webhook, xét về bản chất, là đầu vào chịu ảnh hưởng của kẻ tấn công — đó là một URL do bên thuê gõ vào, rồi nền tảng gọi tới nó từ bên trong mạng của chính mình.

Bộ điều phối chạy một chốt chặn lưu lượng đi ra trước khi gửi yêu cầu, thay vì tin vào tên máy chủ; đó là thứ tự duy nhất có tác dụng: một lần kiểm tra sau khi phân giải, hoặc kiểm tra trên chuỗi ký tự thay vì trên địa chỉ thật, chính là lần kiểm tra mà kỹ thuật DNS rebinding sinh ra để đi xuyên qua. Đích loopback và mạng nội bộ chỉ được phép trong sandbox và các lần chạy kiểm thử đầu-cuối, và sự nới lỏng đó là một cờ khai báo rõ ràng chứ không phải đoán môi trường.

internal/outbox/ssrf.go · internal/outbox/dispatcher.go

Lưu ký

Chúng tôi không phải bên lưu ký, và mã nguồn từ chối trở thành như vậy.

Không giữ tiền thành viên. Không giữ khóa riêng. Không có thông tin xác thực của nền tảng nằm trong kênh thanh toán của bên thuê.

Thành viên trả cho bạn

Mọi kênh đều được cấu hình bằng thông tin xác thực của chính bên thuê, trên tài khoản của chính bên thuê.

internal/rails

Cấu hình từ chối thứ của chúng tôi

Việc lưu một thông tin xác thực trùng với của chính nền tảng sẽ bị từ chối. Chốt kiểm tra này tồn tại vì câu “cứ dùng tạm của bên mình” là cách một nhà cung cấp phần mềm vô tình trở thành một tổ chức thanh toán.

internal/rails

Rút tiền là chỉ thị, không bao giờ là chuyển tiền

Một yêu cầu rút giữ chỗ đúng những dòng sổ cái cụ thể và phát ra một chỉ thị. Việc thực thi là của bạn, và số tiền được thực thi cũng là của bạn.

internal/claims

Danh tính

Xác minh mà không giữ giấy tờ.

Phiên của nhà cung cấp chạy trên tài khoản của chính bạn. Thứ trả về là một quyết định và một mã định danh không thể đảo ngược.

Mã định danh đó đủ để thực thi quy tắc một người một vị trí, và không hơn. Nó không đủ để dựng lại một danh tính, và đó chính là điểm mấu chốt: cách an toàn nhất để giữ một bản quét hộ chiếu là không giữ nó, và một vụ rò rỉ không thể để lộ dữ liệu chưa từng được lưu.

internal/verification

Điều chúng tôi không tuyên bố

Những gì chúng tôi không tuyên bố.

Nếu bạn đang điền bảng đánh giá nhà cung cấp, đây là những dòng chúng tôi sẽ trượt. Biết ở đây vẫn hơn biết vào tháng thứ tư.

Chúng tôi không có báo cáo SOC 2. Chưa có đợt kiểm thử xâm nhập nào do bên thứ ba thực hiện. Chúng tôi không công bố cam kết về thời gian hoạt động, vì ở đây chưa có gì đo được điều đó. XEX cho bạn các chốt kiểm soát và bản ghi; nó không cấp giấy phép, và cũng không phải tư vấn pháp lý. Việc kế hoạch trả thưởng của bạn có hợp pháp ở nơi bạn tiếp thị hay không là điều bạn phải tự xác lập, và điều khoản nền tảng của chúng tôi buộc bạn làm vậy.
Báo lỗi bảo mật
Hiện chưa có chương trình thưởng lỗi và không có khoản trả nào cho một báo cáo. Hãy báo lỗ hổng qua kênh bảo mật trên trang liên hệ; chúng tôi sẽ xác nhận đã nhận và cho bạn biết chúng tôi đang xử lý thế nào. Xin đừng kiểm thử trên không gian làm việc của một bên thuê đang chạy thật — hãy lấy một sandbox miễn phí, vốn là toàn bộ sản phẩm, và kiểm thử ở đó.

See /contact#security

Tiếp theo

Gửi bảng đánh giá, hoặc lấy một sandbox và tự xem.

Cách nào cũng được. Một trong hai nhanh hơn.