添加http或https以进行用户输入验证

时间:2015-01-02 01:31:47

标签: php

$xml = $_GET['url']

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

..
..

如果用户没有使用http或https我的脚本会被破坏,在这种情况下串联是一种很好的验证方法吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是检查字符串开头是否存在http://https://

if (preg_match('/^http(s)?:\/\//', $xml, $matches) === 1) {
    if ($matches[1] === 's') {
        // it's https
    } else {
        // it's http
    }
} else {
    // there is neither http nor https at the beginning
}

答案 1 :(得分:-1)

您正在使用get方法。或者这是由AJAX完成的,或者用户在querystring中附加了一个网址?您没有发布表单?

当网址出错时,连接不会削减它。你需要检查一下。

您可以在页面上添加带占位符的输入,以强制"强制"用户使用http://。这应该是HTML5的方法。

 <input type="text" pattern="^(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$" placeholder="http://" title="URLs need to be proceeded by http:// or https://" >

这应该检查并原谅一些错误。如果网址不符合规范,则会返回错误。用户应该修改他的网址。

$xml = $_GET['url']

$xmlDoc = new DOMDocument();
if (!preg_match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/, $xml ) )
{
    echo 'This url is not valid.';
    exit;
}
else if (!preg_match(/^http(s)?:\/\/, $xml))
{
    //no http present
    $orgUrl = $xml;
    $xml = "http://".$orgUrl; 
    //extended to cope with https://
    $loaded = loadXML();
    if (substr($loaded, 0, 5) == "false")
    {
        //this attempt failed.
        $xml = "https://".$orgUrl;
        $loaded = loadXML();
        if (substr($loaded, 0, 5) == "false")
        {
             echo substr($loaded, 6);
             exit;
        }

    }
}
else
{  
    $loaded = loadXML();
}

function loadXML()
{
  try {
     return $xmlDoc->load($xml);
  }
  catch($Ex)
  {
     return echo 'false Your url could\'t be retrieved. Are you sure you\'ve entered it correctly?';
  }
}

您还可以在加载xml:

之前使用curl检查网址
$ch = curl_init($xml);

// Send request
curl_exec($ch);

// Check for errors and display the error message
if($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "$error_message :: while loading url";
}

// Close the handle
curl_close($ch);

重要的注意事项:使用此方法检查网址是否可用并采取相应的操作可能需要很长时间,因为服务器响应可能需要一段时间才能返回。 / p>