it-swarm-vi.com

Tôi có thể tin tưởng IP nguồn của yêu cầu HTTP không?

Theo như tôi đã hiểu, nếu bạn cố gắng đưa ra yêu cầu HTTP với địa chỉ IP giả mạo, thì bắt tay TCP không thành công, vì vậy không thể hoàn thành yêu cầu HTTP, vì SYN/ACK từ máy chủ không đến được máy khách xấu ...

... trong hầu hết các trường hợp. Nhưng bây giờ chúng ta hầu như không quan tâm đến bốn trường hợp sau:
[.__.] - Người đàn ông ở giữa (MITM) tấn công
[.__.] - Trường hợp khi máy khách độc ác điều khiển mạng của máy chủ Web
[.__.] - Trường hợp khi khách hàng độc ác giả mạo một IP khác trên mạng cục bộ của chính nó
[.__.] - Tấn công BGP

Sau đó, tôi thực sự có thể tin tưởng địa chỉ IP của một yêu cầu HTTP?

Bối cảnh: Tôi đang suy nghĩ về việc xây dựng bản đồ địa chỉ IP và sử dụng tài nguyên và chặn địa chỉ IP tiêu thụ quá nhiều tài nguyên. Nhưng tôi tự hỏi liệu có, ví dụ, có cách nào đó để giả mạo số lượng địa chỉ IP vô hạn (bằng cách phát hành các yêu cầu HTTP thành công với IP giả mạo), để máy chủ Web resource-used-by-IP- bộ đệm phát triển rất lớn và gây ra lỗi hết bộ nhớ.

(Hmm, có lẽ một bộ định tuyến Internet xấu có thể giả mạo rất nhiều yêu cầu. Nhưng chúng không phải là ác. (Đây sẽ là một cuộc tấn công MITM? Đó là lý do tại sao tôi nói chủ yếu coi thường, ở trên))

41
KajMagnus

Có (với giả định của bạn về việc bỏ qua ứng dụng khách có thể chặn việc trả lại cái bắt tay tại một IP giả mạo) nếu bạn thực hiện đúng cách. Yêu cầu HTTP được thực hiện qua TCP; cho đến khi bắt tay hoàn tất, máy chủ web sẽ không bắt đầu xử lý yêu cầu HTTP. Cấp một người dùng ngẫu nhiên có thể cố gắng giả mạo kết thúc của một cái bắt tay; nhưng vì họ phải đoán máy chủ đã tạo ACK, nên họ chỉ có cơ hội 1 trong 2 ^ 32 (~ 4 tỷ) để thực hiện thành công mỗi lần.

Như Ladadadada đã nhận xét, đảm bảo bạn không chọn sai giá trị của địa chỉ IP từ xa trong ứng dụng web của mình. Bạn muốn địa chỉ IP từ tiêu đề IP datagram (cụ thể là địa chỉ IP nguồn). Bạn không muốn các giá trị như X-Forwarded-For/X-Real-IP có thể được giả mạo một cách tầm thường khi chúng được đặt trong tiêu đề HTTP. Chắc chắn kiểm tra bằng cách cố gắng giả mạo một số địa chỉ IP; với giả sử plugin trình duyệt hoặc thủ công với telnet yourserver.com 80.

Mục đích của các trường này là các proxy web (có thể nói nội dung bộ đệm để phục vụ nhanh hơn) có thể giao tiếp với máy chủ web địa chỉ IP thực của người dùng thay vì địa chỉ IP proxy (có thể dành cho hàng trăm người dùng). Tuy nhiên, vì bất cứ ai cũng có thể thiết lập trường này, nó không đáng tin cậy.

23
dr jimbob

Tôi có thể tin tưởng IP nguồn của yêu cầu HTTP không?

Bạn có thể yên tâm một cách hợp lý rằng địa chỉ IP nguồn của yêu cầu HTTP là địa chỉ nguồn của kết nối TCP đã tạo yêu cầu.

Khi nào nên tin tưởng một địa chỉ IP là một câu hỏi cụ thể theo ngữ cảnh phức tạp, nhưng đó không thực sự là những gì bạn đang hỏi.

bạn lo ngại về tác động của việc sử dụng/thực hiện giới hạn tốc độ trên mỗi IP ở lớp ứng dụng và bất kỳ lỗ hổng bổ sung nào đối với các cuộc tấn công từ chối dịch vụ?

Tôi tự hỏi nếu làm điều đó, trong lớp ứng dụng, sẽ giới thiệu các lỗ hổng bổ sung, vâng.

Nó phụ thuộc hoàn toàn vào việc thực hiện của bạn, cả chính sách và công nghệ.

  • Loại tài nguyên nào bạn muốn đánh giá mức tiêu thụ giới hạn?
  • Bạn muốn đạt được điều gì bằng cách tạo ra giới hạn tỷ lệ này?
  • Trong khoảng thời gian nào bạn muốn thực hiện kế toán?
  • Nơi nào bạn muốn áp dụng giới hạn?
  • Địa chỉ IP có phải là chìa khóa tốt nhất cho giới hạn tốc độ không?
  • Những lý do có khả năng cho tiêu thụ quá mức là gì?
  • Trải nghiệm người dùng nên là gì trong trường hợp tiêu thụ quá mức?

Tùy thuộc vào câu trả lời cho những câu hỏi này, giới hạn tỷ lệ có thể được đặt tốt hơn ở nơi khác trong cơ sở hạ tầng dịch vụ, ví dụ: tường lửa chuyên dụng, tường lửa cục bộ. Hoặc nếu quyền truy cập được xác thực, thì thông tin xác thực có thể là chìa khóa tốt hơn cho kế toán tỷ lệ và giới hạn của bạn sẽ được xác định.

2
MattH

Điều gì sẽ là điểm trong việc phát hành SYN giả mạo cho máy chủ HTTP nếu bạn không có ý định tiếp tục bắt tay TCP? Máy chủ web của bạn sẽ không thấy yêu cầu HTTP trừ khi (có thể bị giả mạo) khách hàng nhận được SYN/ACK và tiếp tục thiết lập TCP và gửi yêu cầu HTTP.

Lưu trữ cơ sở dữ liệu trên đĩa, cấu trúc nó một cách khéo léo (như một cái cây) để tra cứu nhanh.

Nếu khách hàng bị giả mạo hay không, điều đó thực sự tạo ra sự khác biệt cho bạn? Nếu họ làm sai, họ làm sai, bất kể họ có bị giả mạo hay không.

Từ quan điểm của máy chủ web, tôi sẽ coi IP từ xa là IP từ xa thực sự.

1
MattBianco