阻止从其他主机执行PHP
脚本的最佳方法是什么?基本上,我只希望我的服务器web1.mydomain.com
执行PHP脚本。现在,如果我创建一个html文件,其iframe
或img tag
指向我在另一个域上的脚本并调用它,它就会工作并执行。我想阻止这一点。
是否可以在Web服务器级别而不是PHP应用程序代码中执行此操作?我正在使用nginx
。那将是最好的解决方案。
答案 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;
}