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 :

Comment sécuriser un paramètres d’url qui contient du texte ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut Comment sécuriser un paramètres d’url qui contient du texte ?
    Bonjour,

    Comment sécuriser un paramètres d’url qui contient du texte ?

    Dans mon cas, pour la réécruture url, j’utilise une url de départ :

    Ma-page.php?id_article=1&alias=nom-article
    Ce qui donne :

    1-nom-article.php
    Pour le paramètre id_article, je vérifie que c’est bien un int, etc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET[id_article] && $_GET[article] != null && $_GET[id_article] >= 1 && $_GET[id_article] <= 4 && (int) $_GET[id_article])
    Comment sécuriser le paramètre alias qui contient du texte ?

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    l'échappement des données de l'url se fait avec rawurlencode()

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Tout d'abord, il n'y aurait pas erreur entre sur le nom du paramètre ?
    Dans l'URL au départ c'est "alias", puis dans le code de vérification c'est "article" ???


    Dans ce cas présent, on pourrait très bien éviter de vérifier cette donnée (la chaine : alias ou article) car la logique veut que ce qui rend unique chaque lien, donc chaque document HTML c'est l'ID de l'article (id_article).
    Donc à partir du moment où cet ID est un nombre entier valide qui plus est débouche bien sur un article (requête SQL par exemple), alors on renvoie le contenu du document, sinon une erreur type 404 (théoriquement).

    De plus, on ne sait pas comment et sur quoi tu te base pour créer le nom de l'article que compose cette URL réécrite.
    Le titre de l'article ? Si c'est le cas, est-on garanti à 100% qu'un titre soit unique ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut
    Tout d'abord, il n'y aurait pas erreur entre sur le nom du paramètre ?
    Dans l'URL au départ c'est "alias", puis dans le code de vérification c'est "article" ???
    Merci pour vos réponses.

    Plus de précisions :

    Il n'y pas d'erreur sur le paramètre. Je montrais comment je vérifiais le paramètre id_article qui est un integer.

    Je fais une vérification : si il est vide, si ce n'est pas un integer, etc. je redirige vers la page index.php (header location).

    Et j'aimerais faire une vérification sur le paramètre alias (qui est récupéré depuis la bdd et qui est déjà formaté urlrewritting (une fonction a nettoyé le titre de l'article qui est convertit en alias).

    Ça donnerait déjà ça pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_GET['alias'])){}

    Je voudrais empêcher un utilisateur de saisir des caractères spéciaux ou autres tentative de piratage en tapant dans le paramètre alias de l'url.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je voudrais empêcher un utilisateur de saisir des caractères spéciaux ou autres tentative de piratage en tapant dans le paramètre alias de l'url.
    Ok, mais par rapport à ce que je disais, qu'en pense tu de l'utilité de vérifier l'exactitude de cette chaine "alias" alors que ce qui défini véritablement un article c'est la valeur de l'id_article que tu obtiens (ou doit obtenir) ?

    Admettons le scénario suivant :
    On a dans la Bdd un article dont l'ID est : 50 et dont l'Alias est : UnArticle
    Si je saisie l'URL suivante directement dans un navigateur :
    -http://www.tonsite.com/50-UnTrucPourTenterUnHack.php

    Pour ma part, le simple fait d'obtenir 50 pour id_article me suffit pour lui renvoyer comme réponse le document HTML correspondant, quand bien même que la valeur de l'Alias soit incorrecte.


    Maintenant rien empêche de pousser le bouchon à ce que ces 2 infos (id_article et alias) soient totalement en phase, et là, un simple !empty() coté Php suffit comme tu le prévois.
    Après, il faudrait lancer une requête SQL pour tenter de récupérer cette article à condition que ces 2 valeurs soient exacte.
    C'est à mon sens surtout au niveau du SQL ou il faudra être vigilent, comme par exemple exploiter PDO + requête préparée pour le coté sécurité.
    Ici, si la requête renvoie rien c'est qu'il a erreur sur l'une des deux infos, voire les deux.
    Et là, on s'en fiche un peu de savoir à quel niveau et même pourquoi, on renvoie une erreur de type 404 et l'affaire est réglée.

    Je dirais qu'il n'y a pas lieu d'être paranoïaque.
    C'est surtout lorsqu'une requête HTTP (surtout via un simple lien) débouche sur des modifications (insert into, update, delete) et sur des données plus ou moins sensibles/confidentielles où là il est bon d'être un peu parano.
    Raison de plus si le site Web a une certaine notoriété et/ou quelque chose à gagner.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ok, mais par rapport à ce que je disais, qu'en pense tu de l'utilité de vérifier l'exactitude de cette chaine "alias" alors que ce qui défini véritablement un article c'est la valeur de l'id_article que tu obtiens (ou doit obtenir) ?
    Ok, je comprends tes explications et c’est logique. Merci.

    Je suis un peu parano car je me suis fait piraté récemment un cms.

    Sinon, pour la sécurité, il y a crawlprotect. Pour ceux qui ne connaissent, ce script génère un fichier htaccess avec des règles qui empêchent de trafiquer les url (par exemple, il bloque monsite.com/index.php?http:// sitepirate…

Discussions similaires

  1. Comment downloader un fichier xml qui contient le text d'un InputTextArea ?
    Par Benusko dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 13/11/2014, 09h30
  2. Réponses: 11
    Dernier message: 08/04/2009, 09h45
  3. Comment utiliser un fichier .java qui contient un package
    Par mobi_bil dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 01/03/2009, 13h30
  4. Réponses: 7
    Dernier message: 21/12/2007, 12h56
  5. Réponses: 2
    Dernier message: 20/01/2007, 11h19

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