Khi sử dụng `whloaded ()` trong graphQl, thường là phương pháp để tải dữ liệu hoặc liên kết liên quan đến một cách có điều kiện (ví dụ: trong các giải quyết GraphQL dựa trên ORM), một số cạm bẫy bảo mật phổ biến có thể phát sinh. Những cạm bẫy này chủ yếu liên quan đến các vấn đề bảo mật GraphQL rộng hơn nhưng đặc biệt có liên quan vì `Khi tải ()` thường liên quan đến việc tìm nạp thêm dữ liệu lồng nhau hoặc liên quan, tăng độ phức tạp và rủi ro.
Cạm bẫy bảo mật chung với `wheladed ()` trong graphql
** 1. Kiểm tra ủy quyền không nhất quán hoặc thiếu
`Khi tải ()` thường kích hoạt tải dữ liệu lồng nhau hoặc liên quan sau khi trình phân giải ban đầu chạy. Nếu logic ủy quyền không được áp dụng nhất quán ở mọi điểm phân giải hoặc điểm tải dữ liệu (bao gồm cả những người được kích hoạt bởi `whloaded ()`), người dùng trái phép có thể có quyền truy cập vào dữ liệu nhạy cảm. Đây là một vấn đề phổ biến trong đó một số đường dẫn đến cùng một dữ liệu được bảo vệ, nhưng các đường dẫn khác (như thông qua `whloaded ()`) không, cho phép kẻ tấn công vượt qua các điều khiển truy cập [4] [6]. Ủy quyền phải được thực thi cả ở cấp truy vấn và trong tất cả các trình giải quyết hoặc trình tải dữ liệu lồng nhau.
** 2. Truy vấn tìm kiếm quá mức và phức tạp dẫn đến từ chối dịch vụ (DOS)
Sử dụng `whloaded ()` có thể gây ra các truy vấn được lồng sâu lấy một lượng lớn dữ liệu liên quan. Những kẻ tấn công có thể khai thác điều này bằng cách chế tạo các truy vấn gây ra tải và xử lý dữ liệu quá mức, dẫn đến cạn kiệt tài nguyên và DOS. Khả năng tìm nạp nhiều đối tượng liên quan trong một truy vấn duy nhất khiến việc dự đoán việc sử dụng tài nguyên và `wheled ()` có thể làm trầm trọng thêm điều này bằng cách tải dữ liệu bổ sung có điều kiện [4] [5]. Giảm thiểu bao gồm giới hạn độ sâu truy vấn, tính điểm phức tạp và giới hạn tỷ lệ.
** 3. Tiếp xúc với dữ liệu nhạy cảm thông qua lựa chọn trường không đúng
Nếu `whloaded ()` Tải dữ liệu liên quan mà không cần kiểm soát cẩn thận các trường nào được phơi bày, thông tin nhạy cảm như mật khẩu, mã thông báo hoặc chi tiết người dùng riêng tư có thể được trả về trong phản hồi GraphQL [5]. Rủi ro này được tăng cao nếu kiểm tra ủy quyền bị thiếu hoặc nếu thông báo lỗi thông tin rò rỉ thông tin nhạy cảm. Các nhà phát triển phải đảm bảo rằng các trường nhạy cảm không bao giờ được phơi bày, ngay cả khi dữ liệu lồng nhau được tải.
** 4. Tấn công tiêm thông qua xác thực đầu vào không đúng
Khi `Khi tải ()` được sử dụng với các đối số hoặc bộ lọc động, xác thực đầu vào không đúng có thể dẫn đến các lỗ hổng tiêm, chẳng hạn như tiêm Truy vấn GraphQL hoặc thậm chí tiêm SQL nếu việc tìm nạp dữ liệu cơ bản không được tham số chính xác [6]. Những kẻ tấn công có thể tiêm các truy vấn hoặc lệnh độc hại thao túng logic tìm nạp dữ liệu. Xác thực đầu vào thích hợp và sử dụng các truy vấn tham số hóa là rất cần thiết.
** 5. Bỏ qua giới hạn tỷ lệ và bảo vệ lực lượng vũ phu
Bởi vì `Khi tải ()` có thể gây ra nhiều dữ liệu lồng nhau trong một truy vấn duy nhất, những kẻ tấn công có thể khai thác điều này để bỏ qua giới hạn tốc độ truyền thống. Ví dụ, họ có thể gửi một truy vấn phức tạp duy nhất kích hoạt nhiều dữ liệu tìm nạp hoặc đột biến, thực hiện hiệu quả các cuộc tấn công vũ phu hoặc liệt kê mà không gây ra giới hạn yêu cầu mỗi lần [4] [7]. Các chiến lược giới hạn tỷ lệ phải xem xét sự phức tạp truy vấn và hoạt động lồng nhau.
** 6. Tăng bề mặt tấn công do hướng nội và dụng cụ
Việc sử dụng `whi tải ()` thường phản ánh một lược đồ phức tạp với nhiều mối quan hệ lồng nhau. Những kẻ tấn công có thể sử dụng nội tâm và các công cụ như graphiql để khám phá các mối quan hệ và truy vấn thủ công này để khai thác `whiLed ()` để truy cập dữ liệu ngoài ý muốn [1] [8]. Vô hiệu hóa nội tâm trong sản xuất hoặc hạn chế nó cho người dùng được ủy quyền có thể giảm rủi ro này.
Bản tóm tắt
Các cạm bẫy bảo mật chính khi sử dụng `whiLed ()` trong graphQl xoay quanh:
- Không thực thi ủy quyền nhất quán trên tất cả các đường dẫn tải dữ liệu lồng nhau.
- Cho phép các truy vấn quá phức tạp hoặc sâu gây ra dos.
- Tiếp xúc dữ liệu nhạy cảm thông qua các trường lồng nhau.
- Không đủ xác thực đầu vào dẫn đến các cuộc tấn công tiêm.
- Bỏ qua giới hạn tốc độ do các truy vấn lồng nhau phức tạp.
- Tăng phơi nhiễm do hướng nội và dụng cụ.
Giảm thiểu bao gồm kiểm tra ủy quyền nghiêm ngặt ở mọi chất giải quyết, độ phức tạp truy vấn và giới hạn độ sâu, xác thực đầu vào nghiêm ngặt, thiết kế lược đồ cẩn thận, vô hiệu hóa hướng nội trong sản xuất và giới hạn tốc độ toàn diện phù hợp với cấu trúc truy vấn của GraphQLâ [3] [4] [5] [6] [8].
Trích dẫn:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulne
.
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_most_common_graphql_vulnerabilities_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerability.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql