Dữ liệu thử PCI DSS là chủ đề ít được bàn tới nhất trong các nhóm phát triển, và cũng là chủ đề dễ gây hiểu lầm nhất. Rất nhiều người cho rằng môi trường thử là vùng tự do, không ai kiểm toán, nên muốn dùng dữ liệu gì cũng được. Thực tế ngược lại hoàn toàn: nếu cơ sở dữ liệu thử của bạn chứa số thẻ thật, hệ thống đó đang xử lý dữ liệu chủ thẻ và nằm trong phạm vi áp dụng của tiêu chuẩn bảo mật dữ liệu ngành thẻ. Bài này giải thích vì sao điều đó quan trọng và đội phát triển nên làm gì.
Chuẩn PCI DSS yêu cầu điều gì với dữ liệu thẻ?
Tiêu chuẩn bảo mật dữ liệu ngành thẻ là một bộ yêu cầu do các tổ chức phát hành thẻ xây dựng, áp dụng cho bất kỳ tổ chức nào lưu trữ, xử lý hoặc truyền dữ liệu chủ thẻ. Phiên bản đang được áp dụng phổ biến hiện nay là nhánh bốn, với những bản cập nhật nhỏ được ban hành theo thời gian.
Có vài yêu cầu liên quan trực tiếp đến công việc hằng ngày của một đội phát triển:
- Dữ liệu xác thực nhạy cảm, trong đó có mã bảo mật và dữ liệu đầy đủ của băng từ, không được lưu lại sau khi giao dịch đã được ủy quyền.
- Dữ liệu tài khoản được lưu trữ phải được bảo vệ, và khi hiển thị thì phải được che, thông thường chỉ để lộ nhóm chữ số đầu tiên dùng để nhận diện tổ chức phát hành cùng bốn chữ số cuối.
- Môi trường phát triển và kiểm thử không được dùng dữ liệu chủ thẻ thật, mà phải dùng dữ liệu tổng hợp hoặc dữ liệu đã được thay thế bằng một tham chiếu.
Yêu cầu thứ ba là yêu cầu mà các đội phát triển hay vô tình vi phạm nhất, và thường là vì một lý do rất đời thường: một bản sao của cơ sở dữ liệu thật được khôi phục vào môi trường thử để tái hiện một lỗi.
Vì sao môi trường thử cũng nằm trong phạm vi?
Nhiều người hình dung phạm vi áp dụng theo kiểu địa lý: nếu máy chủ ở trong trung tâm dữ liệu được chứng nhận thì thuộc phạm vi, còn máy chủ trong mạng nội bộ thì không. Cách hình dung đó sai.
Phạm vi áp dụng được xác định bởi dữ liệu, không phải bởi vị trí. Bất kỳ hệ thống nào lưu trữ, xử lý hoặc truyền dữ liệu chủ thẻ đều nằm trong phạm vi, dù nó chạy trên máy chủ đám mây, trên một máy ảo trong mạng nội bộ, hay trên máy tính cá nhân của một lập trình viên. Một tệp dữ liệu mẫu chứa số thẻ thật nằm trên máy cá nhân cũng thuộc phạm vi áp dụng, dù không ai gọi nó là môi trường.
Và môi trường thử thường là môi trường yếu nhất trong toàn bộ hệ thống. Nó ít được vá lỗi hơn, ít được giám sát hơn, thường dùng mật khẩu mặc định, thường cho phép truy cập rộng hơn, và thường xuyên được sao lưu sang những nơi không ai kiểm soát. Những đặc điểm khiến nó tiện cho việc phát triển cũng chính là những đặc điểm khiến nó trở thành mục tiêu hấp dẫn.
Vì sao dữ liệu thẻ thật lại hay lọt vào môi trường thử?
Không ai chủ động muốn vi phạm quy định. Dữ liệu thật lọt vào môi trường thử vì những con đường rất gián tiếp, và đây là những con đường đáng rà soát trong chính quy trình của bạn.
| Con đường | Vì sao khó phát hiện |
|---|---|
| Khôi phục bản sao cơ sở dữ liệu thật để tái hiện lỗi | Việc này thường được làm gấp trong lúc xử lý sự cố |
| Tệp nhật ký chứa yêu cầu đầy đủ được chuyển sang môi trường thử | Nhật ký ít khi được soi như dữ liệu |
| Ảnh chụp màn hình và bản ghi phiên trong tài liệu kiểm thử | Chúng nằm rải rác ở nhiều công cụ khác nhau |
| Dữ liệu do nhân viên tự nhập khi thử nghiệm thủ công | Không đi qua bất kỳ hàng rào tự động nào |
| Tệp cấu hình hoặc dữ liệu mẫu chứa giá trị thật | Được sao chép qua nhiều môi trường theo thời gian |
Điểm chung của tất cả những con đường này là chúng đều nhanh và tiện. Đó cũng là lý do chúng tồn tại, và lý do bạn cần một quy tắc rõ ràng thay vì dựa vào ý thức của từng người.
Dữ liệu tổng hợp và dữ liệu đã thay thế khác nhau thế nào?
Có hai cách để có dữ liệu thử hợp lệ, và chúng phù hợp với những tình huống khác nhau.
Dữ liệu tổng hợp là dữ liệu được tạo ra hoàn toàn bằng thuật toán, không xuất phát từ bất kỳ chủ thẻ nào. Nó đúng về cấu trúc: đúng độ dài, đúng tiền tố, đúng chữ số kiểm tra. Vì không có tài khoản nào đứng sau, nó không thể dùng để thanh toán và không tạo ra rủi ro nào nếu bị lộ. Đây là lựa chọn mặc định cho hầu hết nhu cầu kiểm thử.
Dữ liệu đã thay thế, hay còn gọi là dữ liệu được tham chiếu hóa, là cách thay thế số thẻ thật bằng một mã định danh do hệ thống thanh toán nắm giữ. Hệ thống của bạn chỉ giữ mã đó, còn số thẻ thật không bao giờ xuất hiện trong môi trường của bạn. Cách này hữu ích khi bạn cần giữ nguyên mối liên hệ với một giao dịch hoặc một khách hàng cụ thể mà không cần giữ chính số thẻ.
Với hầu hết nhu cầu kiểm thử, dữ liệu tổng hợp là đủ và đơn giản hơn. Chỉ khi nghiệp vụ đòi hỏi phải gắn với một giao dịch có thật trong quá khứ thì dữ liệu đã thay thế mới cần thiết.
Dùng công cụ khi bạn cần dữ liệu tổng hợp
Nếu quy định yêu cầu môi trường thử phải dùng dữ liệu tổng hợp, bạn cần một nguồn tạo dữ liệu đáng tin cậy để cả nhóm cùng dùng thay vì mỗi người tự nghĩ ra số. Trình tạo số thẻ tín dụng giả của trang này sinh ra số thẻ đúng định dạng và hợp lệ theo phép kiểm tra chữ số, cho từng mạng thẻ riêng biệt hoặc ngẫu nhiên, với số lượng tùy chọn. Bạn cũng có thể dán một phần số thẻ đã biết để hoàn thiện nốt, hữu ích khi cần tái hiện một lỗi cụ thể mà không dùng dữ liệu thật của khách hàng.
Mọi số thẻ do công cụ tạo ra đều đúng cấu trúc nhưng chưa từng được phát hành, không gắn với tài khoản thật nào và không thể hoàn tất một giao dịch thanh toán. Chúng chỉ dành cho kiểm thử phần mềm và trình diễn biểu mẫu.
Nếu bạn đang cần một quy trình cụ thể để rà lại biểu mẫu thanh toán trước khi phát hành, hãy xem danh sách kiểm tra biểu mẫu thanh toán.
Phần dành cho nhà phát triển
Quy định chỉ được tuân thủ khi nó được thực thi bằng cơ chế, chứ không chỉ bằng lời nhắc trong tài liệu. Dưới đây là những việc có thể bắt đầu ngay trong tuần này.
- Chặn ở tầng dữ liệu, không chỉ ở tầng ứng dụng. Hãy đảm bảo rằng môi trường thử không thể kết nối tới cơ sở dữ liệu thật, ngay cả khi một cấu hình bị sai.
- Che dữ liệu trước khi ghi nhật ký. Hãy che số thẻ ngay tại điểm ghi nhật ký, để không có nhánh xử lý nào vô tình ghi ra dãy số đầy đủ. Cách này cũng giúp bạn không phải tin vào việc mọi người sẽ nhớ quy tắc.
- Kiểm tra cả nhật ký lỗi và công cụ theo dõi sự cố. Nhiều công cụ theo dõi lỗi tự động chụp lại dữ liệu của đối tượng tại thời điểm xảy ra ngoại lệ. Nếu đối tượng đó chứa số thẻ, dữ liệu sẽ được gửi tới một dịch vụ bên ngoài mà không ai để ý.
- Không dùng dữ liệu thật trong tệp cấu hình mẫu. Hãy để trống hoặc điền dữ liệu hư cấu cho mọi trường liên quan đến thẻ.
- Tách quyền truy cập giữa các môi trường. Một lập trình viên không nên có khả năng đọc dữ liệu chủ thẻ thật chỉ để làm công việc thường ngày.
- Quét định kỳ tìm dãy số giống số thẻ. Một phép quét đơn giản trên cơ sở dữ liệu thử, trên kho nhật ký và trên kho tệp đính kèm có thể phát hiện dữ liệu thật lọt vào mà không cần bất kỳ công cụ đặc biệt nào.
- Ghi lại quy trình thay thế dữ liệu. Khi ai đó cần tái hiện một lỗi từ dữ liệu thật, hãy có sẵn một quy trình để chuyển dữ liệu đó thành dữ liệu tổng hợp, thay vì để mỗi người tự xoay xở.
Một điều đáng nhớ về mặt tâm lý: rào cản lớn nhất không phải kỹ thuật mà là thói quen. Khi việc dùng dữ liệu tổng hợp trở thành đường đi dễ nhất, mọi người sẽ chọn nó mà không cần ai nhắc.
Tiếp theo
Nếu bạn muốn nắm rõ những chỗ mà dữ liệu thẻ dễ bị ghi lại ngoài ý muốn, bài CVV là gì và vì sao không được lưu lại đi sâu vào trường hợp cụ thể của mã bảo mật. Còn nếu câu hỏi của bạn là nên chọn dải số thử nào cho từng mạng thẻ, bài số thẻ thử nghiệm theo từng mạng sẽ giúp bạn lập bộ dữ liệu phù hợp.