2012-03-26 93 views
15

由于数据大小不是我的web应用程序需要加载的,所以它会变得非常慢,因此我决定添加一些jQuery ajax函数来根据请求加载某些数据,然后将其保存在缓存中。只接受来自本地主机的获取/发布请求

我想知道的是如何限制任何GETPOST只请求从本地主机/服务器相同/ ip相同,所以我可以避开从外到我的应用程序的任何电话?

这意味着我的PHP函数返回数据,只有当从localhost请求时才返回数据。

我的web应用程序运行在CodeIgniter的框架上,我的web服务器的配置是在ubuntu上运行的LAMP。

任何想法?

回答

22

在构造函数中,你可以使用

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

不过,如果你要寻找这种方法的心不是..使用.htaccess您可以执行快速谷歌搜索返回否认GET/POST到一个具体的例子所有,然后允许127.0.0.1/localhost。

+1

你可能想使一个异常时,$ _ SERVER [ 'SERVER_ADDR']返回:: 1 – TheRealChx101 2015-05-12 19:02:36

+3

注意:您可以假冒REMOTE_ADDR的http://计算器。 com/questions/5092563/how-to-fake-serverremote-addr-variable – 2015-08-02 11:44:59

10

使用.htaccess可能是最好的方式,只允许从您的本地地址和127.0.0.1。 我发现这个例子在petergasser.com和改变它只是稍微:

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

这很奇怪......我被禁止了,也许Docker有问题?不同的IP? – 2017-11-22 06:51:21

+1

只要apache和发出请求的应用程序位于同一主机上,它就不应该有所作为。当然,你必须确保apache正在监听有问题的IP地址。 – h00ligan 2017-11-25 14:14:12

+0

我相信码头使用一些其他的IP如172.18.0.3或其他东西,它不起作用。但是如果我在“允许来源”中使用我的LAN地址,它就可以工作。 – 2017-11-27 11:08:09

3

使用钥匙(API想到键)来一同发送到你的服务器发送。然后在你的服务器上检查这个密钥,如果它是正确的,你返回数据。

+0

为什么这比Mike's或h00ligan的解决方案更具优势? – Alex 2012-03-26 13:22:00

+0

只有在您根据呼叫来自何处才能返回不同数据的情况下,其他解决方案没有优势。 – slash197 2012-03-26 13:33:32

+0

谢谢@ slash197,但我现在要坚持上面提到的解决方案。任何方式,你有什么好文章,我可以读你的解决方案的东西? – Alex 2012-03-26 13:35:03

2

我用这样的,由于@gorelative

if( 
isset($_SERVER['REMOTE_ADDR']) AND ($_SERVER['REMOTE_ADDR'] !== $_SERVER['SERVER_ADDR']) 
){ 
die(' Access Denied, Your IP: ' . $_SERVER['REMOTE_ADDR']); 
}