Xử lý tính bảo mật, lỗi, cảnh báo và ghi nhật ký

Phần này bao gồm các chủ đề sau:

Bảo mật

Nguồn dữ liệu có thể hoạt động ở một trong hai chế độ truy cập như sau:

  • Ở chế độ truy cập bị hạn chế (mặc định), nguồn dữ liệu chỉ phân phát các yêu cầu bắt nguồn từ cùng một miền với nguồn dữ liệu đó. Chế độ hạn chế ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web (XSRF) và do đó an toàn hơn so với chế độ truy cập không hạn chế. Vì thư viện nguồn dữ liệu chỉ cung cấp giao diện để trả về dữ liệu, chứ không phải để thay đổi trạng thái hoặc dữ liệu phía máy chủ, nên chỉ có các cuộc tấn công XSRF tìm cách đánh cắp dữ liệu. Để đảm bảo nguồn dữ liệu của bạn được an toàn trước các nỗ lực lấy cắp dữ liệu, bạn phải sử dụng chế độ hạn chế kết hợp với xác thực dựa trên cookie. Cách bạn xác thực người dùng phụ thuộc vào môi trường và cách triển khai của bạn.

  • Ở chế độ truy cập không hạn chế, nguồn dữ liệu phân phát tất cả các yêu cầu bất kể nguồn gốc. Một nguồn dữ liệu chạy ở chế độ không hạn chế có thể được bảo vệ bằng phương thức xác thực dựa trên cookie, nhưng lưu ý rằng nguồn dữ liệu sẽ dễ bị tấn công bởi XSRF. Hãy sử dụng chế độ không hạn chế nếu các hình ảnh trực quan trên trang web nằm ngoài miền của nguồn dữ liệu cần truy cập vào nguồn dữ liệu hoặc nếu dữ liệu nằm trong phạm vi công cộng và không cần được bảo vệ.

Yêu cầu hình ảnh hóa có thể chỉ định định dạng phản hồi của JSON, CSV hoặc HTML. Định dạng phản hồi xác định định dạng trong đó nguồn dữ liệu sẽ trả về bảng dữ liệu. Vì các định dạng CSV và HTML không dễ bị tấn công XSRF, nên bạn có thể truy cập vào các định dạng này qua các miền khác, ngay cả ở chế độ hạn chế.

Để chỉ định chế độ không hạn chế, hãy ghi đè isRestrictedAccessMode() như sau:

  @Override
  protected boolean isRestrictedAccessMode() {
    return false;
  }

Để đơn giản, tất cả ví dụ đi kèm với thư viện đều chạy ở chế độ truy cập không hạn chế.

Lỗi và cảnh báo

Khi không thể hoặc mong muốn trả về một bảng dữ liệu hợp lệ, thư viện sẽ gửi một DataSourceException. Ví dụ: không xác thực được người dùng. Thư viện sẽ ném những trường hợp ngoại lệ này khi lỗi ngăn cản quá trình tạo bảng dữ liệu. Bạn nên gửi các trường hợp ngoại lệ trong những tình huống riêng cho nguồn dữ liệu. Nếu có, hãy tạo các loại ngoại lệ lỗi của riêng bạn bằng cách kế thừa từ lớp DataSourceException. Bạn cũng có thể trực tiếp gửi lớp DataSourceException.

Lớp DataSourceException nằm trong gói base, nó sẽ nhận các thông số sau:

  • ReasonType
    Thông số này là bắt buộc. Các loại lý do có sẵn được xác định trong enum ReasonType. Nếu không có lý do nào phù hợp, bạn có thể sử dụng Other hoặc Internal.
     
  • MessageToUser
    Thông số này xác định văn bản của thông báo lỗi. Trong hầu hết trường hợp, thông tin đó được hiển thị cho người dùng dưới dạng chú giải công cụ, vì vậy, bạn không nên bao gồm thông tin kỹ thuật hoặc thông tin bí mật.

Bạn có thể sử dụng nhóm hàm trợ giúp trong datasource.DataSourceHelper để xử lý các lỗi. Trong trường hợp này, hãy gọi hai hàm có cùng tên setErrorServletResponse để lấy DataSourceException và thiết lập lỗi trong phản hồi dữ liệu của Bot. Một trong các hàm này nhận yêu cầu nguồn dữ liệu, hàm còn lại nhận HttpServlet request và được dùng trong trường hợp không tạo được DataSourceRequest. Chúng tôi cung cấp một ví dụ triển khai trong phần Xác định chức năng và Luồng sự kiện.

Nếu không thể trả về bảng dữ liệu, thư viện sẽ trả về lỗi. Nếu có thể trả về một bảng dữ liệu, nhưng có một vấn đề khi báo cáo, thư viện sẽ trả về một cảnh báo cùng với bảng dữ liệu. Ví dụ: thư viện sẽ tạo cảnh báo trong các trường hợp sau:

  • nếu hình ảnh truy vấn cung cấp một LIMIT dẫn đến dữ liệu bị cắt bớt.
  • nếu hình ảnh truy vấn yêu cầu một mẫu định dạng không hợp lệ trong mệnh đề FORMAT.

Để thêm cảnh báo của riêng bạn, hãy tạo một bản sao của base.Warning và thêm bản sao đó vào bảng dữ liệu bằng cách sử dụng phương thức addWarning().

Ghi nhật ký

Thư viện này sử dụng tính năng ghi nhật ký chung của Jakarta. Bạn có thể sử dụng tính năng ghi nhật ký chung của Jakarta với hầu hết các hệ thống ghi nhật ký phổ biến mà bạn có thể đã sử dụng. Bạn có thể cần phải viết bộ chuyển đổi nếu hệ thống ghi nhật ký của mình không chuẩn. Để biết thêm thông tin chi tiết, hãy xem trang chủ của nhật ký thông tin chung của Jakarta.

Khi một ngoại lệ được gửi, thông tin sẽ được gửi tới nhật ký. Cách bạn truy cập vào nhật ký sẽ phụ thuộc vào hệ thống ghi nhật ký mà bạn sử dụng.