Page 1 sur 1
Protéger variable URL
Posté : 25 mars 2012, 17:32
par Solar13
Bonjour à vous,
J'aimerai savoir comment protéger une url qui fait passer une variable:
Du genre: siteinternet.com/articles?chapitre=3
Car si quelqu'un tape un chiffre qui n'est pas dans la bdd et met par exemple 99 et que ce chiifre n'existe pas,
cela me retourne une erreur et je crois que ce n'est pas terrible.
J'ai lu quelques trucs comme quoi il faudrait faire une gestion des erreurs mais je n'arrive pas à la formuler, a moins que ce ne soit pas comme cela
qu'il faille s'y prendre
Si quelqu'un pouvait m'aider et pardonner ma noob attitude
Merci à vous
Re: Protéger variable URL
Posté : 25 mars 2012, 17:47
par xTG
Tu utilises quoi comme accès sql ?
Avec les fonctions mysql_xxx tu peux utiliser mysql_num_rows() pour vérifier que la requête renvoie bien quelque chose.
Tu peux utiliser mysql_real_escape_string() pour protéger les variables injectées dans une requête.
Avec PDO tu as rowCount() et quote() qui font le travail. (quote est à utiliser si ce ne sont pas des requêtes préparées)
Re: Protéger variable URL
Posté : 25 mars 2012, 18:07
par Solar13
J'utilise mysql

( et merci pour la réponse )
Mais concrètement comment cela fonctionne ?
Si je met un escape string sur ma variable qui renvoie le numéro d'article, si quelqu'un entre autre chose cela ne va rien faire ?
Mais cela ne marchera pour quelqu'un qui simplement changerait le numéro.
Par exemple, avec une réécriture d'url, mais page se présente comme cela:
monsite.com/articles-page-2.html
2 étant l'id renvoyé en bdd.
Si quelqu'un met 99, c'est toujours un nombre, ce n'est pas un caratére spécial, et j'aurais un message d'erreur.
Comment pourrais je formuler par exemple, que si l'id n'existe pas dans la bdd, cela me renvoie 1 par exemple ( retour à l'article 1 )
Re: Protéger variable URL
Posté : 25 mars 2012, 18:19
par xTG
Si tu souhaites implémenter cela il faut utiliser deux requêtes dans ce cas.
Une récupérant l'article dont l'id est dans l'url et si rien de retourné une autre tentant de récupérer le premier article.
Des erreurs tu dis ? Montres nous ton code qu'on puisse te dire ce qui ne va pas.
Re: Protéger variable URL
Posté : 25 mars 2012, 19:01
par Solar13
Par exemple, si je change le nombre qui transite en url, et qu'il n'existe pas, cela me donne:
Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php') in /homez.544/sitetest/www/tome1/article-tome1.php on line 154
Re: Protéger variable URL
Posté : 25 mars 2012, 19:03
par xTG
Aucun rapport avec la base de données là...
C'est un problème d'existence de fichier inclus.
Tu peux utiliser file_exists() pour tester l'existence d'un fichier avant de l'inclure.
Re: Protéger variable URL
Posté : 25 mars 2012, 19:33
par Solar13
En fait ( je ne sais pas si je suis hs où si ça peut aider ), j'ai des articles qui sont en format html.
Dans ma bdd, je stocke uniquement le chemin vers ce fichier html et je fais un include de ce dernier en fonction de l'id.
J'ai deux champ dans ma bdd, l'id et le chemin vers le texte.
Re: Protéger variable URL
Posté : 25 mars 2012, 19:58
par xTG
Ah j'avais mal lu le message...
Il tente d'inclure une chemin de fichier vide ''
Donc c'est bien ta requête qui ne renvoie rien, et donc reportes toi à mon premier message pour la solution.
Mais tu peux aussi doubler la protection en tester l'existence du fichier comme je te l'ai dit au cas où un enregistrement de ta bdd soit erroné.
Re: Protéger variable URL
Posté : 26 mars 2012, 16:55
par Solar13
Merci pour la réponse, je vais tester cela.
A titre informatif, j'aimerai savoir si le fait de stocker uniquement le chemin des gros pavé de texte dans la base de données pour
les inclure est une solution valable ou pas ? J'avoue avoir complètement improvisé.
Les gros sites stockent tous leurs textes en bdd ?
Re: Protéger variable URL
Posté : 26 mars 2012, 20:18
par xTG
Si les textes sont vraiment très long c'est une bonne solution je trouve.
Après cela dépend de ton serveur de base de données et ses capacités et surtout de ce que tu veux en faire.
Il est plus facile de faire de la recherche fulltext sur une bdd que sur des fichiers.
Re: Protéger variable URL
Posté : 29 mars 2012, 23:17
par Solar13
Merci encore pour tes réponses

Re: Protéger variable URL
Posté : 30 mars 2012, 07:27
par moogli
@xTG : pour info
pdo::rowCount n'est pas fiable sur des select (voir donc). Donc un select count semble plus approprié. (et rien n'empêche de faire une procédure stockée pour éviter deux requêtes entre php et le serveur SQL
Quand au stockage en base ou en fichier, faut voir ce que l'on entend par gros pavé

La gestion des fichiers est un poil plus complexe et il y a des risques de te retrouver avec des fichier qui ne sont pas en base on l'inverse.
Mais effectivement peux être que sur énormément de caractères les fichiers seront plus performant.
Le file_exists est obligatoire pour éviter les orphelins (sujet référencé dans la base et n'ayant pas de fichier).
À la limite tu n'a pas besoin de stocker en base de donnée le chemin si tu nomme les fichiers avec la clef primaire de la table. (bon après ça dépend de l'architecture de classement choisis

).
@+