2012-02-01 30 views
5

Tôi có một dòng nơi tôi lấy hàng cơ sở dữ liệu với .get(field = ID). Một người dùng bình thường sẽ luôn gửi ID tồn tại trong cơ sở dữ liệu, nhưng một hacker có thể không, và nó sẽ ném một ngoại lệ DoesNotExist. Có quan trọng để nắm bắt nó một cách rõ ràng hay tôi nên để ngoại lệ không bị bắt trong trường hợp đó? Dù bằng cách nào, tin tặc sẽ không thấy bất kỳ thông báo nào vì vậy không có bất kỳ rủi ro bảo mật nào.Tôi có nên bắt lỗi không bao giờ xảy ra với người dùng thông thường không?

Tôi cũng tự hỏi liệu tôi có nên ghi nhật ký ngoại lệ này không. Sẽ được quan tâm trong việc nghe những gì các bạn làm như một quy tắc chung của ngón tay cái, và biện minh cho những gì bạn đăng nhập/bắt so với những gì bạn cho ném một ngoại lệ không bị bắt.

Trả lời

2

Phần quan trọng là trong bối cảnh bạn đang sử dụng trường này. Nếu bạn truy cập trang qua /profile/[ID] Tôi sẽ hiển thị một trang Người dùng không tìm thấy trang. Nếu bạn làm điều gì đó như vậy

ID = context["user"].id 
Object.get(field = ID) 

Tôi sẽ không cố gắng nắm bắt lỗi một cách riêng biệt.

Tất cả trong tất cả, tôi lưu mọi lỗi không thể gây ra thông qua hành vi người dùng thông thường. Sau đó, tôi có thể xem xét nhật ký lỗi của mình và có thể trực tiếp thấy nơi trang web của tôi gây ra lỗi hoặc liệu tin tặc có cố gắng tìm lỗ hổng bảo mật hay không.

Sau đó, tôi khắc phục hành vi không xác định này để nhật ký lỗi bị trống càng tốt.

+1

Tôi đồng ý. Nó phụ thuộc vào nội dung. Nếu truy vấn này tồn tại trong chế độ xem của bạn được kết nối trực tiếp với điều hướng hoặc đầu vào của người dùng, thì bạn nên xử lý một giá trị không hợp lệ và trả về một phản hồi. Nhưng nếu truy vấn nằm ở tầng mô hình và người dùng không có quyền truy cập trực tiếp vào nó thì bạn sẽ không gặp vấn đề gì. Điểm mấu chốt là lọc và xử lý tất cả đầu vào của người dùng. Điều đó bao gồm các tham số GET và POST – jdi

+0

Ngữ cảnh là một phương thức/ajax bật lên. Dựa trên những gì hai bạn đã nói, tôi quyết định bắt ngoại lệ 'DoesNotExist' trong trường hợp này và trả về một thông báo lỗi thích hợp khi người dùng cố gắng truyền đối thoại phương thức một ID không có trong cơ sở dữ liệu. – babonk

Các vấn đề liên quan