Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅允许我的服务器在PHP中执行脚本_Php_Security_Nginx_Xss_Csrf - Fatal编程技术网

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

仅允许我的服务器在PHP中执行脚本,php,security,nginx,xss,csrf,Php,Security,Nginx,Xss,Csrf,防止从其他主机执行PHP脚本的最佳方法是什么?基本上,我只希望我的服务器web1.mydomain.com执行PHP脚本。现在,如果我用iframe或img标记创建一个html文件,该标记指向另一个域上的脚本并调用它,它就会工作并执行。我想阻止这一切 是否可以在web服务器级别而不是PHP应用程序代码上执行此操作?我正在使用nginx。这将是最好的解决方案。如果您有权访问apache配置文件,您可以执行以下操作: Order Deny,Allow Deny from all Allow from

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


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

如果您有权访问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>

命令允许,拒绝
通融

如果您有权访问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>

命令允许,拒绝
通融

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

  location /myscript {
    deny all;
  }

您可以使用nginx主机配置来实现这一点。将以下代码放入所有主机
server
块中,但要允许执行的主机除外

  location /myscript {
    deny all;
  }

要防止页面嵌入域外的框架,可以设置
X-frame-Options
响应标题,以防止来自其他域的页面嵌入iframe(只要浏览器遵守)

在nginx中,您可以将以下内容添加到配置中:

add_header X-Frame-Options SAMEORIGIN;
对于Apache:

Header always append X-Frame-Options SAMEORIGIN


对于
标记,您可以检查
$\u服务器['HTTP\u REFERER']

if(isset($_SERVER['HTTP_REFERER'])){
    if(preg_match("@^http://web1.mydomain.com($|/.*)@", $_SERVER['HTTP_REFERER']) != 1){
        die;
    }
}
此方法依赖于用户代理设置的
HTTP\u REFERER
。我认为这在大多数情况下都应该有效。不幸的是,我没有办法测试

我认为这也会阻碍AJAX


实际上,它还阻止用户使用
标记链接到您的网页,因此我不会说这是一个非常好的标记…

为了防止页面嵌入到域外的框架中,您可以设置
X-frame-Options
响应头以防止来自其他域的页面嵌入到iframe中(只要浏览器遵守)

在nginx中,您可以将以下内容添加到配置中:

add_header X-Frame-Options SAMEORIGIN;
对于Apache:

Header always append X-Frame-Options SAMEORIGIN


对于
标记,您可以检查
$\u服务器['HTTP\u REFERER']

if(isset($_SERVER['HTTP_REFERER'])){
    if(preg_match("@^http://web1.mydomain.com($|/.*)@", $_SERVER['HTTP_REFERER']) != 1){
        die;
    }
}
此方法依赖于用户代理设置的
HTTP\u REFERER
。我认为这在大多数情况下都应该有效。不幸的是,我没有办法进行测试

我认为这也会阻碍AJAX


实际上,它还阻止用户使用
标记链接到您的网页,因此我不会说这是一个非常好的标记…

这似乎是
有效的\u referers
nginx指令的教科书案例

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

valid_referers web1.mydomain.com;
或者,如果您希望对剥离/模糊的引用程序更严格、更宽容:

valid_referers none blocked web1.mydomain.com;

有关更多信息,请参见

这似乎是
valid\u referers
nginx指令的教科书案例

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

valid_referers web1.mydomain.com;
或者,如果您希望对剥离/模糊的引用程序更严格、更宽容:

valid_referers none blocked web1.mydomain.com;

请参阅以获取更多信息。这不会阻止任何人执行脚本。这不是我想要的,我想阻止从与
web1.mydomain.com
不同的主机运行脚本。不。这会阻止除127.0.0.1(您的服务器)之外的任何人无法执行该文件。使用
deny all;allow 127.0.0.1;
不起作用。它会阻止用户的所有请求。这不会阻止任何人执行脚本。这不是我想要的,我想阻止从与
web1.mydomain.com
不同的主机运行脚本。不。这会阻止除127.0.0.1之外的任何人(您的服务器)从执行文件开始。使用
deny all;allow 127.0.0.1;
不起作用。它会阻止用户的所有请求。如果这起作用,假设它不会给页面请求增加额外的负载,那么这可能是最好的方法。很好,
add\u header
nginx指令像champ一样工作。但这不会防止
img
ajax请求会吗?我可以使用
$\u服务器['HTTP\u主机]
吗?还是总是说
web1.mydomain.com
,即使请求可能来自
img
或来自不同主机的AJAX请求?@Justin
$\u服务器['HTTP\u主机]
总是
web1.mydomain.com
(除非另一个域指向您的IP并被使用)。如果这样做有效,这可能是最好的方法,前提是它不会给您的页面请求增加额外的负载。很好,
add\u header
nginx指令像champ一样工作。但是这不能防止
img
ajax
请求。我可以使用
$\u服务器吗['HTTP\u HOST']
或者总是说
web1.mydomain.com
,即使请求可能来自
img
或来自不同主机的AJAX请求?@Justin
$\u服务器['HTTP\u HOST']
始终是
web1.mydomain.com
(除非另一个域指向您的IP并被使用).Awesome,
valid\u referers
效果很好。下面是代码:valid\u referers server\u names*.my-domain.io;if($invalid\u referer){return 403;}Awesome,
valid\u referers
效果很好。下面是代码:valid\u referers server\u names*.my-domain.io;if($invalid\u referer){return 403;}