Webboard

Pełna wersja: Zabezpieczenie pliku php obsługującego formularz
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
mam pytanko odnośnie php, mam plik php który obsługuje cały formularz który mam na stronie i moje pytanie do Was czy da się go jakoś zabezpieczyć żeby uniknąć no nie wiem jakiegoś ataku czy czegoś w tym stylu? Jest bardzo okrojony bo o wpisywane dane "dba" jQuery validate.

Tutaj mój plik php:
Kod:
<?php

// Tworzymy zmienną dla nicku
$nick_z_forum = $_POST['nick_z_forum'];

// Tworzymy zmienną dla adresu email
$email = $_POST['email'];

// Tworzymy zmienną dla Steam Id
$sid = $_POST['sid'];

// Tworzymy zmienną dla kodu zwrotnego
$kod_zwrotny = $_POST['kod_zwrotny'];

// Podajesz adres email na który chcesz otrzymać wiadomość
$dokogo = "raen@angelskill.pl";

// Podajesz tytuł jaki ma mieć ta wiadomość email
$tytul = "Kupno Vipa - serwer [JB]";

// Przygotowujesz treść wiadomości
$wiadomosc = "";
$wiadomosc .= "Nick użytkownika forum: " . $nick_z_forum . "\n";
$wiadomosc .= "E-mail użytkownika: " . $email . "\n";
$wiadomosc .= "SteamID użytkownika: " . $sid . "\n";
$wiadomosc .= "Kod zwrotny: " . $kod_zwrotny . "\n";

// Przygotowujesz nagłówek wiadomości
$naglowek = "Content-Type:text/plain;charset=utf-8";
$naglowek .= "Od: <$email>";

// Wysyłamy wiadomość
$sukces = mail($dokogo, $tytul, $wiadomosc, $naglowek);

// Przekierowywujemy na potwierdzenie
if ($sukces){
  echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.html\">";
}
else{
  echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.html\"><script> alert(\"Wysyłanie wiadomości nie powiodło się!\"); </script>";
}
?>

Z góry dziękuję za odpowiedzi :)
Co do formularzy bardzo polecam Ci stronę www.jotform.com. Odkąd zacząłem z niej korzystać nie uzywam już formularzy PHP tylko robię tam i ewentualnie umieszczam na stronie. Wtedy masz całkowite zabezpieczenie przed atakiem ponieważ formularz jest chroniony przez zewnętrzny serwer. Polecam wypróbować, można tam od razu podpiąć np. płatność paypalem.

Co do kupna vipa to zawsze możesz zastosować sklep który działa automatycznie i od razu daje użytkownikowi vipa w grze. Na necie jest tego pełno.
Raen napisał(a):Jest bardzo okrojony bo o wpisywane dane "dba" jQuery validate.
Podstawowy błąd. Zawsze musisz sprawdzić dane po stronie serwera, to co się dzieje od strony użytkownika to tylko dodatek.
Jako że tutaj wysyłasz tylko email to sprawdzenie poprawności danych (format nicku, emaila, czyli to samo co robi Twój dodatek jQuery) + http://php.net/manual/en/function.htmlentities.php powinno wystarczyć.
Nie wystarczy, bo da się zrobić np. XSS podając zamiast maila kod.
Tam gdzie można, warto rzutować. Poza tym do przejrzenia w manualu php funkcje:

- strip_tags
- htmlspecialchars
- htmlentities
Nie jestem pewien czy użyłem tego w stu procentach dobrze i czy to rozwiązanie ma sens ale nie przepuszcza wyrażeń html do wiadomości więc chyba jest okej :)

wygląda to jakoś tak:
Kod:
htmlspecialchars(strip_tags($_POST['nick_z_forum']));
Warto jeszcze nieco to zmodyfikować, choć to tylko opcjonalna zmiana:

Kod PHP:
htmlspecialchars(strip_tags($_POST['nick_z_forum']), ENT_QUOTES ENT_HTML5); 
Dodałem jeszcze funkcję trim() i od razu wykrywam wysyłanie pustych pól :)

lukasamd dziękuję bardzo za zainteresowanie tematem :) Jeszcze jedno pytanko, jak w najprostszy sposób ale skuteczny zabezpieczyć formularz przed spamem?
Na spam nie ma idealnej metody.
Sam polecam reCAPTCHA od Google:

https://www.google.com/recaptcha/
No to ja wciąż będę przy swoim i wciąż polecam JotForm. Lepiej mieć 2 rozwiązania niż jedno :) Co do spamu masz tam zabezpieczenie reCAPTCHA + dodatkowo możliwość ustalenia np. maksymalnie jednego wysłanego zgłoszenia na IP w ciągu 24h lub na email. I masa innych ciekawych opcji.

Co do customizacji możesz skopiować kod JS + HTML + CSS i dowolnie go edytować na stronie. Wtedy nawet nie widać że formularz jest z jakiejś zewnętrznej strony. No i oczywiście łatwość obsługi, robisz formularz i podpinasz. Dane przychodzą od razu na mail + na konto na stronie. Do wyboru do koloru.
Ecosse, nie chcę gotowych rozwiązań chcę sam coś pisać :)

lukasamd, sprawdzę :) Dzięki wielkie :)
Raen napisał(a):Jeszcze jedno pytanko, jak w najprostszy sposób ale skuteczny zabezpieczyć formularz przed spamem?

Może przepisanie ciągu liczb od tyłu? Tak jak ma sjp.pl. Przykładowo: Wpisz 24463213348 od tyłu (rozwiązanie: 84331236442)