2012-03-26 44 views
15

Do kích thước dữ liệu không nhỏ mà ứng dụng web của tôi cần tải, nên nó khá chậm một chút vì vậy tôi quyết định thêm một số chức năng jQuery ajax để tải dữ liệu nhất định theo yêu cầu và sau đó lưu nó vào bộ nhớ cache.Chỉ chấp nhận yêu cầu nhận/gửi từ localhost

Những gì tôi muốn biết là làm thế nào tôi có thể giới hạn bất kỳ GET hoặc POST yêu cầu chỉ từ localhost cùng máy chủ/cùng ip/vì vậy tôi có thể tránh được bất kỳ cuộc gọi từ bên ngoài vào ứng dụng của tôi?

Điều đó có nghĩa là các hàm php của tôi trả về dữ liệu, chỉ trả lại dữ liệu nếu được yêu cầu từ máy chủ cục bộ.

Ứng dụng web của tôi chạy trên khung của CodeIgniter và cấu hình máy chủ web của tôi là LAMP chạy trên ubuntu.

Bất kỳ ý tưởng nào?

Trả lời

22

trong constructor bạn có thể sử dụng

if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']){ 
    $this->output->set_status_header(400, 'No Remote Access Allowed'); 
    exit; //just for good measure 
} 

Tuy nhiên, nếu phương pháp này isnt những gì bạn đang tìm kiếm .. sử dụng .htaccess bạn có thể thực hiện tìm kiếm google nhanh chóng quay trở lại một ví dụ cụ thể để từ chối get/đường bưu điện đến tất cả và sau đó cho phép 127.0.0.1/localhost.

+1

Bạn có thể muốn thực hiện một ngoại lệ khi $ _SERVER [ 'SERVER_ADDR'] trả :: 1 – TheRealChx101

+3

Lưu ý: Bạn có thể giả mạo REMOTE_ADDR http: // stackoverflow. com/questions/5092563/how-to-fake-serverremote-addr-biến –

10

Sử dụng .htaccess có lẽ là cách tốt nhất, chỉ cho phép từ địa chỉ cục bộ của bạn và 127.0.0.1. tôi thấy ví dụ này tại petergasser.com và thay đổi nó chỉ hơi:

AuthName "bla" 
AuthType Basic 
<Limit GET POST> 
order deny,allow 
deny from all 
allow from 127.0.0.1 
allow from <your-ip-here> 
</Limit> 
+0

Lạ thật ... Tôi bị cấm, có thể là vấn đề với docker? Ip khác nhau? –

+1

Nó không nên tạo sự khác biệt miễn là cả apache và ứng dụng tạo yêu cầu đều nằm trên cùng một máy chủ. Tất nhiên bạn phải chắc chắn rằng apache đang lắng nghe các địa chỉ IP được đề cập. – h00ligan

+0

Tôi tin rằng docker đang sử dụng một số ip khác như 172.18.0.3 hoặc một cái gì đó, nó không hoạt động. Nhưng nếu tôi sử dụng địa chỉ LAN của tôi trong "cho phép từ", nó hoạt động. –

3

Sử dụng một chìa khóa (nghĩ về phím API) để gửi cùng yêu cầu đến máy chủ của bạn. Sau đó, trên máy chủ của bạn, bạn kiểm tra khóa đó và nếu đó là một trong những quyền bạn trả về dữ liệu.

+0

tại sao đó sẽ là lợi thế so với giải pháp của Mike hoặc h00ligan? – Alex

+0

Không có lợi thế so với các giải pháp khác chỉ trong trường hợp bạn sẽ trả về dữ liệu khác nhau dựa trên nơi cuộc gọi đến. – slash197

+0

Cảm ơn @ slash197 nhưng tôi sẽ gắn bó với các giải pháp được đề cập ở trên cho đến bây giờ. Bất kỳ cách nào, bạn có bất kỳ bài viết tốt, nơi tôi có thể đọc một cái gì đó về giải pháp của bạn? – Alex

2

tôi sử dụng như thế này, nhờ @gorelative

if( 
isset($_SERVER['REMOTE_ADDR']) AND ($_SERVER['REMOTE_ADDR'] !== $_SERVER['SERVER_ADDR']) 
){ 
die(' Access Denied, Your IP: ' . $_SERVER['REMOTE_ADDR']); 
} 
Các vấn đề liên quan