Valider 19c3592b rédigé par cerdic's avatar cerdic Validation de marcimat
Parcourir les fichiers

Ameliorer valider_url_distante() : on utilise filter_var plutot que des regexp...

Ameliorer valider_url_distante() : on utilise filter_var plutot que des regexp et on ajoute un controle sur le TTL du domaine pour que ce que l'on valide soit la meme chose vue dans la suite du hit

(cherry picked from commit a4a09d10)
parent 685a2c0b
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+15 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -193,21 +193,28 @@ function valider_url_distante($url, $known_hosts = array()) {

	if (!$is_known_host) {
		$host = trim($parsed_url['host'], '.');
		if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host)) {
			$ip = $host;
		} else {
		if (! $ip = filter_var($host, FILTER_VALIDATE_IP)) {
			$ip = gethostbyname($host);
			if ($ip === $host) {
				// Error condition for gethostbyname()
				$ip = false;
			}
			if ($records = dns_get_record($host)) {
				foreach ($records as $record) {
					// il faut que le TTL soit suffisant afin d'etre certain que le copie_locale eventuel qui suit
					// se fasse sur la meme IP
					if ($record['ttl']<10) {
						$ip = false;
						break;
					}
				}
			}
			else {
				$ip = false;
			}
		}
		if ($ip) {
			$parts = array_map('intval', explode( '.', $ip ));
			if (127 === $parts[0] or 10 === $parts[0] or 0 === $parts[0]
			  or ( 172 === $parts[0] and 16 <= $parts[1] and 31 >= $parts[1] )
			  or ( 192 === $parts[0] && 168 === $parts[1] )
			) {
			if (! filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
				return false;
			}
		}