IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier le serveur demandeur


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut Vérifier le serveur demandeur
    Bonjour,
    Je voudrais mettre en place un service de compteur.

    Mais je souhaiterais que seul le site inscrit puisse afficher le compteur et non n'importe quel autre site qui copierait le code (pour éviter la triche).
    Je pense utiliser un code dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script language="JavaScript" src="compteur-0dsf0dgsaF.js"></script>
    Comment faire ?? En php ?

    Merci d'avance


    EDIT : Je crois avoir trouvé une idée en passant par un fichier php grâce à l'url_rewriting et en testant $_SERVER["HTTP_REFERER"] puis en redirigeant adéquatement.
    C'est fonctionnel et sécurisé ?

  2. #2
    Membre habitué Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    Fonctionnel? probablement, sécurisé? ça dépend. En effet, il est tout à fait possible de manipuler les requêtes HTTP (protocole HTTP) et de spécifier l'URL du lien à partir duquel la requête a été effectuée grâce au Referer.

    Histoire de perdre un peu de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    // DEUX URL POSSIBLE
    $url_type1 = "http://www.tonsite.truc";
    $url_type2 = "http://tonsite.truc";
     
    // ON FORMAT LE REFERER HISTOIRE D'ELIMINER CE QUI N'EST PAS UTILE
    $referer = substr($_SERVER["HTTP_REFERER"],0,strlen($url_type1));
     
    // preg_match: REGEX: SI LE PARAMETRE A ET CONTENU DANS LE PARAMETRE B, ALORS LE REFERER EST LE BON
    if(preg_match("#$url_type1#", $referer) || preg_match("#$url_type2#", $referer))
    {
        echo 'OK!';
    } else {
        echo 'NOK!';
    }
    ?>
    Comme je te l'ai dit, c'est pas idéal, mais ça en découragera surement beaucoup! Il y a surement mieux, a voir, j'ai pondu ça à l'instant!

    Je pense à un truc! En complément de la vérification du referer, tu peux aussi le faire en fonction de l'adresse IP et interdire un vote si L'ip à déjà servis dans les 24 heures.

    Je viens de coder ça, j'ai pas testé, mais je ne vois pas pourquoi ca ne fonctionnerai pas! Il te faut par contre une BDD pour stocker les IP!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php
    	// DEUX URL POSSIBLE
    	$url_type1 = "http://www.tonsite.truc";
    	$url_type2 = "http://tonsite.truc";
     
    	// ON FORMAT LE REFERER HISTOIRE D'ELIMINER CE QUI N'EST PAS UTILE
    	$referer = substr($_SERVER["HTTP_REFERER"],0,strlen($url_type1));
     
    	// preg_match: REGEX: SI LE PARAMETRE A ET CONTENU DANS LE PARAMETRE B, ALORS LE REFERER EST LE BON
    	if(preg_match("#$url_type1#", $referer) || preg_match("#$url_type2#", $referer))
    	{
    		$current_date = time();
    		$vote = false;
    		// On récupere l'adresse ip du client
    		$ip = $_SERVER["REMOTE_ADDR"]; 
     
    		// CONNEXION A LA BASE DE DONNEES
    		$host = "host" ;
    		$user = "user";
    		$password = "password" ;
    		$bdd = "bdd" ;
    		$table = "table";
     
    		$connexion = mysql_connect($host, $user, $password);
    		if (!mysql_query($bdd, $connexion))die("Cette base de donnée n’existe pas. \n");
     
    		// ON RECUPERE LA DATE DU DERNIER VOTE EN FONCTION DE L'IP
    		$request = mysql_query("SELECT IP, DATE FROM " . $table . " WHERE IP=" . $ip);
     
    		// COMPTE LE NOMBRE DE REPONSE RENVOYE PAR LA REQUETE PRECEDENTE
    		$exist = mysql_num_rows($request);
     
    		// SI L'IP N'EST PAS DANS LA BASE DE DONNEE
    		if($exist == 0)
        	{
         	  	// AJOUT DE L'IP DANS LA BASE DE DONNEE
    			mysql_query("INSERT INTO ". $table . " VALUES('', '". $ip ."', '" . $current_date . "')");
    			$vote = true;		
        	} else {
    			$data = mysql_fetch_array($request);
    			$dernierVote = $data[DATE];
     
    			// Si le dernier vote date de 24 heures alors on autorise le client à voté
    			if(($current_date - $dernierVote) > (24 * 3600))
    			{
    				$vote = true;
    				// Mise à jour des données dans la BDD
    				mysql_query("UPDATE " . $table . " SET DATE='" . $current_date . "' WHERE IP='" . $ip ."'");
    			} else {
    				$vote = false;
    			}
    		}
     
    		if($vote)
    		{
    			// On ajoute un vote	
    		}
            mysql_close();
    	}
    ?>

  3. #3
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Pas sur de bien comprendre. En tout cas, le Referer peut être manipulé par le client et donc tromper le server sans difficulté.

    Si compteur-0dsf0dgsaF.js est généré dynamiquement, alors le code javascript pourrait inclure une vérif que window.location correspond bien au site attendu quand on accède à "compteur-0dsf0dgsaF.js".

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Merci à vous deux.
    Mais donc il n'y a pas de solution complètement sures ?

    Merci d'avance

  5. #5
    Membre habitué Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Points : 172
    Points
    172
    Par défaut
    Bé si j'y réfléchis sérieusement... Il n'y a pas d'unique solution qui à elle seule empêchera le détournement de ton application. Que faire alors? Alors soit tu abandonnes, soit tu fais en sorte de combiner intelligemment plusieurs solutions.

    Exemple de solutions:
    -Vérification de l'adresse ip (nécessite une base de données ou autre moyen de stockage!): Si le client à voté dans les 24 heures, on l'empêche de voter de nouveau.
    -Utilisation d'un cookies et sessions: Pour la même raison que la première solution!
    -Vérification du referer
    -Antibot: Génération d'une image. Tu demandes à ton client de recopier les caractères. Un peu chiant mais efficace!
    -[........................... ET IL Y EN A PLEIN D'AUTRE ...........................]

    Et il y en a plein d'autres! J'ai pas chercher mais si tu veux sécuriser ton script, tu peux mais fait attention à ne pas le rendre trop "lourd". Il faut savoir combiner accessibilité et sécurité!

    Bon courage

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,
    Tu pourrais peut-être te baser sur le nom de domaine du site qui affiche ton script JavaScript. Ce script JavaScript pourrrais-être un fichier PHP chargé de vérifier le nom de domaine passé en paramètre.

    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script type="text/javascript" src="compteur-0dsf0dgsaF.js.php?site=<?php echo $_SERVER['HTTP_HOST']; ?>"></script>
    Le fichier compteur-0dsf0dgsaF.php.js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php 
    header('Content-Type: text/javascript');
    require_once('requests.inc.php'); // contient le fonction is_inscrit(string siteName) : boolean
    if(!isset($_GET['site'] || !is_inscrit($_GET['site'])){
        die('Vous n\'êtes pas inscrits');
    }
    ?>
    document.write('COMPTEUR');
    Le problème c'est que ca n'empêcherait pas d'autes sites d'écrire l'url d'un site différent du leur dans le balise src.

  7. #7
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Je n'ai pas l'impression qu'il s'agisse de VOTE, comme semble l'indiquer J_Lennon, mais plutôt de COMPTEUR.

    Google Analytics par exemple qui génère des stats des visiteurs sur les sites qui sont inscrits au service, utilise un fichier javascript. Le webmaster indique son code perso en javascript dans ses pages et le script de google gère le reste en fonction de cet identifiant perso.

    Là dans le problème de Amybond, si le fichier javascript est généré dynamiquement coté server en fonction du nom du fichier demandé (compteur-0dsf0dgsaF.js), alors le code javascript résultant peut inclure une vérification du window.location chez le client. Si le client n'est pas en train de visiter le site attendu par le javascript, alors on peut abandonner l'affichage du compteur par exemple (si j'ai bien compris).

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Points : 132
    Points
    132
    Par défaut
    Merci pour toutes vos réponses.
    Oui effectivement ce n'est pas un système de sondage que je souhaite mettre en place, mais c'est n'est pas non plus un compteur, par cette exemple concret je voulais situer le module que je souhaite créer (Un système affichant quelque chose dynamiquement sur un site client).

    Donc je vais essayer de "mixer" les solutions

    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier une connexion réseau à un serveur SQL
    Par manudja dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/08/2020, 21h09
  2. Réponses: 4
    Dernier message: 14/01/2015, 08h34
  3. Vérifier si le serveur a un accès SSH
    Par diamonds dans le forum Réseau
    Réponses: 7
    Dernier message: 06/03/2007, 12h44
  4. Réponses: 1
    Dernier message: 18/02/2007, 20h30
  5. Réponses: 3
    Dernier message: 19/07/2006, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo