URL rewriting avec texte

  • Auteur de la discussion LE Guitou
  • Date de début
L
LE Guitou
Guest
Bonjour,

J’ai eu beau suivre les différentes explications, posts… mais je n’arrive pas à m’en sortir.

Je voudrais donc rajouter du texte dans mes url. Celui-ci reprendra le titre des news avec donc : du texte majuscule, minuscule et chiffre.
L’url rewriting avec juste l’ID marche correctement, mais dès que je veux mettre mon texte je n’y arrive pas.

Exemple qui fonctionne juste avec l’id :
- Lien page php : <a href="news-'.$data["id"].'.html">
- htaccess : RewriteRule ^news-([0-9]+)\.html$ /index.php?page=contenu_news&id_news=$1 [L]

Exemple que je voudrais mettre en place :
- Lien page php : <a href="news-'.$data["id"].'-'.$data["titre_formate"].'.html">
- htaccess : RewriteRule ^news-([0-9]+)-([a-zA-Z0-9\-]*)\.html$ /index.php?page=contenu_news&id_news=$1&titre=$2 [L]


L’erreur retournée : HTTP 404. Impossible de trouver le fichier.

Quelqu’un pourrait m’aider svp ?

Merci par avance.
 
WRInaute impliqué
j'vais peut-être dire un c*nnerie mais essaye en mettant le tiret en premier : [-a-zA-Z0-9]
 
WRInaute accro
Essaie :
Code:
RewriteRule ^news-([0-9]+)-(.*).html$ /index.php?page=contenu_news&id_news=$1&titre=$2 [L]
 
L
LE Guitou
Guest
seebz a dit:
j'vais peut-être dire un c*nnerie mais essaye en mettant le tiret en premier : [-a-zA-Z0-9]

J'avais déjà testé, j'ai retesté mais ça ne veut toujours pas. ^^'

milkiway a dit:
Essaie :
Code:
RewriteRule ^news-([0-9]+)-(.*).html$ /index.php?page=contenu_news&id_news=$1&titre=$2 [L]

Ce genre de chose ne laisse pas la porte ouverte a du hack de site ? (possibilité de mettre http://...)


Edit : En effet le (.*) fonctionne très bien mais niveau sécurité cela n'est pas une faille ?
 
WRInaute accro
Si tu valides et/ou escapes correctement les paramètres qui te sont passés (ce que tu devrais faire de toutes façons), ça ne devrait pas poser de problème.

Si [-a-zA-Z0-9]* ne convient pas, c'est que tu dois avoir d'autres caractères dans ton titre, non?

Jacques.
 
WRInaute accro
jcaron a dit:
Si tu valides et/ou escapes correctement les paramètres qui te sont passés (ce que tu devrais faire de toutes façons), ça ne devrait pas poser de problème.

Jacques.
Peux-tu en dire plus à ce sujet stp?

Merci
 
WRInaute accro
Ben si tu utilises des données que tu reçois tu client (via $_GET, $_POST, $_COOKIE et une bonne partie de $_SERVER, etc.), tu ne dois jamais leur faire confiance (même si tu as de la validation JS côté client, même si tu penses que ce sont des données issues d'un formulaire donc tu as fourni toutes les valeurs...).

Ce type de données ne doit donc jamais être utilisé sans validation ou escaping:
- dans une requête SQL
- dans la composition d'un nom de fichier
- dans un appel "system" ou équivalent
- dans un eval
- dans un preg_replace (ou équivalent) avec un flag e
etc.

Sinon tu ouvres la porte à une "injection".

De la même façon, tu ne dois jamais réafficher ces données telles quelles (directement ou après stockage en base SQL), sinon tu ouvres la porte à du cross-site scripting.

Exemple d'injection SQL:
- tu fais une requête "SELECT * from table WHERE id=".$_GET['id']." AND password='".$_GET['password']."'"
- si l'utilisateur passe comme valeur de id "22 OR true OR true" la requête est vraie dans tous les cas, et l'utilisateur peut rentrer même sans connaître de password.
- il faut donc soit valider ce que tu as reçu (vérifier que id n'est bien qu'un nombre et rien d'autre dans le cas présent, et que password ne contient que les caractères autorisés), soit "escaper" les données reçues (avec mysql_real_escape_string)

Note qu'il y a nettement pire comme injection SQL: on peut sans problème effacer toute ta base par exemple.

Jacques.
 
Discussions similaires
Haut