1. ⚠️ Grosse PROMO en cours sur ma plateforme SEO My Ranking Metrics
    Rejeter la notice

Yet another ip remote address function

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par ortolojf, 8 Novembre 2018.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 697
    J'aime reçus:
    6
    Bonjour

    J'ai réparé l'anti-navigateur de mon site.

    Voici la fonction fXFgjy7eUzQVMSMtV_address() chargée de calculer l'ip remote brute.

    is_reelle_ip($ip) ( ipv4 ou ipv6 ) rend true si $ip n'est ni privée ni réservée ni locale ( celle de mon serveur ), false sinon.

    Pourriez-vous me donner des conseils pour l'implémentation de la fonction ci-dessous ?

    Par exemple : Quelles sont les variables serveur forgeables à éviter ?

    Merci beaucoup de votre side.

    Respectueusement.


    PHP:

    /**
     * Retrieves the best guess of the client's actual IP address.
     * Takes into account numerous HTTP proxy headers due to variations
     * in how different ISPs handle IP addresses in headers between hops.
     */
    function fXFgjy7eUzQVMSMtV_address()
    {
        
    // check for shared internet/ISP IP
        
    if(!empty($_SERVER['HTTP_CLIENT_IP']))
        {
            if(
    is_reelle_ip($_SERVER['HTTP_CLIENT_IP']))
            {
                return 
    $_SERVER['HTTP_CLIENT_IP'];
            }
        }
        if (!empty(
    $_SERVER['HTTP_FORWARDED']))
        {
            if(
    strpos($_SERVER['HTTP_FORWARDED'], "," ) !== false)
            {
                
    $array_ip explode(","$_SERVER['HTTP_FORWARDED']);
            }
            else
            {
                
    $array_ip[0] = $_SERVER['HTTP_FORWARDED'];
            }
            foreach(
    $array_ip as $tmp_ip)
            {
                
    $tmp_ip preg_replace("{[\"' \t]+}"""$tmp_ip);
                if(
    preg_match("{^for=}i"$tmp_ip))
                {
                    
    $ip preg_replace("{^for=}i"""$tmp_ip);
                    
    $ip preg_replace("{[\"' \t]+}"""$ip);
                    if(
    filter_var($ipFILTER_VALIDATE_IPFILTER_FLAG_IPV6) !== false)
                    {
                        
    $ipv6 correct_ip6(strtolower($ip));
                    }
                    elseif(
    filter_var($ipFILTER_VALIDATE_IPFILTER_FLAG_IPV4) !== false)
                    {
                        
    $ipv4 $ip;
                    }
                    if((isset(
    $ipv4))&&(is_reelle_ip($ipv4)))
                    {
                        return(
    $ipv4);
                    }
                    elseif((isset(
    $ipv6))&&(is_reelle_ip($ipv6)))
                    {
                        return(
    $ipv6);
                    }
                }
            }
        }
        if (!empty(
    $_SERVER['HTTP_X_FORWARDED']))
        {
            if(
    is_reelle_ip($_SERVER['HTTP_X_FORWARDED']))
            {
                return 
    $_SERVER['HTTP_X_FORWARDED'];
            }
        }
        
    // check for IPs passing through proxies
        
    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            
    // check if multiple ips exist in var
            
    if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], "," ) !== false)
            {
                
    $iplist explode(","$_SERVER['HTTP_X_FORWARDED_FOR']);
            }
            else
            {
                
    $iplist[0] = $_SERVER['HTTP_X_FORWARDED_FOR'];
            }
            foreach (
    $iplist as $ip)
            {
                if (
    is_reelle_ip($ip))
                {
                    return 
    $ip;
                }
            }
        }
        if(!empty(
    $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        {
            if(
    is_reelle_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
            {
                return 
    $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
            }
        }
        if (!empty(
    $_SERVER['HTTP_FORWARDED_FOR']))
        {
            if(
    is_reelle_ip($_SERVER['HTTP_FORWARDED_FOR']))
            {
                return 
    $_SERVER['HTTP_FORWARDED_FOR'];
            }
        }
        if (!empty(
    $_SERVER['REMOTE_ADDR']))
        {
            if(
    is_reelle_ip($_SERVER['REMOTE_ADDR']))
            {
                return 
    $_SERVER['REMOTE_ADDR'];
            }
        }
        return(
    false);
    }

     
  2. rick38
    rick38 WRInaute impliqué
    Inscrit:
    23 Février 2013
    Messages:
    756
    J'aime reçus:
    45
    Ca sert à quoi ?
     
    UsagiYojimbo apprécie ceci.
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 697
    J'aime reçus:
    6
    Bonjour rick38

    C'est la bonne question. ;)

    Je n'utiilise pour l'adresse ip remote, qu'un hash code à sens unique.

    Je n'utilise jamais pour mon site l'ip remote directement.

    Pour mon anti-navigateur, j'utilise conjointement ce hash code et un identifiant de session.

    Mon problème, est d'avoir un hash code fiable, pour reconnaître les visiteurs bloqués.

    Mais, je n'ai aucun moyen de savoir qui est le visiteur, puisque mon hashcode est unidirectionnel.

    Respectueusement.


    Code:
    
    /*
     * Cette fonction
     * rend le hash code
     * d'algorithme
     * sha256,
     * de l'adresse paramètre.
     */
    function hash_ip($ip)
    {
            return(hash('sha256', (string)$ip));
    }
    function get_formatted_ip_address()
    {
        $ip = fXFgjy7eUzQVMSMtV_address();
        /*
        * Adresse ipv6,
        * On convertit
        * à la valeur
        * normalisée.
        */
        if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false)
        {
            $ip = correct_ip6($ip);
        }
        if(!validate_ip($ip))
        {
            return(false);
        }
        return $ip;
    }
    function get_hashed_ip_address()
    {
        $ip = get_formatted_ip_address();
        if($ip === false)
        {
            return false;
        }
        return(hash_ip($ip));
    }
    
    
     
  4. cthierry
    cthierry WRInaute accro
    Inscrit:
    15 Janvier 2005
    Messages:
    2 578
    J'aime reçus:
    37
  5. rick38
    rick38 WRInaute impliqué
    Inscrit:
    23 Février 2013
    Messages:
    756
    J'aime reçus:
    45
    Heu... pourquoi ?
     
  6. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 697
    J'aime reçus:
    6
    Excusez-moi

    La CNIL.. n'aime pas celà.

    Je ne mémorise pas les ip réelles, seulement les hashcodes unidirectionnels.

    Problème simple :

    Les en-têtes http qu'utilise la fonction
    fXFgjy7eUzQVMSMtV_address() sont parfois modifiables par le visiteur, parfois non.

    Je ne sais pas lesquels.

    Comment modifier cette fonction, pour la rendre fiable?

    Par ailleurs, les autres fonctions sont de mon cru, je peux les fournir.

    La fonction is_reelle_ip ( 4 ou 6 ) est correcte, elle rend true si l'ip n'est ni privée ni réservée, ni celle du serveur.

    Simple non ?

    Respectueusement.
     
  7. rick38
    rick38 WRInaute impliqué
    Inscrit:
    23 Février 2013
    Messages:
    756
    J'aime reçus:
    45
    Seul $_SERVER['REMOTE_ADDR'] est fiable, tout le reste est bullshit, et tout ce code ne sert strictement à rien.
     
    UsagiYojimbo apprécie ceci.
  8. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 697
    J'aime reçus:
    6
    Bonjour rick38

    Merci beaucoup.

    Je vais simplifier ces fonctions drastiquement.

    Amicalement.
     
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 735
    J'aime reçus:
    141
    Yet another bullshit code from ortolojf
     
    cthierry apprécie ceci.
  10. rollback
    rollback Nouveau WRInaute
    Inscrit:
    5 Novembre 2018
    Messages:
    47
    J'aime reçus:
    4
    j'ai essayé de comprendre le code par habitude
    Je reconnais que même des étudiants en art plastique qui écriraient le premier programme n'arriveraient pas à rendre une tel source.
    Je reconnais que je ne fais pas de PHP sauf si on me force
    Mais à vue d'oeil : si ta fonction dite "hash" est "unidirectionnelle" mais ta clef qui a généré tes valeurs dites "hash" est bien fixe :
    pour savoir si ton ip est "black listée", tu refais un hash de l'ip visiteur et tu la compare a ta table de hash

    Et la cnil est contente, parce que même toi tu n'a pas les adresses ip sauvegardées

    Méfie toi de ton réseau interne, une adresse privée ca se forge comme n'importe quelle adresse
     
    spout apprécie ceci.
  11. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    2 697
    J'aime reçus:
    6
    Bonjour rollback

    Tout est ok.

    J'utilise effectivement le hash code des ips ( ip6 normalisées et ip4 ), jamais les ips.

    Je suis en train de terminer la mise au point de mon bandeau de cookies.

    C'est une version tirée du site : https://blog.eleven-labs.com/fr/google-analytics-et-le-bandeau-cookie-cnil/

    et adaptée pour que l'expires du cookie de gestion soit constant malgré ses modifications.

    Merci beaucoup de ton aide.

    Amicalement.
     
Chargement...
Similar Threads - Yet another remote Forum Date
Lancement d'un nouveau site d'annonces gratuites : affariyet.net Demandes d'avis et de conseils sur vos sites 5 Août 2010
Avis site de musique http://www.nextegenmusic.megabyet.net/ Demandes d'avis et de conseils sur vos sites 4 Mars 2010
Let's go : http://www.anotherstory.fr Demandes d'avis et de conseils sur vos sites 28 Avril 2010
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice