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 :

[Sécu] Fonction de cache à distance


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Par défaut [Sécu] Fonction de cache à distance
    Après ces deux topics : http://www.developpez.net/forums/sho....php?p=3452530 et http://www.developpez.net/forums/sho...d.php?t=587186. J'ai enfin réussi à faire ce que je voulais...

    Donc petit résumé :
    J'ai un serveur "www." en https avec bande passante limité. un serveur "images." en https lui aussi avec bande passante illimité. Les membres peuvent poster sur le www (commentaires) et laisser une signature qui peut donc être en image. (On appellera mon domaine meskalyn.net pour les exemples).

    Si une image n'est pas hébergée sur du https, cela "casse" l'encryption et mets une jolie alerte sur Internet Explorer...

    J'ai donc plus ou moins réussi à faire ce que je voulais, c'est à dire que lors d'une image en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [img]http://test.net/image.jpg[/img]
    Mon parser BBCode va remplacer ça par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src=\"".image_cache("http://test.net/image.jpg")."\" />
    Où la fonction "image_cache" est la suivante (disposée sur le www)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function image_cache($url) {
    function valid_name($chainenonvalide)
    {
      $chainenonvalide = preg_replace('`\s+`', '_', trim($chainenonvalide));
      $chainenonvalide = str_replace("'", "_", $chainenonvalide);
      $chainenonvalide = preg_replace('`_+`', '_', trim($chainenonvalide));
      $chainevalide=strtr($chainenonvalide,",/:[]?ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","------aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
      return ($chainevalide);
    }
    // création de l'image sur le script
    $test = file("http://images.meskalyn.net/cache/imagecache.php?img_url=".$url);
    return "https://images.meskalyn.net/cache/img/".valid_name($url)."";
    }
    Ce script "appel" le fichier imagecache.php qui s'occupera de créer l'image sur le serveur d'image...

    Le fichier imagecache.php :
    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
     
    <?php
     
    function valid_name($chainenonvalide)
    {
      $chainenonvalide = preg_replace('`\s+`', '_', trim($chainenonvalide));
      $chainenonvalide = str_replace("'", "_", $chainenonvalide);
      $chainenonvalide = preg_replace('`_+`', '_', trim($chainenonvalide));
      $chainevalide=strtr($chainenonvalide,",/:[]?ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","------aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
      return ($chainevalide);
    }
     
    $img_url = $_GET["img_url"];
    $imagedata = file_get_contents($img_url);
    $newfile = fopen(valid_name($img_url), "w");
    fwrite($newfile, $imagedata);
    fclose($newfile);
    ?>
    J'ignore si j'ai été suffisamment clair, mais au final, si l'un de mes membres mets dans son BBCode un .jpg ou .gif qui est en fait un vilain script php... le script est téléchargé... Il peut même mettre directement un fichier php s'il fouille un peu pour retrouver l'URL du "cacheur"...

    Comment sécuriser cette fonction ?

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    salut,
    peut-être vais je dire une bêtise ou quelque chose de naïf, mais ne pourrait tu pas parser ta variable $imagedata pour vérifier qu'elle n'est pas un réceptacle a php, en utilisant je ne sais qu'elle fonction ( d'où la naïveté, ce n'est peut-être pas possible...), puis en te servant d'un if pour décider si oui ou non tu charge l'image de ton utilisateur?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Par défaut
    Malheuresement pour moi, je ne connais pas ce genre de fonction "simple".

    Après je peux forcer le jpg|jpeg|bmp|png mais bon, uploader un fichier .png où simplement l'extension est changée n'est pas génial :/

    Je regarde aussi du côté de Lighttpd, le fopen sera effectué depuis toujours le même serveur, donc peut-être que je peux effectuer ce genre de protection uniquement (ou avec) lighttpd...

Discussions similaires

  1. Classe Template et fonction virtuelle cachée
    Par benbarate dans le forum C++
    Réponses: 5
    Dernier message: 14/05/2010, 10h09
  2. fonction qui cache des div
    Par kaking dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2009, 13h26
  3. Rangement de point en fonction de leur distance
    Par christophe.nz dans le forum MATLAB
    Réponses: 12
    Dernier message: 17/07/2009, 15h39
  4. Select en fonction de la distance
    Par business dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/04/2006, 10h21
  5. Fonction qui cache en fonction d'une selection de liste
    Par AlphonseBrown dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/03/2006, 20h53

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