Make validate_url more intuitive

- Remove the parameter passed by reference
- Add modified url in return value
This commit is contained in:
Hypolite Petovan 2017-12-16 19:23:22 -05:00
parent e16852c2f5
commit 1724dd3841
5 changed files with 21 additions and 20 deletions

View file

@ -932,11 +932,12 @@ function get_my_url()
function zrl_init(App $a)
{
$tmp_str = get_my_url();
if (validate_url($tmp_str)) {
$my_url = get_my_url();
$my_url = validate_url($my_url);
if ($my_url) {
// Is it a DDoS attempt?
// The check fetches the cached value from gprobe to reduce the load for this system
$urlparts = parse_url($tmp_str);
$urlparts = parse_url($my_url);
$result = Cache::get("gprobe:" . $urlparts["host"]);
if ((!is_null($result)) && (in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM)))) {
@ -944,8 +945,8 @@ function zrl_init(App $a)
return;
}
Worker::add(PRIORITY_LOW, 'GProbe', $tmp_str);
$arr = array('zrl' => $tmp_str, 'url' => $a->cmd);
Worker::add(PRIORITY_LOW, 'GProbe', $my_url);
$arr = array('zrl' => $my_url, 'url' => $a->cmd);
call_hooks('zrl_init', $arr);
}
}

View file

@ -470,26 +470,28 @@ function http_status_exit($val, $description = array())
* and check DNS to see if it's real (or check if is a valid IP address)
*
* @param string $url The URL to be validated
* @return boolean True if it's a valid URL, fals if something wrong with it
* @return string|boolean The actual working URL, false else
*/
function validate_url(&$url)
function validate_url($url)
{
if (Config::get('system', 'disable_url_validation')) {
return true;
return $url;
}
// no naked subdomains (allow localhost for tests)
if (strpos($url, '.') === false && strpos($url, '/localhost/') === false)
if (strpos($url, '.') === false && strpos($url, '/localhost/') === false) {
return false;
}
if (substr($url, 0, 4) != 'http')
if (substr($url, 0, 4) != 'http') {
$url = 'http://' . $url;
}
/// @TODO Really supress function outcomes? Why not find them + debug them?
/// @TODO Really suppress function outcomes? Why not find them + debug them?
$h = @parse_url($url);
if ((is_array($h)) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) {
return true;
return $url;
}
return false;