我想禁止访问服务器上受保护目录中所有文件和文件夹。
我已经在该目录下的.htaccess
文件中使用了此命令:
Deny from all
但问题是我还想使用另一个网站的curl来查询这个目录中的一个文件:
$curl = curl_init();
$post_data = array();
$post_data['token'] = $token;
curl_setopt($curl, CURLOPT_POST, true);
$url = 'https://my-website.com/protected-dir/file.php';
curl_setopt($curl, CURLOPT_URL, $url );
$response = curl_exec($curl);
if (curl_errno($curl)) {
return(curl_errno($curl));
} else{
return $response;
}
curl_close($curl);
现在我从CURL得到了错误22。我想保护对该目录下所有文件和文件夹的直接访问。我有什么选择?
1.我可以把这个目录放在Web根目录之外,但是我该如何使用CURL呢?(该文件的URL是什么?)
1.其他解决方案?
2条答案
按热度按时间5jdjgkvh1#
简单的答案是将文件保留在文档根目录中,然后只需向
.htaccess
文件添加一个allow
异常,该异常列出了您希望允许其命中的远程服务器的IP地址:但要注意的是,这将允许该机器上的任何用户获取文件。安全的答案是始终将敏感内容放在文档根目录之外,永远不要依赖.htaccess来保护你。然后创建一个经过验证的代理页面来处理任何例外情况。
其中
public
是文档根,index.php
是常规站点,secret.php
类似于:uidvcgyl2#
看起来(从评论中)这段代码是WordPress插件的一部分,可以潜在地安装在任何网站上。在这种情况下,这个文件需要是"公共"的。
该文件本来就不应该在protected目录中,但是,你可以使用
<FilesMatch>
容器和regex/negative lookahead来阻止除该文件之外的所有文件。例如:
除了对
file.php
的请求之外,所有的请求都被阻止。注意,Deny
指令以前已被弃用,您应该在Apache 2.4+上使用相应的Require
指令。(但请注意,您不应该混用新旧验证指令。我假设您的脚本包含通常的验证,例如:
token
参数的POST请求上失败。您还可以将自定义User-Agent字符串设置为CURL(POST)请求的一部分,并在脚本中或
.htaccess
的早期版本中检查这一点-但这只是烟雾和镜子,并没有真正提供任何额外的"保护"。