Kiểm tra lỗi phân quyền ứng dụng do Vibe Coding tạo
Bùi Tấn Lực
- 103
- 12/10/2026
Vibe Coding giúp lập trình viên xây dựng ứng dụng bằng cách mô tả yêu cầu cho AI và để công cụ hỗ trợ tạo mã nguồn, thiết kế cơ sở dữ liệu, xây dựng API hoặc hoàn thiện giao diện. Cách tiếp cận này giúp rút ngắn thời gian phát triển, nhưng cũng khiến một số lỗi bảo mật dễ bị bỏ qua, đặc biệt là lỗi phân quyền.
Một ứng dụng có thể đăng nhập thành công, hiển thị đúng giao diện và thực hiện đầy đủ các chức năng mà vẫn tồn tại lỗ hổng nghiêm trọng. Chẳng hạn, người dùng thông thường có thể xem hồ sơ của người khác, sửa dữ liệu không thuộc quyền quản lý hoặc gọi trực tiếp API dành cho quản trị viên. Những lỗi này thường không xuất hiện trong quá trình kiểm tra giao diện thông thường.
Vì vậy, kiểm tra lỗi phân quyền ứng dụng do Vibe Coding tạo không chỉ là xem lại các nút chức năng hoặc kiểm tra vai trò người dùng trên giao diện. Điều quan trọng là xác minh xem máy chủ có thực sự ngăn chặn những hành động vượt quá quyền hạn hay không, kể cả khi người dùng tự thay đổi yêu cầu gửi lên.
Bài viết này hướng dẫn cách xác định phạm vi phân quyền, xây dựng các tình huống kiểm thử, phát hiện những lỗi phổ biến và đánh giá khả năng bảo vệ dữ liệu của ứng dụng được phát triển với sự hỗ trợ của AI.

