0

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

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

4

4 回答 4

4

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

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

add_header X-Frame-Options SAMEORIGIN;

对于阿帕奇:

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>标签链接到您的网页,所以我不会说这是一个非常好的...

于 2012-11-11T02:37:54.203 回答
1

这似乎是valid_referersnginx 指令用途的教科书案例。

将类似以下内容添加到location脚本的 -block 中:

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

于 2012-11-11T08:41:52.243 回答
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>
于 2012-11-11T02:35:54.097 回答
0

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

  location /myscript {
    deny all;
  }
于 2012-11-11T02:36:42.897 回答