只允许我的服务器在PHP中执行脚本

时间:2012-11-11 02:27:44

标签: php security nginx xss csrf

阻止从其他主机执行PHP脚本的最佳方法是什么?基本上,我只希望我的服务器web1.mydomain.com执行PHP脚本。现在,如果我创建一个html文件,其iframeimg tag指向我在另一个域上的脚本并调用它,它就会工作并执行。我想阻止这一点。

是否可以在Web服务器级别而不是PHP应用程序代码中执行此操作?我正在使用nginx。那将是最好的解决方案。

4 个答案:

答案 0 :(得分:4)

要防止将网页嵌入到域外的框架中,您可以设置X-Frame-Options响应标头,以防止来自其他网域的网页嵌入到iframe中(只要浏览器服从)。

在nginx中,您可以将其添加到配置中:

add_header X-Frame-Options SAMEORIGIN;

对于Apache:

Header always append X-Frame-Options SAMEORIGIN

https://developer.mozilla.org/en-US/docs/The_X-FRAME-OPTIONS_response_header


对于<img>代码,您可以查看$_SERVER['HTTP_REFERER']

if(isset($_SERVER['HTTP_REFERER'])){
    if(preg_match("@^http://web1.mydomain.com($|/.*)@", $_SERVER['HTTP_REFERER']) != 1){
        die;
    }
}

此方法依赖于用户代理设置的HTTP_REFERER。我认为这应该适用于大多数情况。不幸的是,我没办法测试。

我认为这也阻止了AJAX?...

实际上它也阻止了使用<a>标记链接到您网页的用户,所以我不会说这是一个非常好的标签...

答案 1 :(得分:1)

这似乎是valid_referers nginx指令的教科书案例。

在脚本的location - 块中添加以下内容:

valid_referers web1.mydomain.com;

或者如果你想要不那么严格,并且对剥离/混淆的引用者更加宽容:

valid_referers none blocked web1.mydomain.com;

请参阅http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers了解详情

答案 2 :(得分:0)

如果您有权访问您的apache配置文件,您可以执行以下操作:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

之后您可能需要添加以下内容:

<FilesMatch "*\.(css|js|gif|jpg|png)$">
  Order Allow,Deny
  Allow from all
</FilesMatch>

答案 3 :(得分:0)

您可以使用nginx主机配置来执行此操作。将以下代码放在所有主机server块中,除了要允许执行的主机。

  location /myscript {
    deny all;
  }