System mailowy odporny na spam


(Maryo) #1

witam,

borykam się z bezpiecznym systemem mailowym na mojej stronie.

obecnie w kontakcie mam skład osobowy i obok każdej osoby jest ikonka listu, po kliknięciu której otwiera się strona mailer.php z formularzem.

Jednakże ikonka listu posiada taki odnośnik:

www.stronka.pl/?plik=mailer/index&do=osoba@stronka.pl

co powoduje, że adres w pasku adresów strony jest oczywiście taki sam jak wyżej odnośnik. Zatem wystarczy w pasku adresu zmienić adres mailowy i wykorzystać moją stronę do rozsyłania spamu.

Jak to usprawnić, aby to było bezpieczne?


(K.S.) #2

Najprościej to tak:

www.stronka.pl/?plik=mailer/index&do=1

$adresy = array("osoba_1@stronka.pl", "osoba_2@stronka.pl", "osoba_3@stronka.pl", "osoba_4@stronka.pl");


$do = $adresy[intval($_GET['do'])];

(Maryo) #3

K.S. masz dobry pomysł, tylko nie wiem jak to w moim przypadku zastosować.

każdy userw bazie danych ma swoje ID. numer ten moze być podawany jak napisaleś:

www.stronka.pl/?plik=mailer/index&do=ID_usera

po naciśnięciu tego linka strona przeładowuje się na stronę z formularzem (to już mi działa) i tam po naciśnięciu Wyślij formularz musi zastąpić ID_usera odpowiednim mailem pobranym z bazy. W bazie mam tabele "ludzie" a w niej kolumnę "mail".

Czy wiesz jak to napisać aby działało?


(Sitemaster) #4

A co nie da się czytać z bazy?

$user_id=$_POST['user_id'];

$conn = mysql_connect(HOST,USER,PASS);

$db = mysql_select_db(DBASE,$conn);

$sql = mysql_query("SELECT mail FROM ludzie WHERE ID_usera='$user_id'",$conn);

$rekord = mysql_fetch_array($sql);

mail($rekord['mail'], 'temat', 'wiadomość');

mysql_close($conn);

taki ekspresowy przykład z palca.


(Maryo) #5

rzeczywiście API jesteś szybki :slight_smile: dla mnie za szybki :frowning:

może jeszcze raz, link przy nazwisku usera jest taki:

if ($ludzie_arr[8])

	echo "";[/code]




natomiast plik mailer.php wygląda tak:

[code]<? $ip = $_SERVER['REMOTE_ADDR']; $host = gethostbyaddr($ip); $do = $_REQUEST['do']; $send = $_POST['send']; $temat = $_POST['temat']; $kto = $_POST['kto']; $send = $_POST['send']; $message = $_POST['message']; if ($send) { $do = $_POST['do']; if ($message == "") { echo "Twoja wiadomość jest pusta."; exit; } if ($do == "piotr") { echo "piotr"; exit; } // $to = $do ."@strona.pl"; // $od = "gosc_www"; $subject = "[strona.pl] - ".$temat; if ($kto) $headers = "From: $kto\r\n"; else $headers = "From: ip_$ip@brak.adresu\r\n"; $message = strip_tags($message); $message = stripslashes($message); // $headers = "Cc: $kto\r\n"; $full_message = $message . "\r\n ********************************************************** Wiadomo¶ć została wysłana za pomoc± strona.pl/?plik=mailer/index. Nadawca podpisał się jako: ".$kto.". IP nadawcy to: ".$ip. " ($host). **********************************************************"; $success = mail($do, $subject, $full_message, $headers); if ($success) echo "Wiadomo¶ć pomy¶lnie wysłana "; else echo " Bł±d w adresie $do@strona.pl. Wiadomo¶ć nie została dostarczona."; echo "Powrót do strony głównej"; echo "Wy¶lij now± wiadomo¶ć"; } else { if ($ip == "83.16.233.58") //or ($ip == "212.14.39.2")) //trefne IP! !!

może teraz ktoś mi podpowie troche jaśniej jak to zrobic??

z tego co podpowiadacie to w linku jest "$ludzie_arr[8]" i musi być zamienione chyba na "id_ludzia" a potem w pliku mailer.php zamiana "id_ludzia" na "$ludzie_arr[8]" ?? Ale nie wiem za Chiny jak i gdzie to poprawić :frowning:


(K.S.) #6

Zakładając, że to Twoje $ludzie_arr[8] zawiera poprawny identyfikator osoby do której ma być wysłany mail (nieistotne skąd to wziąłeś, czy z bazy czy ręcznie wpisany) to co dalej z tym zrobić Api Ci podał. Z takim małym szczegółem:

to:

$user_id=$_POST['user_id'];

zmień na:

$user_id=intval($_POST['user_id']);

Niby nic, a jednak ma spore znaczenie.

Co do tego skryptu co wkleiłeś, nawet jeśli adresy odbiorców będziesz pobierał np. z bazy na podstawie identyfikatorów to w takim kształcie jak obecnie nadal można wysłać maila na dowolny adres.


(Blazej X) #7

Dokładnie, program spamerski może wysłać CI do skryptu dane z dowolnym adresem mailowym. Pobranie adresu na podstawie numeru id musi nastąpić przed wysłaniem samego maila, jak skrypt otrzyma już treść wiadomości. Wcześniej możesz wyświetlić adres e-mail, ale tak czy inaczej powinieneś przekazać w formularzu numer id.

Tylko, że wówczas nadal ze strony można wysyłać spam, z ta różnicą, że tylko do odbiorców zdefiniowanych w bazie

Jeśli chcesz odfiltrowywać spam zobacz tutaj: http://sblam.com/


(Maryo) #8

dzięki chłopaki za pomoc

light_neon (Pobranie adresu na podstawie numeru id musi nastąpić przed wysłaniem samego maila) - właśnie o to mi chodzi, szkoda że nie wyraziłem sie czytelnie.

"id_ludzia" zamieniane jest na "mail" po wciśnięciu przycisku WYSLIJ, czyli kiedy serwer wysyła wiadomość i nie ma już możliwości zmiany danych formularza.

czyli zatem wasza podpowiedz:

$user_id=intval($_POST['user_id']);

jest nie prawidłowa? A jak powinna wyglądać prawidłowo?

dla tych którym nie chce się czytać poprzednich wątków przypomnę:

  1. klikasz na nazwisko osoby i przerzuca cię do formularza kontaktowego

  2. w formularzu kontaktowym jest podany "id_ludzia" zamiast adresu mailowego

  3. po wypełnieniu formularza i naciśnięciu przycisku WYŚLIJ skrypt wysyła maila jednocześnie zamieniająć "id_ludzia" na odpowiedni "mail" z bazy