OVH Community, votre nouvel espace communautaire.

erreur PHP


pprem
30/03/2007, 07h40
Hello Visualight, en effet la plupart des attaques par envoi de spams proviennent d'automates qui parcourrent le oueb à la recherche de formulaires fouareux... et nous sommes ici en présence de l'un d'eux !

Pour le "Internal server error", vérifie que tu n'as pas de .htaccess qui traîne dans ce dossier ou qui pourrait l'impacter en faisant par exemple de l'URL rewriting. Il suffit d'une erreur sur une ligne pour planter certains accès.

Pour le traitement du formulaire en lui-même, l'utilisation de $email directement dans le from du message permet d'en modifier les entêtes par appel direct du programme et par conséquent d'envoyer n'importe quoi à n'importe qui en masse... sans que tu ne le saches ni n'y puisse rien une fois balancés. J'ai déjà vu ça à plusieurs reprises sur différents sites et le déblacklistage suite à ce genre d'attaque est très complexe, long, chiant et quasiment infaisable avec AOL/Hotmail et d'autres.
En clair, ne jamais utiliser de données saisies dans le formulaire directement dans un champ permettant de modifier les headers d'un email.

Une solution contre ça est assez simple: filtrer l'email en utilisant la fonction suivante
Code PHP:
function verifie_email($email2) {
  
$email strtolower($email2);
  if (
strlen($email) < 6) {
    return 
$email2." : Email trop court";
  }
  if (
strlen($email) > 255) {
    return 
$email2." : Email trop long";
  }
  if (!
ereg("@",$email)) {
    return 
$email2." : Le email n'a pas d'arobase (@)";
  }
  if (
preg_match_all("/([^a-zA-Z0-9_\@\.\-])/i"$email$trouve)) {
    return 
$email2." :  caractère(s) interdit dans un email (".implode(", ",$trouve[0]).").";
  }
  if (!
preg_match("/^([a-zA-Z0-9_]|\\-|\\.)+@(([a-zA-Z0-9_]|\\-)+\\.)+[a-zA-Z]{2,4}\$/i"$email)) {
    return 
$email2." : n'est pas un email valide.";
  }
  list(
$compte,$domaine)=split("@",$email,2);
  if ((
function_exists (checkdnsrr)) && (!checkdnsrr($domaine,"MX"))) {
    return 
$email2." : Ce domaine ($domaine) n'accepte pas les emails";
  }
  return 
$email2;

de cette façon
Code PHP:
if (verifie_email($email) != $email) {
  
// l'adresse de messagerie n'est pas valide, ne pas s'en servir
} else {
  
// l'adresse de messagerie est valide, on peut faire ce qu'on veut avec


visualight
29/03/2007, 17h06
Et comme ça ?

Code PHP:
$adresse="votreadresse@votrefai.com";
$from="From: $prenom $nom<$email>\r\n";
$from.="Reply-To: $prenom $nom <$email>\n";
$from.="X-priority:3\n";
$from.="MIME-Version: 1.0\r\n";
$from.="Content-Type: text/html";
$texte="";
$texte.="$texte";
$texte.="";

if (
mail($adresse,$sujet,$texte,$from)) {
echo 
'

Formulaire envoyé ! Je vous répondrais rapidement. Merci!

Cliquez ici pour revenir à l\'accueil
'
;
}
else {
echo 
'

Problème à l\'envoi du mail...désolé nous ne pouvons actuellement traiter votre demande

Contactez nous plus classiquement';
}
?>
N'oubliez pas dez protéger vos formulaires mails par l'ajout d'un captcha ou autre (c'est toujours mieux). En effet 90% des problèmes de spam viennent de la divulgation d'adresses mails sur le web (inscription à des sites par exemple) et formulaires de contact non protégés !

m4g
26/03/2007, 21h34
Le même problème que moi! Et j'ai pas la solution :/

cesy
26/03/2007, 20h49
Bonsoir,

J'ai mis en place hier un formulaire de contact qui renvoi vers un fichier .php

J'ai uploader le tout, ça allait, puis pouf, j'ai maintenant le message suivant :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, tech@ovh.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/1.3.37 Server at www.hugueschaillot.fr Port 80


J'ai donc envoyé un message à ovh, et la réponse a été la suivante :

Bonjour,

les droits d'accès sur le script traitement.php ne lui êrmettent pas de s'exécuter. Passez-le en droits 755 avec votre client ftp et l'erreur ne devrait plus revenir.

Cordialement, A*****


J'ai donc essayé de changer les droits mais rien à faire, ça ne marche toujours pas.

La page du formulaire est la suivante :

http://www.hugueschaillot.fr/Accesso...ormulaire.html

et le script c'est :

$adresse="votreadresse@votrefai.com";
$from="From: $prenom $nom<$email>\r\n";
$from.="Reply-To: $prenom $nom <$email>\n";
$from.="X-priority:3\n";
$texte="";
$texte.="$texte";
$texte.="";
$from.="MIME-Version: 1.0\r\n";
$from.="Content-Type: text/html";
if (mail($adresse,$sujet,$texte,$from))
echo("



Formulaire envoyé ! Je vous répondrais rapidement. Merci!


Cliquez ici pour revenir à l'accueil
");
else
echo("



Problème à l'envoi du mail...désolé nous ne pouvons actuellement traiter votre demande


Contactez nous plus classiquement");
?>

Si vous avez une solution, je suis preneur !