Php 如何避免用户将localhost或127.0.0.1或self-ip传递给loadHTML?

Php 如何避免用户将localhost或127.0.0.1或self-ip传递给loadHTML?,php,security,Php,Security,我有一个检查网站标题的简单功能: $doc = new DOMDocument(); @$doc->loadHTMLFile($aUrl); $xpath = new DOMXPath($doc); if(!isset($xpath->query('//title')->item(0)->nodeValue)) { return FALSE; } return

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

$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,我如何保护站点不会查询回我的主机?多谢各位

127.0.0.1或外部用户的本地主机将是他们自己的计算机/主机
设置一个条件,检查主机名不是$\u SERVER['SERVER\u ADDR']或$\u SERVER['SERVER\u NAME']

将这一行添加到开头

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

这可能会有所帮助

您是否允许用户为$aUrl提供任何URL值?那太过分了dangerous@Michael一点也不。代理总是这么做的。@phihag代理通常有一个可接受域的白名单来代理为什么这么危险?有结果吗?还有,如何避免它们。。。此外,我可以做些什么来增强我的职能的安全性?谢谢。不,他正在用curl从服务器发送请求。但是他们仍然可以通过192.168.11.2访问我:$\u服务器[server\u ADDR]包含192.168.11.2或您的实际服务器地址,请看,我得到的结果是127.0.0.1,而不是192.168.11.2。但我可以从192.168.11.2获得访问权限:查看此以获得正确的IP-但我认为,正确的apache设置将修复它-这取决于绑定地址中的内容