Vous n'êtes pas identifié(e).
Bonjour à vous tous et toutes!
Peut-ton bloquer l'accès au fichier de traitement si la personne n'a pas passé par le fichier qui contient le formulaire ?
formulaire.php
traitement.php
Salutations
Hors ligne
oui
a+
Hors ligne
oui
a+
Je précise :
Admettons que ce ne soit pas un formulaire FORM avec SUBMIT mais plutôt un lien Hyper-Text comme ceci dans le fichier formulaire.php :
formulaire.php :
<a name="proceder" href="traitement.php">rediriger vers</a>
traitement.php :
if (!isset($_POST['proceder'])) { die('Acces directe interdit!'); } else { echo '...'; }
Peut-être faire une function avec une variable globale?
Sans utiliser de session ni de cookie ni de balise input.
Salutations
Hors ligne
Hors ligne
$_SERVER['HTTP_REFERER'] est ton amie
a++
Hors ligne
Merci.
La façon que j'ai trouvé et qui fonctionne :
dans formulaire.php :
<td><a href="traitement.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3s3k4j">Modifier</a></td>
Et dans traitement.php :
if($_GET['validonclick'] != "J4k3kk4h3s3k4j") { die('access interdit!'); } else { }
C'est pour éviter les messages d'erreurs et de changer ou supprimer une donnée par accident si la personne va directement dans traitement.php.
Mais je dois utiliser $_GET, j'aurais aimé plutôt utiliser $_POST de façon à ne pas passer la variable par le url.
Vu que je ne passe pas par un FORM et un bouton, mais plutôt un lien; comment je peux envoyer une variable via un lien?
J'ai essayé avec <a name="validonclick" href="....">....</a> ceci ne fonctionne pas. Surement que quelqu'un a une idée.
Salutations
Hors ligne
Sauf que... ta solution n'est pas fiable !
en effet, je créé un formulaire, je met en action l'adresse de ta page de traitement, je fais un champs (ou une variable dans l'url), au choix, qui indique que validonclick vaut J4k3kk4h3s3k4j (ou autre chose, il me suffit de regarder le code source de la page du formulaire), et je fais ce que je veux.
La vérification d'un champs post n'est pas plus efficace
Quand au $_SERVER['HTTP_REFERER'], et bien, il n'est pas fiable non plus ! En effet, c'est le navigateur client qui fourni cette info. Dans certains cas, il ne le fourni pas (du coup, pas fausse detection de problème), dans d'autres, il suffit que le pirate spécifie comme referer l'adresse du formulaire (compliqué ? regardez donc : https://addons.mozilla.org/fr/firefox/addon/953 ).
Il faut donc être très prudent pour ce genre de vérifications. L'utilisation d'une variable a valeur secrete via une session pourrait être une bonne solution, mais comme le phpsessid est défini dans un cookie, il suffit au pirate de le récupérer pour garder la session. Ceci dit, c'est deja plus compliqué. Avec quelques variations de plus, on peut encore rajouter de la complexité.
Ceci dit, l'idéal ca reste que la page de traitement vérifie scrupuleusement chaque entrée, de manière a ce que même si son appel vient d'ailleurs que du formulaire, cela n'entraine pas de degats.
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Mon but n'est pas réèlement de placer une protection mais plutôt d'obliger un passage obligé à la page formulaire.
avec ceci :
echo '<tr>
<td>'.$affiche_commentaire["id"].'</td>
<td>'.$affiche_commentaire["pseudo"].'</td>
<td><a href="modifier.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3K3k4j">Modifier</a></td>
<td><a href="supprimer.php?id='.$affiche_commentaire["id"].'&validonclick=J4k3kk4h3K3k4j" onclick ="if(!confirm(\'Voulez-vous Supprimer\')) return false;">Supprimer</a></td>
</tr>';
}
J'ai pensé changer les deux liens pour deux FORM afin de pouvoir avoir une variable à tester dans la page destination.
Salutations
Hors ligne