Interdire l'accès à un fichier php mais pas l'execution de celuici

Nouveau WRInaute
Bonjour,

Mon formulaire de contact fait appel à un fichier .php lorsqu'on clique sur le bouton envoyer de mon formulaire:
envoi-mail.php

Celui-ci est placé dans le dossier:/media/script/envoi-mail.php

Il me permet la génération d'un mail en texte enrichi et formaté.

Depuis le lancement du site, j'ai 3 à 4 mails envoyés par semaine qui sont vierges. Je pense que cela vient du fait que dans le code source de mon formulaire, on distingue clairement quel script est appelé et à quel endroit.

http://www.quai-west-nautique.com/contactez-nous.html

J'ai essayé de placer un fichier .htaccess dans le dossier script
<files envoi-mail.php>
order allow,deny
deny from all
</files>

Mais celui-ci me génère une erreur 500. Je suis sur un serveur mutualisé. (strato-hebergement)

Je souhaiterai qu'on ne puisse pas accéder directement à l'URL suivante:
http://www.ndd.com//media/script/envoi-mail.php

Mais qu'il continue à fonctionner lorsque qu'il est appelé par le bouton Envoyer.

En vous remerciant d'avance.

Cordialement
 
WRInaute occasionnel
Pas sur que tu puisse faire ce que tu demandes...

Par contre je vois que le formulaire est vérifié uniquement en javascript, un robot ou un visiteur ayant désactivé le JS peut t'envoyer un formulaire vide en cliquant sur le bouton.

Je te conseille de doubler les vérifs JS par les mêmes dans ton fichier php et ne pas envoyer le mail si nok.
 
WRInaute occasionnel
Bonjour,

Il te suffit de programmer ton script de mail de telle sorte que les messages vides ne soient pas envoyés.

Il faut vérifier, par exemple, que les champs expéditeur, titre du message, corps du message soient bien remplis, sinon le message ne part pas.

Ainsi, tu n'auras plus de mail vide.

Bonne journée.
 
WRInaute accro
Les sessions sont tes amis...
Dans la page de ton formulaire tu créés la variable de session "formOK"
Dns la page de validation, tu vérifies qu'elle existe.
Si oui, tu exécute la routine puis tu détruit la variable, si non, tu expulses du site en détruisant aussi la variable.

Tu peux améliorer en entrant les ip indésirable dans une table et aller vérifier à chaque fois... Si l'IP tente plus de x fois d'exécuter le fichier, tu la ban via le .htaccess
 
Nouveau WRInaute
Rod la Kox a dit:
Les sessions sont tes amis...
Dans la page de ton formulaire tu créés la variable de session "formOK"
Dns la page de validation, tu vérifies qu'elle existe.
Si oui, tu exécute la routine puis tu détruit la variable, si non, tu expulses du site en détruisant aussi la variable.

Tu peux améliorer en entrant les ip indésirable dans une table et aller vérifier à chaque fois... Si l'IP tente plus de x fois d'exécuter le fichier, tu la ban via le .htaccess

Merci pour vos conseils avisés.

Je vais essayer la dernière proposition avec la variable de session.

Merci à tous

A.B
 
Nouveau WRInaute
bruno212 a dit:
Bonjour,

Il te suffit de programmer ton script de mail de telle sorte que les messages vides ne soient pas envoyés.

Il faut vérifier, par exemple, que les champs expéditeur, titre du message, corps du message soient bien remplis, sinon le message ne part pas.

Ainsi, tu n'auras plus de mail vide.

Bonne journée.

Je viens d'ajouter une vérification php sur mon formulaire.

Maintenant il faut que je vois si je ne vais plus recevoir de formulaire vide....

Merci
 
WRInaute accro
il y a beaucoup plus simple et d'ailleurs tu n'aurais pas deux script pour envoyer un mail si tu l'avais su avant.

il y a plusieurs façons d'attaquer un script via un navigateur :
- en GET (cas classique) c'est vraisemblablement celui qui te dérange vue que l'url de ton script d'envoie est 'libre'.
- en POST (suite a la validation d'un formulaire method="post") et c'est ça qui est le truc le plus simple et le moins tordu.
- en .... d'autres trucs sans intérêt.

Code:
if(isset($_POST['un_champ_du_formulaire_mail'])){
   ton script de formatage envoie(...)
}else{
   exit();
}
 
WRInaute accro
Zeb, c'est plus simple mais pas sécurisé.
Un $_POST peut-être forcé à la différence d'un $_SESSION. ;-)


... etil peut même utiliser session_regenerate_id() au cas ou ila paeur qu'on lui hack ses session_id
 
WRInaute accro
Rod la Kox a dit:
Zeb, c'est plus simple mais pas sécurisé.
Un $_POST peut-être forcé à la différence d'un $_SESSION. ;-)
... etil peut même utiliser session_regenerate_id() au cas ou ila paeur qu'on lui hack ses session_id

reco pour toi c'est vrai que c'est moins 'sécu' mais bon de toi a moi si il filtre les entêtes avant d'envoyer le mail pour éviter les spams massif ça risque quoi de se faire taquiner le formulaire ? j'en connais pas beaucoup qui vont s'éxiter dessus plus de 30 seconde quand ils auront compris que le mail part pas.
 
Discussions similaires
Haut