[SOLVED] Ασφάλεια στην PHP Mail

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από ideal » 05 Οκτ 2011 02:10

Γειά σας,

Εχθές έλαβα ένα e-mail από την φόρμα επικοινωνίας της σελίδας μου που ήταν εντελώς άδειο.
Σαν αποστολέας φαινόταν ο server μου.

Το παράξενο είναι ότι έχω ορίσει να γίνεται έλεγχος σε κάθε πεδίο, ώστε να μην είναι ποτέ κενά, αλλά να πρέπει να συμπληρωθεί τουλάχιστον ένας χαρακτήρας (όχι κενό).
Εάν είναι κενό κάποιο πεδίο επιστρέφει στην ίδια σελίδα με υπόδειξη ότι υπάρχουν άδεια πεδία.
Παρόλα αυτά έλαβα μόνο την IP του αποστολέα και τίποτα άλλο...
Μπορεί κανείς να προτείνει που μπορεί να υπάρχει κενό;
Σκέφτομαι ότι ενδεχομένως να υπάρχουν προεκτάσεις σε αυτό...
Τελευταία επεξεργασία από το μέλος ideal την 07 Νοέμ 2011 14:36, έχει επεξεργασθεί 1 φορά συνολικά.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από gvre » 05 Οκτ 2011 10:18

Τον έλεγχο τον κάνεις με javascript ή με php; Αν τον κάνεις με php, στείλε τον κώδικα του script που στέλνει τα emails.

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από ideal » 05 Οκτ 2011 11:09

Σε γενικές γραμμές είναι αυτό:

<?php
$visitorip=$_SERVER['REMOTE_ADDR'];
include ("diaforafiltra.php");
$neoemail = myfilters($_POST['email_apostolea']);
$neoname = myfilters($_POST['name_apostolea']);
$neotelephone = myfilters($_POST['neotelephone_apostolea']);
$neomessage = myfilters($_POST['message_apostolea']);

if (!isset($neomessage)) { $notok=1;}
if ($neomessage == ""){ $notok=1;}

if (isset($neoemail) && !$neoemail == "") {
if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $neoemail)) { $notok=1;}
}

if (isset($notok)) {
//GoTo Failure Page
}else{

if ($neoemail== ""){
$neoemail="Χωρίς E-mail";
}

//Send E-mail to seller
mail($to, $subject, $message, $headers);

//GoTo Success Page

}

?>

Το περίεργο είναι ότι λαμβάνω e-mail που έχουν μεν την IP, αλλά μόνο αυτή και τίποτα άλλο... Ενώ φαίνεται ότι το μήνυμα μου το έχει στείλει ο server μου.
Τελευταία επεξεργασία από το μέλος ideal την 06 Οκτ 2011 13:55, έχει επεξεργασθεί 1 φορά συνολικά.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από gvre » 05 Οκτ 2011 11:38

Μπορεί να περιέχει κάποιο μη εκτυπώσιμο χαρακτήρα. Βάλε το μήνυμα μέσα σε '' για να δεις αν είναι πραγματικά κενό.

ps. Άσχετο, αλλά δες το manual της empty. Βολεύει σε αρκετές περιπτώσεις.
πχ το

Κώδικας: Επιλογή όλων

if &#40;isset&#40;$var&#41; && $var != ""&#41;
μπορεί να γραφτεί ως

Κώδικας: Επιλογή όλων

if &#40;!empty&#40;$var&#41;&#41;
ps2. Βάζε τον κώδικα σε code tags (5o κουμπί 1ης σειράς) για να διαβάζεται ευκολότερα.

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από ideal » 05 Οκτ 2011 15:45

Τα e-mail που μου έρχονται είναι εντελώς κενά...

Το πρόβλημά μου είναι ότι φαίνεται να μου στέλνει ο server μου μηνύματα.
Αν δεις παραπάνω, σε περίπτωση που κάποιος στείλει e-mail από τη φόρμα και δεν έχει συμπληρώσει το πεδίο του e-mail, φαίνεται ως αποστολέας "Χωρίς email".
Αυτό μου κάνει περίεργο...

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από gvre » 05 Οκτ 2011 15:53

Στείλε αν θες ολόκληρο το script που στέλνει email και το περιεχόμενο της συνάρτησης myfilters.

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από ideal » 06 Οκτ 2011 13:54

Αυτός είναι όλος ο κώδικας...
Στα φίλτρα έχω βάλει στην ουσία κάποια function τα οποία καθαρίζουν τις μεταβλητές. Είναι τα τυπικά που χρησιμοποιούν όλοι (addslashes κλπ), απλά για να μπορώ να τα χρησιμοποιώ σε διάφορα site. Δεν παίζει κάποιο ρόλο.
Πολύ καλύτερη η empty που προτείνεις...Πιο σωστή δουλειά.
Από ότι είδα, μπορεί να στείλει κάποιος "κενό" μήνυμα, αλλά πάλι γράφει σαν αποστολέας "Χωρίς E-mail" και όχι τον σέρβερ μου. Εμένα εκεί είναι ο προβληματισμός μου...

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από gvre » 06 Οκτ 2011 14:05

Μπορεί ο αποστολέας να χρησιμοποιεί μη εκτυπώσιμους χαρακτήρες. Αποθήκευσε το κείμενο σε ένα αρχείο και έλεγξέ το με την hexdump αν έχεις κάποιο unixοειδές ή με κάποιο hexdump για windows.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από gvre » 06 Οκτ 2011 14:12

Καλό είναι επίσης να μη χρησιμοποιείς τη mail() αλλά κάποιο library όπως πχ το Swift Mailer

Άβαταρ μέλους
ideal
Δημοσιεύσεις: 302
Εγγραφή: 12 Φεβ 2011 16:26

[SOLVED] Ασφάλεια στην PHP Mail

Δημοσίευση από ideal » 07 Νοέμ 2011 14:35

Τελικά είχα κάνει ανοησία...
Είχα μία άλλη φόρμα επικοινωνίας την οποία είχα ξεχάσει και δεν είχα φιλτράρει.
Πάντως αναβάθμισα τις φόρμες μου με όλα τα παραπάνω σχόλια.
Θα δοκιμάσω να αλλάξω και τη mail().
Ευχαριστώ!

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες