Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]bezpieczny formularz kontaktowy w PHP
Forum PHP.pl > Forum > Przedszkole
gariz
ostatnimi czasy hosting wylaczyl mi strone bo frmularz kontaktowy byl lakomym kaskiem dla spamerow i z mojego konta zaczely wychodzic spamerskie maile.

kod pobralem ze strony http://www.kess.snug.pl/?sid=10&pid=17

niestety w zaistnialej sytuacji musze z niego zrezygnowac - czy mozecie mi pomoc w znalezieniu biblioteki ktora bylaby odporniejsza na w/w ataki??
na coderscity.pl dowiedzialem sie juz ze najlepiej zeby byl to czysty php lub php+mysql

znalazlem cos takiego http://swiftmailer.org/ ale nie moge sobie z nim poradzic ;/ moze jakis prostszy bylby ok??
MateuszS
Zastosuj CAPTCHA i filtruj zmienne z formularza
Brick
Czyli inaczej mówiąc zastosuj opcję "przepisz kod z obrazka".
Nie podam ci tu żadnego gotowca bo takiego nie używam w tym przypadku. Możesz sam zrobić ten formularz, nie jest to takie trudne.
PHP + MySQL jest potrzebne.

Idea w skrócie:
1. Do formularza dodajesz obrazek generowany przez php oraz pole do wpisania kodu.
2. W skrypcie wyświetlającym obrazek generujesz losowy ciąg kilku znaków. Zapisujesz go do bazy danych i wyświetlasz w obrazku
3. Po wysłaniu formularza porównujesz wpisany kod z tym który masz w bazie. Jeżeli jest poprawny wysyłasz e-mail. Jeżeli nie to piszesz komunikat odpowiedni i nie wysyłasz e-maila.
4. Po każdym wysłaniu formularza (nie emaila tylko kliknięciu "Wyślij") kasujesz kod z bazy i generujesz nowy.
bełdzio
fajnie podatny na email injection jest podany przez Ciebie skrypt smile.gif looknij na to => http://www.beldzio.com/mail-injection
gariz
dzieki.

a co powiecie o takim zestawie??
  1. <?php header('Content-type: text/html; charset=ISO-8859-2');?>
  2. <?php
  3. require("phpmailer/class.phpmailer.php");
  4. //$adres=$_POST['adres'];
  5. $tresc = $_POST['tresc'];
  6. $nick = $_POST['nick'];
  7. $tel = $_POST['tel'];
  8. $kontakt = $_POST['kontakt'];
  9. $mail = new PHPMailer();
  10.  
  11. $mail->IsSMTP();
  12. //tu zmie_ // set mailer to use SMTP
  13. $mail->Host = "mail.hhh.com"; // tutaj wpisujesz adres do serwera smtp
  14. $mail->SMTPAuth = true; // turn on SMTP authentication
  15.  
  16. $mail->Username = "www@nus.com"; // SMTP username
  17. $mail->Password = "yyyy"; // SMTP password
  18.  
  19. $mail->From = "www@jjjnus.com"; //tutaj adres meilowy
  20. $mail->FromName = "www"; //_e od kogo ma by_ ten mail
  21. //$mail->AddAddress($adres); //do kogo ma by_ wys_any pobiera z formularza
  22. $mail->AddAddress("garizzz@hh.com"); // name is optional
  23. $mail->AddReplyTo($kontakt);
  24. //$mail->AddReplyTo("info@example.com");
  25. /*
  26. $mail->WordWrap = 50; // set word wrap to 50 characters
  27. $mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
  28. $mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
  29. */
  30. $mail->IsHTML(true); // set email format to HTML
  31.  
  32. $mail->Subject = "Kontakt ze strony www"; //temat meila
  33. $mail->Body = $nick . " napisał: <br>" . $tresc . "<br>Dane kontaktowe:<br>" . "Adres mailowy: " . $kontakt . "<br>Telefon: " . $tel; //tres_ meila pobiera tak_e z formularza
  34. $mail->AltBody = "Wiadomość jest w formacie HTML - Twój klient poczty nie potrafi jej wyświetlić.";
  35.  
  36. //{ Wype_nij wszystkie pola formularza!
  37. // echo "Message could not be sent. <p>";
  38. // echo "Mailer Error: " . $mail->ErrorInfo;
  39. // exit;
  40. //}
  41.  
  42. if (!empty($_POST['tresc']) && !empty($_POST['kontakt']) && !empty($_POST['tel'])) {
  43. if(!$mail->Send())
  44. {echo '<div id="error">Wysłanie wiadomości niemożliwe</div>' . $mail->ErrorInfo; exit;}
  45. echo '<div id="ok">Wiadomość została wysłana poprawnie!</div>';}
  46. else echo '<div id="error">Wypełnij wszystkie pola formularza!</div>';
  47. ?>


i formularz
  1. <!--<body>
  2. <form action="sent.php" method="post">
  3. <input type="text" name="adres" value="tutaj adres"><br>
  4. <textarea type="text" name="tresc" value="tresc listu"></textarea><br>
  5. <input type="submit" value="wyslij"></form>-->
  6.  
  7.  
  8. <form action="skrypty/sent.php" method="POST">
  9. <b>Tre__ wiadomo_ci</b><br>
  10. <textarea name="tresc" style="width: 250px; height: 100px"></textarea>
  11.  
  12. <b>Imi_, nazwisko lub nick</b><br>
  13. <input type="text" name="nick" size=40>
  14.  
  15. <p><b>Twoj adres e-mail</b><br>
  16. <input type="text" name="kontakt" size=40>
  17.  
  18. <p><b>Twój numer telefonu (opcja)</b><br>
  19. <input type="text" name="tel" style="width: 250px">
  20.  
  21. <p><input type="submit" value=" Wy_lij ">
  22. <input type="reset" value=" Od nowa "></td>
  23. </form>
moglbym prosic o wypowiedz co do bezpieczenstwa tego skryptu na bazie phpmailer/class.phpmailer.php??


i jeszcze takie jedno pytanko - komunikat wyslano czy nie wyslano maila pojawia sie na nowej czystej stronie. jak zrobic zeby komunikat pojawil sie we wnetrzu strony. formularz jest osadzony wewnatrz strony przez INCLUDE. Poprzedni niebezpieczny skrypt wyswietlal komunikat bez odswiezania calej strony przez co informacja byla widoczna i osadzona zgodnie z skorka strony.
Misiek92
Zastosuj ReCaptcha

http://recaptcha.net/
gariz
Cytat(Misiek92 @ 9.01.2010, 12:17:05 ) *
Zastosuj ReCaptcha

http://recaptcha.net/

fajne tylko kurcze wolalbym uniknac takiego widgeta na stronie bo zbyt zwraca na siebie uwage ;/
mógłbym prosic o sprawdzenie tego mojego nowego mixu na okolicznosc email injection
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.