【问题标题】:How to avoid the user pass a localhost or 127.0.0.1 or self ip to loadHTML?如何避免用户通过 localhost 或 127.0.0.1 或自 ip 来加载 HTML?
【发布时间】:2011-10-25 19:41:53
【问题描述】:

我有一个检查网站标题的简单功能:

$doc = new DOMDocument();
@$doc->loadHTMLFile($aUrl);
$xpath = new DOMXPath($doc);     

if(!isset($xpath->query('//title')->item(0)->nodeValue)) 
{             
     return FALSE;
}                              

return $xpath->query('//title')->item(0)->nodeValue;  

但是如果用户通过localhost或127.0.0.1,他们可以得到我的主机数据,我可以做一个简单的引导让用户输入这些值,但有时,我不能保证内部ip,比如192.168。 11.2、我怎样才能保护网站不回查询我的主机?谢谢你。

【问题讨论】:

  • 您允许用户为$aUrl 提供任何 URL 值吗?太危险了
  • @Michael 一点也不。这就是代理一直在做的事情。
  • @phihag 代理通常有一个可接受的代理域白名单
  • 为什么这么危险?任何结果?而且,如何避免它们......此外,我能做些什么来增强我的功能的安全性?谢谢。

标签: php security


【解决方案1】:

将此行添加到开头

if( preg_match( "/^(http:\/\/)(localhost|127.0.0.1|{$_SERVER["SERVER_ADDR"]}|{$_SERVER["HTTP_HOST"]}|www.yourhost.net)/i", $aUrl )) die( 'error' );

可能有帮助

【讨论】:

  • 但他们仍然可以通过 192.168.11.2 访问我 :(
  • $_SERVER["SERVER_ADDR"] 包含 192.168.11.2 (或您的实际服务器地址),请参阅php.net/manual/en/reserved.variables.server.php
  • 我得到的结果是 127.0.0.1 而不是 192.168.11.2。但我可以从 192.168.11.2 访问 :(
  • 查看此以获得正确的 IP - stackoverflow.com/questions/3202872/… 但我认为,正确的 apache 设置将解决它 - 这取决于您在绑定地址中拥有的内容
【解决方案2】:

外部用户的 127.0.0.1 或 localhost 将是他们自己的计算机/主机 设置一个条件,检查主机名不是 $_SERVER['SERVER_ADDR'] 或 $_SERVER['SERVER_NAME']

【讨论】:

  • 不,他正在使用 curl 从服务器发送请求。
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2017-06-21
  • 2020-05-29
  • 1970-01-01
相关资源
最近更新 更多