Lỗi phân quyền trong ứng dụng Vibe Coding là gì?
Lỗi phân quyền xảy ra khi ứng dụng không kiểm soát chính xác những tài nguyên mà người dùng được phép truy cập hoặc những hành động mà họ được phép thực hiện. Khi đó, người dùng có thể thao tác vượt quá quyền hạn được cấp, dù hệ thống đã xác thực danh tính của họ.
Trong một ứng dụng được xây dựng bằng Vibe Coding, lỗi này có thể xuất hiện khi AI tạo API thiếu bước kiểm tra quyền, sử dụng điều kiện phân quyền không đầy đủ, cho phép truy cập tài nguyên dựa trên mã định danh do người dùng cung cấp hoặc chỉ ẩn chức năng trên giao diện mà không bảo vệ phía máy chủ.
Để kiểm tra chính xác, cần phân biệt ba khái niệm có liên quan:
- Xác thực: Xác định người đang sử dụng hệ thống là ai, thường thông qua đăng nhập, phiên làm việc hoặc token.
- Phân quyền: Xác định người đó được phép thực hiện hành động nào trên tài nguyên nào.
- Kiểm soát truy cập: Cơ chế thực thi các quy tắc cho phép hoặc từ chối yêu cầu dựa trên danh tính, vai trò, quyền hạn và ngữ cảnh.
Ví dụ, một khách hàng đã đăng nhập hợp lệ có thể xem đơn hàng của chính mình. Tuy nhiên, việc đăng nhập thành công không đồng nghĩa với việc khách hàng đó được phép xem đơn hàng của người khác hoặc thay đổi trạng thái thanh toán.
Điểm cần nhớ là người dùng đã được xác thực vẫn có thể thực hiện hành động trái phép nếu ứng dụng phân quyền sai. Đây là lý do việc kiểm tra đăng nhập thành công không thể thay thế cho kiểm thử phân quyền.
Vì sao ứng dụng do AI tạo mã dễ mắc lỗi phân quyền?
Vibe Coding không tự động khiến ứng dụng mất an toàn. Rủi ro thường xuất hiện khi yêu cầu bảo mật chưa được mô tả rõ, mã do AI tạo chưa được rà soát hoặc quá trình phát triển tập trung vào việc làm cho chức năng hoạt động mà chưa kiểm tra đầy đủ các trường hợp bị từ chối truy cập.
AI triển khai chức năng nhưng bỏ sót quy tắc bảo mật
Khi nhận yêu cầu tạo chức năng xem hồ sơ, quản lý đơn hàng hoặc chỉnh sửa thông tin, AI có thể tạo ra giao diện và API đáp ứng đúng luồng sử dụng thông thường. Tuy nhiên, nếu yêu cầu không xác định rõ ai được truy cập từng loại dữ liệu, mã nguồn có thể chỉ kiểm tra người dùng đã đăng nhập mà chưa xác minh quyền sở hữu tài nguyên.
Chẳng hạn, API xem đơn hàng nhận một mã đơn hàng từ yêu cầu. Nếu máy chủ chỉ truy vấn đơn hàng theo mã này rồi trả kết quả, người dùng có thể thử thay mã đơn hàng để truy cập dữ liệu của tài khoản khác. Việc mã đơn hàng khó đoán không thay thế được kiểm tra quyền.
Phân quyền chỉ được xử lý ở giao diện
Một lỗi thường gặp là AI tạo giao diện ẩn nút quản trị đối với người dùng thông thường nhưng không bảo vệ API tương ứng. Khi đó, giao diện trông có vẻ an toàn, song người dùng vẫn có thể gửi yêu cầu trực tiếp đến máy chủ bằng công cụ kiểm thử HTTP hoặc chức năng dành cho nhà phát triển của trình duyệt.
Ẩn nút, vô hiệu hóa biểu mẫu hoặc chuyển hướng người dùng không có quyền là những biện pháp hỗ trợ trải nghiệm sử dụng. Chúng không phải ranh giới bảo mật đáng tin cậy nếu máy chủ vẫn chấp nhận yêu cầu trái phép.
Mã nguồn được tạo nhanh nhưng thiếu kiểm thử tình huống bất thường
Trong quá trình phát triển, người tạo ứng dụng thường kiểm tra bằng tài khoản quản trị hoặc một tài khoản thử nghiệm duy nhất. Cách làm này có thể xác nhận rằng chức năng hoạt động, nhưng không chứng minh hệ thống từ chối đúng các yêu cầu không được phép.
Những trường hợp như tài khoản A truy cập dữ liệu của tài khoản B, người dùng thường gọi API quản trị, phiên đăng nhập hết hạn hoặc tài khoản vừa bị thu hồi quyền thường cần được kiểm thử riêng. Nếu không có các tình huống này, lỗ hổng có thể tồn tại đến khi ứng dụng được đưa vào sử dụng thực tế.
Quy tắc phân quyền không nhất quán giữa các API
Một ứng dụng có thể có nhiều API cùng thao tác trên một tài nguyên, chẳng hạn xem hồ sơ, cập nhật hồ sơ, tải tệp đính kèm và xóa hồ sơ. Nếu mỗi API được tạo riêng mà không có quy tắc kiểm soát truy cập thống nhất, một chức năng có thể kiểm tra quyền sở hữu đầy đủ trong khi chức năng khác lại bỏ qua bước này.
Vì vậy, việc kiểm tra một API an toàn không có nghĩa là toàn bộ ứng dụng đã an toàn. Cần rà soát các điểm truy cập có cùng mục đích nghiệp vụ, các API quản trị và những thao tác có khả năng đọc, sửa, xóa hoặc xuất dữ liệu.
Những loại lỗi phân quyền cần ưu tiên kiểm tra
Không phải mọi lỗi phân quyền đều có mức độ nghiêm trọng như nhau. Khi đánh giá ứng dụng do Vibe Coding tạo, nên ưu tiên những lỗi có thể làm lộ dữ liệu cá nhân, thay đổi dữ liệu của người khác, chiếm quyền quản trị hoặc vượt qua các giới hạn quan trọng của hệ thống.
Lỗi truy cập dữ liệu của người dùng khác (IDOR)
IDOR là tình huống ứng dụng cho phép truy cập đối tượng thông qua mã định danh nhưng không kiểm tra đầy đủ quyền truy cập đối tượng đó. Trong nhiều trường hợp, đây là lỗi kiểm soát truy cập ở cấp đối tượng, thường được xếp trong nhóm Broken Object Level Authorization của API.
Ví dụ, một ứng dụng quản lý công việc có API đọc chi tiết nhiệm vụ theo mã nhiệm vụ. Người dùng A chỉ được xem nhiệm vụ của mình, nhưng API lại trả dữ liệu cho bất kỳ mã nhiệm vụ hợp lệ nào mà người dùng gửi lên.
Để kiểm tra, hãy sử dụng hai tài khoản thử nghiệm do bạn quản lý:
- Đăng nhập bằng tài khoản A và truy cập một tài nguyên thuộc A.
- Ghi nhận yêu cầu hợp lệ, bao gồm đường dẫn API và mã tài nguyên.
- Đăng nhập bằng tài khoản B và thử truy cập tài nguyên thuộc A trong môi trường kiểm thử được phép.
- Xác minh máy chủ có từ chối yêu cầu hay không, đồng thời kiểm tra nội dung phản hồi có làm lộ dữ liệu hay không.
Nếu tài khoản B đọc, sửa hoặc xóa được tài nguyên của A mà không có quyền hợp lệ, ứng dụng có lỗi kiểm soát truy cập ở cấp đối tượng.
Lưu ý rằng thay mã định danh chỉ là một cách kiểm thử. Mã tài nguyên có thể là số nguyên, UUID, chuỗi ngẫu nhiên hoặc được lồng trong đường dẫn. Dù sử dụng định dạng nào, máy chủ vẫn phải kiểm tra quyền truy cập đối với từng tài nguyên.
Lỗi người dùng thường có thể thực hiện chức năng quản trị
Lỗi này xảy ra khi hệ thống không kiểm tra đúng vai trò hoặc quyền hạn trước khi thực hiện thao tác nhạy cảm. Những chức năng cần chú ý gồm quản lý tài khoản, thay đổi vai trò, khóa người dùng, cấu hình hệ thống, xem dữ liệu nội bộ và thực hiện các thao tác quản trị khác.
Trong quá trình kiểm tra, không nên chỉ quan sát menu quản trị có xuất hiện hay không. Hãy xác minh API phía máy chủ có từ chối tài khoản thông thường khi tài khoản đó gọi trực tiếp chức năng quản trị hay không.
Cũng cần kiểm tra các trường hợp người dùng tự thay đổi dữ liệu gửi lên, chẳng hạn trường vai trò, trạng thái tài khoản hoặc quyền quản lý. Máy chủ không được tin tưởng các giá trị do phía khách hàng tự khai báo để quyết định quyền hạn của chính người gửi yêu cầu.
Lỗi leo thang đặc quyền
Leo thang đặc quyền xảy ra khi người dùng có thể đạt được quyền cao hơn mức được cấp. Có hai tình huống cần phân biệt:
- Leo thang đặc quyền theo chiều ngang: Người dùng truy cập hoặc thao tác trên tài nguyên của người dùng khác có cùng cấp quyền.
- Leo thang đặc quyền theo chiều dọc: Người dùng thông thường thực hiện được chức năng vốn chỉ dành cho quản trị viên hoặc vai trò cao hơn.
Một số nguyên nhân thường gặp gồm kiểm tra vai trò không đầy đủ, API tin tưởng trường quyền do khách hàng gửi lên, cơ chế cập nhật tài khoản cho phép sửa trực tiếp thuộc tính nhạy cảm hoặc quyền truy cập không được kiểm tra lại sau khi thay đổi.
Khi rà soát mã nguồn, hãy tìm các vị trí cập nhật vai trò, cấp quyền, thay đổi trạng thái người dùng và tạo tài khoản quản trị. Những thao tác này cần có quy tắc phân quyền rõ ràng và không được cho phép người dùng tự nâng quyền chỉ bằng cách thay đổi dữ liệu yêu cầu.
Lỗi phân quyền khi cập nhật dữ liệu
Một API có thể giới hạn đúng đối tượng được chỉnh sửa nhưng vẫn cho phép thay đổi những trường mà người dùng không có quyền kiểm soát. Đây là tình huống cần kiểm tra riêng với các chức năng cập nhật hồ sơ, đơn hàng, thanh toán, thông tin nhân viên và dữ liệu quản trị.
Ví dụ, khách hàng được phép cập nhật địa chỉ nhận hàng nhưng không được tự thay đổi trạng thái thanh toán hoặc gán đơn hàng cho tài khoản khác. Nếu API nhận toàn bộ dữ liệu từ yêu cầu rồi ghi trực tiếp vào cơ sở dữ liệu, người dùng có thể sửa các thuộc tính nằm ngoài phạm vi được phép.
Cần xác minh máy chủ chỉ chấp nhận những trường được phép thay đổi trong ngữ cảnh cụ thể. Việc lọc trường hợp lệ ở giao diện là chưa đủ, vì yêu cầu có thể được gửi bằng một công cụ khác.
Lỗi phân quyền với tệp tải lên và tài nguyên riêng tư
Tệp đính kèm, ảnh cá nhân, báo cáo nội bộ và tài liệu được tải lên thường bị bỏ quên khi kiểm tra phân quyền. Ngay cả khi API trả thông tin tệp đã được bảo vệ, đường dẫn tải tệp trực tiếp vẫn có thể cho phép người khác truy cập nếu tệp được lưu ở vị trí công khai.
Hãy kiểm tra toàn bộ luồng truy cập tệp, từ API lấy thông tin, API tải xuống đến cơ chế tạo đường dẫn tạm thời. Với tài nguyên riêng tư, hệ thống cần xác minh quyền trước khi cấp quyền truy cập và phải thiết lập thời hạn phù hợp cho các liên kết có thể được chia sẻ.
Không nên xem một đường dẫn khó đoán là biện pháp phân quyền. Nếu tài liệu chỉ dành cho một nhóm người dùng, quyền truy cập cần được kiểm soát theo chính sách của nhóm đó.
Quy trình kiểm tra phân quyền ứng dụng do Vibe Coding tạo
Để tránh bỏ sót các điểm truy cập quan trọng, nên kiểm tra theo một quy trình có hệ thống thay vì thử ngẫu nhiên từng chức năng. Quy trình dưới đây phù hợp với ứng dụng web có đăng nhập, API và nhiều vai trò người dùng.
Bước 1: Liệt kê vai trò và quyền hạn thực tế
Trước tiên, xác định các nhóm người dùng của ứng dụng, chẳng hạn khách chưa đăng nhập, thành viên, nhân viên, quản lý và quản trị viên. Với mỗi nhóm, ghi rõ những tài nguyên có thể xem, tạo, sửa, xóa hoặc quản lý.
Không nên chỉ dựa vào tên vai trò trong mã nguồn. Cần đối chiếu với yêu cầu nghiệp vụ để xác định quyền nào thực sự cần thiết. Một tài khoản có thể được phép xem dữ liệu của nhóm mình nhưng không được phép sửa dữ liệu của nhóm khác, dù cả hai cùng thuộc vai trò nhân viên.
Bước 2: Lập danh sách API và tài nguyên nhạy cảm
Thu thập các đường dẫn API, phương thức HTTP và chức năng tương ứng. Có thể xem mã nguồn định tuyến, bộ điều khiển, lớp dịch vụ, cấu hình xác thực và các thành phần truy cập cơ sở dữ liệu để xác định những điểm cần kiểm tra.
Ưu tiên các API đọc dữ liệu cá nhân, thay đổi quyền, xử lý thanh toán, quản lý tài khoản, tải tệp và thực hiện thao tác không dễ hoàn tác. Với ứng dụng có nhiều API, nên lập bảng theo dõi để tránh kiểm tra trùng lặp hoặc bỏ sót.
| Nhóm chức năng | Điểm cần xác minh | Rủi ro nếu kiểm soát sai |
|---|---|---|
| Hồ sơ người dùng | Người dùng chỉ xem và sửa dữ liệu được phép | Lộ hoặc thay đổi thông tin cá nhân |
| Đơn hàng và giao dịch | Quyền sở hữu, trạng thái và phạm vi thao tác | Truy cập dữ liệu hoặc can thiệp giao dịch |
| Quản trị tài khoản | Vai trò được phép cấp, sửa hoặc thu hồi quyền | Leo thang đặc quyền |
| Tệp riêng tư | Quyền đọc và tải xuống tài nguyên | Lộ tài liệu hoặc dữ liệu nội bộ |
| API quản trị | Máy chủ kiểm tra quyền với từng hành động | Người dùng thường thực hiện thao tác quản trị |
Bước 3: Chuẩn bị tài khoản và dữ liệu thử nghiệm
Tạo ít nhất hai tài khoản người dùng thông thường độc lập và một tài khoản quản trị trong môi trường kiểm thử. Mỗi tài khoản nên sở hữu dữ liệu riêng để có thể xác minh chính xác ranh giới truy cập.
Ví dụ, tài khoản A sở hữu hồ sơ và đơn hàng A, còn tài khoản B sở hữu hồ sơ và đơn hàng B. Dùng các dữ liệu này để kiểm tra cả hành động được phép lẫn hành động bị cấm. Nếu ứng dụng hỗ trợ nhiều nhóm hoặc tổ chức, hãy bổ sung tài khoản thuộc hai nhóm khác nhau để kiểm tra ranh giới giữa các tổ chức.
Chỉ thực hiện các thử nghiệm trên hệ thống mà bạn sở hữu hoặc được ủy quyền kiểm tra. Nếu ứng dụng đang phục vụ người dùng thật, nên sử dụng môi trường thử nghiệm và dữ liệu giả lập để hạn chế nguy cơ làm lộ thông tin hoặc gây thay đổi ngoài ý muốn.
Bước 4: Kiểm tra quyền ở cả giao diện và máy chủ
Thử sử dụng từng chức năng theo giao diện thông thường, sau đó kiểm tra yêu cầu mà trình duyệt gửi đến máy chủ. Đối chiếu phản hồi giữa tài khoản có quyền và tài khoản không có quyền.
Với từng API, cần xác minh tối thiểu những tình huống sau:
- Người chưa đăng nhập gửi yêu cầu đến tài nguyên cần xác thực.
- Người đã đăng nhập truy cập tài nguyên không thuộc phạm vi được phép.
- Người dùng thông thường gọi chức năng chỉ dành cho quản trị viên.
- Người dùng gửi thêm hoặc thay đổi các trường dữ liệu nhạy cảm.
- Người dùng tiếp tục truy cập sau khi phiên đăng nhập hoặc quyền truy cập không còn hợp lệ.
Phản hồi bị từ chối cần phù hợp với chính sách của ứng dụng, chẳng hạn trả về trạng thái yêu cầu chưa được xác thực hoặc không đủ quyền. Tuy nhiên, không nên đánh giá bảo mật chỉ dựa vào mã trạng thái HTTP: một API trả về lỗi vẫn có thể đã thực hiện thay đổi dữ liệu trước đó. Cần kiểm tra cả nội dung phản hồi và trạng thái thực tế của hệ thống sau yêu cầu.
Bước 5: Kiểm tra kết quả và ghi nhận bằng chứng
Mỗi trường hợp kiểm thử nên có thông tin về tài khoản sử dụng, tài nguyên mục tiêu, hành động thử nghiệm, kết quả mong đợi và kết quả thực tế. Khi phát hiện lỗi, cần ghi nhận API liên quan, dữ liệu thử nghiệm và bằng chứng cho thấy quyền truy cập đã bị vượt qua.
Đối với các thao tác ghi hoặc xóa dữ liệu, hãy kiểm tra trạng thái cơ sở dữ liệu hoặc sử dụng dữ liệu giả lập để xác minh hệ thống không thực hiện hành động trái phép. Không nên chỉ dựa vào thông báo trên giao diện vì thông báo đó có thể không phản ánh đúng kết quả phía máy chủ.
Sau khi sửa lỗi, chạy lại trường hợp kiểm thử ban đầu và các trường hợp liên quan. Một bản sửa có thể giải quyết lỗi ở API này nhưng chưa khắc phục những API khác sử dụng cùng tài nguyên hoặc cùng quy tắc phân quyền.
Cách rà soát mã nguồn để tìm lỗi phân quyền do AI tạo
Kiểm thử bằng tài khoản người dùng giúp phát hiện những hành vi bất thường, nhưng chưa đủ để xác định nguyên nhân gốc rễ. Để xử lý triệt để lỗi phân quyền trong ứng dụng Vibe Coding, cần kiểm tra cả cách mã nguồn xác thực yêu cầu, xác định quyền hạn, truy vấn dữ liệu và thực hiện các thao tác nhạy cảm.
Điểm quan trọng là không nên chỉ tìm những đoạn mã có tên như permission, role hoặc authorize. Quy tắc phân quyền có thể nằm trong middleware, bộ điều khiển, lớp dịch vụ, truy vấn cơ sở dữ liệu hoặc hàm xử lý nghiệp vụ. Một ứng dụng có middleware xác thực tốt vẫn có thể tồn tại lỗi nếu các lớp phía sau không kiểm tra quyền đối với từng tài nguyên.
Kiểm tra middleware và cơ chế bảo vệ API
Middleware thường chịu trách nhiệm xác thực người dùng hoặc kiểm tra những điều kiện chung trước khi yêu cầu đi vào bộ điều khiển. Khi rà soát mã do AI tạo, hãy xác định API nào được áp dụng middleware và API nào có thể truy cập mà không qua bước kiểm tra cần thiết.
Các câu hỏi cần đặt ra gồm:
- API có yêu cầu đăng nhập khi xử lý dữ liệu riêng tư hoặc thao tác nhạy cảm không?
- Middleware có thực sự xác minh thông tin xác thực hay chỉ kiểm tra sự tồn tại của một trường dữ liệu?
- Danh tính người dùng được lấy từ nguồn đáng tin cậy hay từ dữ liệu do khách hàng tự gửi lên?
- Những API quản trị có được bảo vệ nhất quán trên tất cả các phương thức HTTP không?
- Có đường dẫn nào vô tình bị loại khỏi cơ chế bảo vệ do cấu hình định tuyến hoặc điều kiện ngoại lệ không?
Một lỗi đáng chú ý là ứng dụng xác thực người dùng ở cấp toàn cục nhưng cho rằng mọi người đã đăng nhập đều được phép thực hiện tất cả thao tác. Xác thực chỉ xác định danh tính; quyền đọc, sửa hoặc xóa từng tài nguyên vẫn cần được kiểm tra theo quy tắc nghiệp vụ.
Kiểm tra bộ điều khiển và lớp dịch vụ
Bộ điều khiển tiếp nhận yêu cầu từ khách hàng, còn lớp dịch vụ thường xử lý nghiệp vụ và gọi cơ sở dữ liệu. Nếu quy tắc phân quyền chỉ được đặt ở giao diện hoặc một điểm truy cập duy nhất, những đường gọi khác có thể bỏ qua kiểm tra.
Hãy lần theo luồng xử lý từ API đến nơi dữ liệu được đọc hoặc thay đổi. Với mỗi thao tác, xác định ứng dụng kiểm tra những yếu tố nào trước khi thực thi: danh tính, vai trò, quyền sở hữu tài nguyên, trạng thái nghiệp vụ và phạm vi quản lý.
Ví dụ, API cập nhật hồ sơ có thể kiểm tra người dùng đã đăng nhập nhưng không đối chiếu mã chủ sở hữu của hồ sơ với danh tính trong phiên làm việc. Trong trường hợp này, việc bổ sung một lớp xác thực khác không giải quyết được nguyên nhân cốt lõi. Hệ thống cần kiểm tra quyền truy cập đối với chính hồ sơ đang được cập nhật.
Kiểm tra truy vấn cơ sở dữ liệu
Một trong những cách rà soát hiệu quả là xem điều kiện truy vấn có giới hạn dữ liệu theo quyền truy cập hay không. Khi truy vấn tài nguyên thuộc về một người dùng, ứng dụng nên kết hợp định danh tài nguyên với điều kiện xác định phạm vi sở hữu hoặc quyền quản lý phù hợp.
Ví dụ, giả sử ứng dụng quản lý hồ sơ khách hàng. Truy vấn chỉ tìm hồ sơ theo mã có thể chưa đủ nếu mã đó được lấy từ yêu cầu của người dùng và ứng dụng không kiểm tra quyền truy cập.
// Ví dụ minh họa logic truy vấn chưa đủ điều kiện phân quyền
$profile = Profile::where('id', $profileId)->first();
Đoạn mã trên không tự động là lỗ hổng trong mọi ứng dụng. Vấn đề xuất hiện khi hệ thống sử dụng kết quả truy vấn để trả dữ liệu hoặc thay đổi hồ sơ mà không thực hiện bất kỳ bước kiểm tra quyền hợp lệ nào.
Nếu mỗi hồ sơ thuộc về một người dùng, có thể giới hạn truy vấn theo cả mã hồ sơ và danh tính người dùng hiện tại:
// Ví dụ minh họa khi hồ sơ thuộc về một người dùng
$profile = Profile::where('id', $profileId)
->where('user_id', $currentUserId)
->first();
Cách triển khai cụ thể phụ thuộc vào framework và mô hình dữ liệu. Với tài nguyên dùng chung, dữ liệu thuộc tổ chức hoặc quyền truy cập được cấp theo nhóm, điều kiện truy vấn phải phản ánh đúng chính sách nghiệp vụ thay vì luôn áp dụng quyền sở hữu cá nhân.
Tìm các trường dữ liệu có thể làm thay đổi quyền hạn
AI có thể tạo API cập nhật dữ liệu bằng cách tiếp nhận nhiều trường từ yêu cầu rồi chuyển trực tiếp vào mô hình dữ liệu. Cách triển khai này cần được kiểm tra kỹ nếu đối tượng có các thuộc tính như vai trò, trạng thái tài khoản, chủ sở hữu, quyền quản lý hoặc trạng thái phê duyệt.
Hãy rà soát những thao tác nhận dữ liệu cập nhật hàng loạt, cơ chế gán thuộc tính tự động và các hàm lưu dữ liệu. Cần xác định rõ trường nào người dùng được phép thay đổi, trường nào chỉ hệ thống hoặc người có thẩm quyền được thay đổi.
Biện pháp phù hợp là sử dụng danh sách trường được phép cập nhật theo từng chức năng, đồng thời kiểm tra quyền trước khi ghi dữ liệu. Không nên dựa vào việc giao diện không hiển thị một trường để kết luận rằng người dùng không thể thay đổi trường đó.
Những tình huống kiểm thử phân quyền dễ bị bỏ sót
Sau khi kiểm tra các lỗi phổ biến, cần mở rộng phạm vi sang những tình huống ít xuất hiện trong luồng sử dụng bình thường. Đây là bước quan trọng để phát hiện lỗi trong các ứng dụng được AI tạo nhanh, đặc biệt khi nhiều chức năng được phát triển độc lập.
Truy cập bằng đường dẫn trực tiếp
Người dùng có thể không nhìn thấy một trang trong menu nhưng vẫn mở được trang đó bằng đường dẫn trực tiếp. Vì vậy, cần thử truy cập những trang quản trị, trang báo cáo và trang dữ liệu riêng tư bằng tài khoản không có quyền.
Việc kiểm tra phải bao gồm cả giao diện và API mà trang sử dụng. Nếu trang không hiển thị nhưng API vẫn trả dữ liệu nhạy cảm, ứng dụng vẫn có lỗi phân quyền.
Thay đổi phương thức hoặc cách gửi yêu cầu
Một chức năng có thể được bảo vệ ở phương thức GET nhưng chưa được kiểm tra đúng ở các phương thức khác. Ví dụ, API đọc dữ liệu có kiểm soát quyền sở hữu nhưng API cập nhật hoặc xóa lại thiếu điều kiện tương ứng.
Hãy kiểm tra các phương thức thực sự được ứng dụng hỗ trợ, đặc biệt với những tài nguyên có thể đọc, tạo, sửa hoặc xóa. Không nên mặc định rằng việc bảo vệ một đường dẫn sẽ tự động bảo vệ mọi thao tác trên tài nguyên đó nếu cấu hình định tuyến và cơ chế kiểm soát không bảo đảm điều này.
Phiên đăng nhập hết hạn hoặc quyền vừa bị thu hồi
Quyền của người dùng có thể thay đổi trong thời gian ứng dụng đang hoạt động. Chẳng hạn, quản trị viên hạ vai trò của một tài khoản, thu hồi quyền truy cập tổ chức hoặc khóa tài khoản. Cần xác minh những yêu cầu tiếp theo được xử lý theo trạng thái quyền hiện tại, phù hợp với chính sách của hệ thống.
Nếu ứng dụng sử dụng token chứa thông tin vai trò, hãy kiểm tra cách xử lý khi quyền thay đổi nhưng token cũ vẫn còn hiệu lực. Tùy kiến trúc, hệ thống có thể cần cơ chế thu hồi token, phiên bản quyền, thời hạn truy cập ngắn hoặc kiểm tra lại trạng thái ở các thao tác nhạy cảm.
Truy cập chéo giữa các tổ chức hoặc nhóm dữ liệu
Với ứng dụng đa tổ chức, chỉ kiểm tra quyền sở hữu người dùng là chưa đủ. Một người có thể được phép xem dữ liệu của nhiều thành viên trong tổ chức mình nhưng không được phép truy cập dữ liệu thuộc tổ chức khác.
Hãy tạo dữ liệu thử nghiệm cho ít nhất hai tổ chức độc lập. Sau đó kiểm tra các chức năng xem báo cáo, tìm kiếm, xuất dữ liệu, quản lý thành viên và tải tệp để xác minh ranh giới tổ chức được giữ nguyên trong toàn bộ quy trình.
Đặc biệt, cần chú ý các API tìm kiếm và xuất dữ liệu. Một trang chi tiết có thể kiểm tra quyền đúng nhưng API xuất toàn bộ bản ghi lại truy vấn dữ liệu mà không áp dụng điều kiện giới hạn theo tổ chức.
Yêu cầu đồng thời và thao tác nhạy cảm
Một số lỗi chỉ xuất hiện khi quyền hoặc trạng thái tài nguyên thay đổi gần như đồng thời với yêu cầu thao tác. Ví dụ, tài khoản bị thu hồi quyền trong lúc một tác vụ cập nhật đang xử lý, hoặc hai yêu cầu cùng thực hiện một thao tác vốn chỉ được phép xảy ra một lần.
Đối với các chức năng nhạy cảm như phê duyệt, thanh toán, chuyển quyền sở hữu hoặc thay đổi vai trò, hãy xác minh hệ thống kiểm tra quyền và trạng thái tại thời điểm thích hợp trước khi thực hiện thay đổi. Khi cần, nên kết hợp giao dịch cơ sở dữ liệu, kiểm soát đồng thời và quy tắc nghiệp vụ để tránh trạng thái không nhất quán.
Cách yêu cầu AI sửa lỗi phân quyền mà không tạo thêm lỗ hổng
Khi phát hiện lỗi, không nên chỉ yêu cầu AI sửa một thông báo lỗi hoặc ẩn nút chức năng. Một yêu cầu sửa lỗi tốt cần nêu rõ hành vi không an toàn, quyền truy cập mong muốn, phạm vi mã nguồn cần kiểm tra và các trường hợp phải được kiểm thử sau khi sửa.
Trước khi chỉnh sửa, hãy lưu lại bằng chứng tái hiện lỗi, xác định API liên quan và kiểm tra các chức năng cùng sử dụng tài nguyên đó. Điều này giúp AI có đủ ngữ cảnh để tìm nguyên nhân thay vì chỉ thay đổi phần mã dễ nhìn thấy.
Mẫu yêu cầu rà soát và sửa lỗi
Có thể sử dụng mẫu yêu cầu sau với công cụ Vibe Coding đang phát triển ứng dụng. Hãy thay những nội dung trong ngoặc vuông bằng thông tin thực tế của dự án.
Hãy rà soát lỗi phân quyền trong chức năng [tên chức năng] của ứng dụng này. Hiện tại, tài khoản [vai trò hoặc tài khoản thử nghiệm] có thể [mô tả hành vi vượt quyền] khi truy cập API [đường dẫn API].
Trước khi sửa, hãy lần theo toàn bộ luồng xử lý từ định tuyến, middleware, bộ điều khiển, lớp dịch vụ đến truy vấn cơ sở dữ liệu để xác định nguyên nhân gốc rễ. Không chỉ sửa giao diện hoặc ẩn nút chức năng.
Hãy triển khai kiểm tra quyền phía máy chủ theo đúng quy tắc nghiệp vụ: người dùng chỉ được thực hiện các hành động và truy cập những tài nguyên mà họ có quyền hợp lệ. Không tin tưởng mã định danh, vai trò hoặc các trường phân quyền do phía khách hàng tự gửi lên nếu chưa được xác minh.
Kiểm tra những API khác có cùng chức năng hoặc cùng tài nguyên để tránh bỏ sót lỗi tương tự. Giữ nguyên các chức năng hợp lệ, không tự ý mở rộng quyền truy cập và không làm thay đổi dữ liệu ngoài phạm vi cần thiết.
Sau khi sửa, hãy bổ sung kiểm thử cho người chưa đăng nhập, người dùng hợp lệ, người dùng không sở hữu tài nguyên, người dùng thường truy cập chức năng quản trị và trường hợp dữ liệu đầu vào cố thay đổi quyền hạn. Nêu rõ tệp đã sửa, nguyên nhân, biện pháp khắc phục và kết quả từng kiểm thử. Không khẳng định lỗi đã được xử lý hoàn toàn nếu chưa có bằng chứng kiểm thử.
Mẫu yêu cầu này giúp AI tập trung vào nguyên nhân bảo mật và hành vi cần bảo vệ. Tuy nhiên, kết quả vẫn cần được kiểm tra độc lập. AI có thể tạo ra mã đúng về cú pháp nhưng chưa đầy đủ về nghiệp vụ hoặc chưa bao quát các đường truy cập khác.
Kiểm tra lại mã do AI sửa
Sau khi nhận bản sửa, hãy đối chiếu thay đổi với yêu cầu ban đầu. Cần xác minh rằng kiểm tra quyền được thực hiện ở phía máy chủ, sử dụng danh tính đáng tin cậy và áp dụng đúng cho tài nguyên đang được thao tác.
Không nên chấp nhận bản sửa chỉ vì AI báo đã hoàn thành hoặc bộ kiểm thử hiện có chạy thành công. Hãy tự chạy lại tình huống tái hiện lỗi, thử các trường hợp bị cấm và kiểm tra dữ liệu sau thao tác để xác minh hệ thống không thực hiện hành động trái phép.
Nếu AI thay đổi nhiều tệp, hãy rà soát cả những phần ngoài chức năng trực tiếp. Việc tái cấu trúc middleware, sửa cơ chế xác thực hoặc thay đổi truy vấn dùng chung có thể ảnh hưởng đến những API khác. Các thay đổi bảo mật cần được đánh giá trong phạm vi đủ rộng để hạn chế hồi quy.
Xây dựng bộ kiểm thử phân quyền tự động
Kiểm tra thủ công rất hữu ích khi phát hiện lỗi ban đầu, nhưng khó duy trì nếu ứng dụng có nhiều API và thường xuyên được AI bổ sung chức năng. Bộ kiểm thử tự động giúp bảo đảm các quy tắc phân quyền quan trọng không bị phá vỡ khi mã nguồn thay đổi.
Thiết kế ma trận quyền cho từng chức năng
Với mỗi chức năng, xác định vai trò nào được phép thực hiện và kết quả mong đợi đối với vai trò không được phép. Ma trận này nên thể hiện cả quyền truy cập tài nguyên và quyền thực hiện hành động, thay vì chỉ phân chia theo vai trò chung.
| Tình huống | Kết quả mong đợi |
|---|---|
| Người chưa đăng nhập truy cập dữ liệu riêng tư | Từ chối theo chính sách xác thực |
| Người dùng xem tài nguyên thuộc quyền của mình | Cho phép nếu đáp ứng các điều kiện nghiệp vụ |
| Người dùng xem tài nguyên của người khác mà không có quyền | Từ chối và không làm lộ dữ liệu |
| Người dùng thường gọi chức năng quản trị | Từ chối thực hiện thao tác |
| Người dùng tự gửi trường thay đổi vai trò | Không cho phép thay đổi quyền trái phép |
| Người dùng bị thu hồi quyền truy cập | Không cho phép hành động trái với trạng thái quyền hiện tại |
Kết quả mong đợi cần được điều chỉnh theo chính sách thực tế. Ví dụ, tài nguyên không thuộc người dùng có thể trả về thông báo không tìm thấy hoặc không đủ quyền tùy thiết kế, miễn là hệ thống không tiết lộ dữ liệu và tuân thủ nhất quán quy tắc đã chọn.
Kiểm thử cả trường hợp được phép và bị từ chối
Một bộ kiểm thử chỉ xác minh người dùng hợp lệ có thể sử dụng chức năng sẽ không phát hiện được nhiều lỗi phân quyền. Mỗi nhóm API quan trọng nên có cả kiểm thử cho hành động hợp lệ và hành động bị cấm.
Chẳng hạn, với API cập nhật hồ sơ, cần kiểm tra người sở hữu hồ sơ có thể thay đổi trường được phép; người khác không thể thay đổi hồ sơ đó; trường vai trò không bị thay đổi trái phép; và yêu cầu không hợp lệ không làm dữ liệu bị cập nhật một phần.
Đối với API quản trị, hãy xác minh quản trị viên hợp lệ thực hiện được thao tác cần thiết nhưng tài khoản thông thường bị từ chối. Cách kiểm tra hai chiều này giúp tránh bản sửa quá chặt khiến chức năng hợp lệ không hoạt động hoặc quá lỏng khiến lỗ hổng vẫn tồn tại.
Tích hợp kiểm thử vào quy trình phát triển
Nếu ứng dụng được phát triển liên tục bằng Vibe Coding, nên chạy bộ kiểm thử phân quyền sau mỗi lần AI sửa mã liên quan đến xác thực, API, dữ liệu người dùng hoặc vai trò. Với các chức năng nhạy cảm, có thể đưa những kiểm thử quan trọng vào quy trình tích hợp liên tục để ngăn thay đổi không an toàn được triển khai.
Không nên chỉ kiểm thử khi ứng dụng sắp đưa vào vận hành. Khi quyền truy cập được kiểm tra ngay từ lúc xây dựng chức năng, việc tìm nguyên nhân thường dễ hơn và ít ảnh hưởng đến những thành phần đã hoàn thiện.
Checklist kiểm tra trước khi đưa ứng dụng vào vận hành
Trước khi phát hành ứng dụng do Vibe Coding tạo, hãy sử dụng danh sách dưới đây để rà soát các rủi ro phân quyền quan trọng. Những mục chưa có bằng chứng kiểm thử nên được xem là chưa xác minh, thay vì mặc định đã an toàn.
- Đã xác định các vai trò, quyền hạn và phạm vi dữ liệu của từng nhóm người dùng.
- Các API cần đăng nhập đều được bảo vệ bằng cơ chế xác thực phù hợp.
- Máy chủ kiểm tra quyền đối với từng tài nguyên, không chỉ kiểm tra người dùng đã đăng nhập.
- Người dùng không thể truy cập dữ liệu của tài khoản khác nếu không có quyền hợp lệ.
- API quản trị từ chối yêu cầu của người dùng không đủ quyền, kể cả khi gọi trực tiếp.
- Các trường nhạy cảm như vai trò, chủ sở hữu và trạng thái phê duyệt được kiểm soát ở phía máy chủ.
- Truy vấn đọc, sửa, xóa, tìm kiếm và xuất dữ liệu đều tuân thủ phạm vi truy cập.
- Tệp riêng tư và tài nguyên lưu trữ không thể bị truy cập chỉ bằng một đường dẫn không được bảo vệ.
- Quyền truy cập được xử lý phù hợp khi tài khoản bị khóa, phiên hết hạn hoặc quyền bị thu hồi.
- Các ranh giới dữ liệu giữa người dùng, nhóm và tổ chức được kiểm tra riêng.
- Đã có kiểm thử cho cả hành động được phép và hành động bị cấm.
- Các lỗi đã phát hiện được kiểm thử lại sau khi sửa và có bằng chứng xác nhận kết quả.
- Những thay đổi do AI tạo đã được rà soát, đặc biệt tại middleware, API, lớp dịch vụ và truy vấn dữ liệu.
Nên ưu tiên sửa lỗi phân quyền nào trước?
Khi phát hiện nhiều lỗi cùng lúc, cần ưu tiên dựa trên mức độ ảnh hưởng, khả năng bị khai thác, phạm vi dữ liệu và hậu quả nghiệp vụ. Không nên chỉ dựa vào số lượng lỗi hoặc mức độ dễ sửa để quyết định thứ tự xử lý.
Ưu tiên cao nhất thường là những lỗi cho phép truy cập trái phép vào dữ liệu nhạy cảm trên diện rộng, thực hiện thao tác quản trị, thay đổi quyền tài khoản hoặc can thiệp giao dịch. Những lỗi này cần được hạn chế khả năng khai thác và khắc phục trước khi tiếp tục mở rộng chức năng liên quan.
Tiếp theo là các lỗi cho phép đọc hoặc sửa dữ liệu ngoài phạm vi được phép, tải tệp riêng tư trái phép hoặc vượt qua ranh giới giữa các tổ chức. Mức độ ưu tiên cụ thể phụ thuộc vào loại dữ liệu, số lượng người bị ảnh hưởng và khả năng khai thác thực tế.
Các lỗi ít ảnh hưởng hơn vẫn cần được ghi nhận và sửa theo kế hoạch. Tuy nhiên, không nên xem một lỗi là nhẹ chỉ vì cần nhiều bước mới tái hiện được. Nếu lỗi dẫn đến lộ dữ liệu cá nhân hoặc vượt quyền trong điều kiện thực tế, mức độ rủi ro có thể cao hơn đánh giá ban đầu.
Sau khi khắc phục, hãy chạy lại các bài kiểm thử liên quan, kiểm tra nhật ký để xác định liệu hành vi truy cập trái phép có từng xảy ra hay không và đánh giá nhu cầu thu hồi phiên, token hoặc quyền truy cập đã cấp. Nếu dữ liệu thật có thể đã bị lộ, cần xử lý theo quy trình ứng phó sự cố của tổ chức thay vì chỉ sửa mã nguồn.
Kết luận
Kiểm tra lỗi phân quyền ứng dụng do Vibe Coding tạo cần được thực hiện ở cả ba cấp độ: hành vi thực tế, mã nguồn và kiểm thử tự động. Một ứng dụng chạy đúng chức năng chưa chắc đã bảo vệ đúng dữ liệu; giao diện ẩn chức năng cũng không chứng minh rằng API phía máy chủ đã được bảo vệ.
Cách tiếp cận hiệu quả là xác định rõ vai trò và phạm vi truy cập, lập danh sách API, kiểm thử bằng nhiều tài khoản độc lập, rà soát luồng xử lý từ yêu cầu đến cơ sở dữ liệu và bổ sung kiểm thử hồi quy sau mỗi lần sửa lỗi. Đặc biệt, hãy chú ý đến lỗi truy cập đối tượng, leo thang đặc quyền, cập nhật trường nhạy cảm và tài nguyên riêng tư.
Vibe Coding có thể giúp phát triển phần mềm nhanh hơn, nhưng tốc độ tạo mã không thay thế được quá trình xác minh bảo mật. Khi phân quyền được xem là một yêu cầu bắt buộc ngay từ lúc xây dựng chức năng, ứng dụng sẽ có cơ sở vững chắc hơn để bảo vệ dữ liệu và hạn chế những sai sót có thể phát sinh trong quá trình AI hỗ trợ lập trình.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *