2

我在“域 1”上有一个脚本,它在“域 2”上的 XML 文件上执行 simplexml_load_file,如下所示:

$url = 'domain2.com/file.xml';
$xml  = simplexml_load_file($url);

$xmlEmail = $xml->xpath("//users/user/email");
$userEmail = implode(", ", (array) $xmlEmail);

但是,此 XML 文件包含有关用户的私人信息。我不希望它可以直接访问。域 2 也会因用户而异,所以恐怕我无法按实际域或 IP 进行过滤。

是否可以设置权限以使其无法被公众访问,但仍然可以通过 simplexml 调用以某种方式读取?也许有任何替代方法?

4

2 回答 2

1

将以下内容添加到您的.htaccess文件中,该文件与以下文件位于同一文件夹中file.xml

<Files file.xml>
    Order Deny,Allow
    Deny from all
    Allow from domain2.com
</Files>

这将告诉您的 Web 服务器禁用对该文件的访问,除非请求来自domain2.com.

更新:

根据楼主所说的问题,这个xml文件会被不同的域访问。在这种情况下,我可能想到的唯一合理的选择是密码。galymzhan已经提供了答案,但我会尝试扩展他的答案并提供一个可行的解决方案。

将以下内容添加到您的.htaccess文件中,该文件与以下文件位于同一文件夹中file.xml

.htaccess

<Files file.xml>
    AuthType Basic
    AuthName "Protected Access"
    AuthUserFile /full/path/to/.htpasswd
    Require valid-user
</Files>

请注意,不需要对服务器进行 shell 访问。您可以通过 ftp 上传.htpasswd文件,并更改其权限,使其不会被 Web 服务器组读取/写入。

有关密码保护的更多信息以及一些示例,请参见此处

于 2012-04-06T18:16:20.347 回答
1

在“域 2”上为您的 Web 服务器设置 HTTP 基本身份验证。像这样更改 XML 文件的 url:

$url = 'http://my_username:my_password@domain2.com/file.xml';
$xml  = simplexml_load_file($url);

Apache 的 mod_auth_basic

于 2012-04-06T18:25:05.853 回答