Avatar billede zyxep Nybegynder
09. januar 2007 - 11:31 Der er 19 kommentarer og
3 løsninger

sikker email validation

hey..

jeg er ved at skal lave en kontakt formular til min hjemmeside og jeg vil nok kun have 4 felter man skal ud fylde nemlig navn,emne,email og så beskeden.

den formular blir så sendt til min email adresse når den blir submittet men jeg skal have noget validering/sikkerhed på formularen så jeg slipper for spammere og den slags.

jeg har overvejet at bruge Ajax til at validere med men ved ikke om det er godt nok..

har i nogen foreslag til hvad jeg kan lave for at få bedste sikkerhed. ?
Avatar billede olebole Juniormester
09. januar 2007 - 11:41 #1
<ole>

Om du så validerer nok så meget, undgår du ikke spammere. Spammere har ikke så meget med sikkerhed at gøre  =)

/mvh
</bole>
Avatar billede zyxep Nybegynder
09. januar 2007 - 11:49 #2
nej oka.. ;D

men ved ik hva man kan kalde det så .. floodere? :/ ej ved ik.. vil bare ik have folk skal sende 10 emails på 2 min med alt muligt reklame osv osv.

en af mine venner har lavet hvor den sætter en cookie når han submitter formularen og så blir den fjernet igen efter 2 timer.. men det jo simpelt nok at fjerne den cookie jo så der er der ik så meget sikkerhed.
Avatar billede coderdk Praktikant
09. januar 2007 - 12:01 #3
Avatar billede zyxep Nybegynder
09. januar 2007 - 12:06 #4
nej det har jeg ik.
Avatar billede zyxep Nybegynder
09. januar 2007 - 12:07 #5
ahh har brugt CAPTCHA  men som min lærer på min uddannelse sagde.. det er dobbel abejde for brugeren at skal taste de tal/bogstaver ind
Avatar billede theprofessor Nybegynder
09. januar 2007 - 12:10 #6
der findes flere metoder til at verificere email afsender. F.eks. yahoomail bruger "domain keys" og MSN hotmail/outlook/messenger bruger .NET active directory (ADO).  Desuden skulle du kunne frasortere mail fra "anonymous servers" og spammere, osv.
Avatar billede zyxep Nybegynder
09. januar 2007 - 12:11 #7
theprofessor >
det vil sige når jeg skal bruge mail() i php skal jeg sætte noget op på serveren så den sortere alt det fra??

for lige nu bruger den bare php.ini std config..
Avatar billede kalp Novice
09. januar 2007 - 12:39 #8
zyxep >>

ved ikke om det du tænker på er sådan noget som at man indtaster "asdnasdoas" som sin mail f.eks.. og det vil du gerne kunne undgå bliver sendt til dig da det er useriøst?

du kan i hvertfald validere om det er en korrekt mail på denne måde

<?php$email = "someone@example.com";
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$",$email))

// send mail
}
else

echo "Du skal indtaste en rigtig email adresse!";
}
?>
Avatar billede zyxep Nybegynder
09. januar 2007 - 12:42 #9
kalp >>

har os tænkt mig at validere email feltet.
men man kan jo sagtens skrive f.eks gedeting@gfhgfhf.cohgh

så kunne man jo bare validere lidt bedr
Avatar billede coderdk Praktikant
09. januar 2007 - 12:47 #10
Evt prøv denne:

    function isValidEmail($address) 
    { 
        $address = trim($address);
        list(,$host) = split('@',$address);
        if (!preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+' . // username
            '@' .                                  // 'at'
            '([-0-9A-Z]+\.)+' .                    // domain name(s)
            '([0-9A-Z]){1,6}\.?$/i',                // tld
            $address)) 
        {
            if (preg_match('/^\[(.*)\]$/',$host,$regs))
            {
                $ip = explode('.',$regs[1]);
                $is_ip = 1;
                foreach ($ip as $byte)
                {
                    if (!is_numeric($byte))
                    {
                        $is_ip = 0;
                        break;
                    }
                }
                if ($is_ip)
                {
                    return true;
                }
            }
            return false;
        }
        $host .= '.'; // DNS style address
        return (getmxrr($host,$mxrecords) || checkdnsrr($host,'ANY'));
    }
Avatar billede zyxep Nybegynder
09. januar 2007 - 13:20 #11
hmm er det bedst at validere med client scriptet (javascript) eller php (server side) ???
Avatar billede olebole Juniormester
09. januar 2007 - 13:34 #12
Der er _absolut_ ingen sikkerhed i JavaScript-valideringer - de foretages kun af hensyn til brugervenlighed  =)
Avatar billede zyxep Nybegynder
09. januar 2007 - 13:38 #13
ja ok..
så det her ville være fint tjek om folk skriver i felterne

if (empty($_POST["navn"]) )
    {
        $message1 = "Du mangler at udfylde dit navn";
    }
    elseif (empty($_POST["emne"]) )
    {
        $message3 = "Du mangler at skrive et emne";
    }
    elseif (empty($_POST["besked"]) )
    {
        $message4 = "Du mangler at skrive en besked";
    }
    elseif (($_SESSION['security_code'] == $_POST['security']) && (!empty($_SESSION['security_code'])) )
    {
        // godkendt
    }
    else
    {
        $message5 = "Du mangler at indtaste sikkerheds koden";
    }

jeg har så printet alle $message ud ved hvert felt :)
Avatar billede kalp Novice
09. januar 2007 - 16:45 #14
synes der mangler email delen i det der
Avatar billede zyxep Nybegynder
09. januar 2007 - 17:31 #15
det her blev hele min validering

session_start();
if(isset($_POST["send"]))
{
    function isValidEmail($address)
    {
        $address = trim($address);
        list(,$host) = split('@',$address);
        if (!preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+' . // username
        '@' .                                  // 'at'
        '([-0-9A-Z]+\.)+' .                    // domain name(s)
        '([0-9A-Z]){1,6}\.?$/i',                // tld
        $address))
        {
            if (preg_match('/^\[(.*)\]$/',$host,$regs))
            {
                $ip = explode('.',$regs[1]);
                $is_ip = 1;
                foreach ($ip as $byte)
                {
                    if (!is_numeric($byte))
                    {
                        $is_ip = 0;
                        break;
                    }
                }
                if ($is_ip)
                {
                    return true;
                }
            }
            return false;
        }
        $host .= '.'; // DNS style address
        return (getmxrr($host,$mxrecords) || checkdnsrr($host,'ANY'));
    }
    if (empty($_POST["navn"]) )
    {
        $message1 = "Du mangler at udfylde dit navn";
    }
    elseif (is_numeric($_POST["navn"]) )
    {
        $message1 = "Dit navn kan ikke indholde tal";
    }
    elseif (empty($_POST["email"]) )
    {
        $message2 = "Du mangler at indtaste din email";
    }
    elseif (!isValidEmail($_POST["email"]) )
    {
        $message2 = "Din email er ik valid prøv igen";
    }
    elseif (empty($_POST["emne"]) )
    {
        $message3 = "Du mangler at skrive et emne";
    }
    elseif (is_numeric($_POST["emne"]) )
    {
        $message3 = "Dit emne kan ikke indholde tal";
    }
    elseif (empty($_POST["besked"]) )
    {
        $message4 = "Du mangler at skrive en besked";
    }
    elseif (($_SESSION['security_code'] == $_POST['security']) && (!empty($_SESSION['security_code'])) )
    {
        $navn = htmlentities($_POST["navn"]);
        $emne = htmlentities($_POST["emne"]);
        $besked = htmlentities($_POST["besked"]);
        $besked .= nl2br($besked);
        mail("zyxep.net@gmail.com", "zyxep.net :: " . $emne, $besked, "From: zyxep.net :: " . $navn . "<" . $_POST["email"] . ">");
        $SlutBesked = "Din email er nu sendt afsted, og jeg vil svare hurtigst muligt";
    }
    else
    {
        $message5 = "Du mangler at indtaste sikkerheds koden";
    }
}

og den virker godt :D

så ved ikke hvem der skal have points
Avatar billede kalp Novice
09. januar 2007 - 18:22 #16
Du bestemmer selv hvem der skal have point.. du kan evt. fordele til flere.
Jeg behøver ingen.

Angående din sidste post så er det jo fint nok til det formål du gerne vil have... går ud fra der ikke var så meget af alt det vi ser nu og det eneste du ville opnå var noget alá det du har lavet bare at tage det værste:)
Avatar billede zyxep Nybegynder
09. januar 2007 - 18:52 #17
tjae

det virker til at være slam.. men virker som det nu skal..

ved ikke lige med de points kan ikk bruge theprofessor's svar til noget..
Avatar billede kalp Novice
09. januar 2007 - 19:22 #18
zyxep >> det er nemt... hvis du ikke kunne bruge nogle af svarende fra de øvrige deltagere så ligger du selv et svar og lukker spørgsmålet..

og ellers må du jo se hvilke indlæg du kunne bruge til noget og bede de deltagere ligge et svar
Avatar billede zyxep Nybegynder
09. januar 2007 - 19:29 #19
jeg kunne bruge coderdk 's funktion til email tjek.. den er nice..

laver lige som svar hvis det bare skal lukkes
Avatar billede coderdk Praktikant
09. januar 2007 - 20:48 #20
(c: Tag de fleste af pointene selv! :-D
Avatar billede zyxep Nybegynder
09. januar 2007 - 20:50 #21
godt nok ? :D
Avatar billede coderdk Praktikant
09. januar 2007 - 21:09 #22
Fint! :) Funktionen var ret gammel, så jeg reviderede den lige - Det blev den kortere af:

    function isValidEmail($address) 
    { 
        $address = trim($address);
        list(,$host) = split('@',$address);
        if (!preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+' . // username
            '@' .                                  // 'at'
            '([-0-9A-Z]+\.)+' .                    // domain name(s)
            '([0-9A-Z]){1,6}\.?$/i',                // tld
            $address)) 
        {
            // Return true if it's an IP
            return preg_match( "/^\[(\d{1,3}\.){3}\d{1,3}\]$/", $host );
        }
        $host .= '.'; // DNS style address
        return (getmxrr($host,$mxrecords) || checkdnsrr($host,'ANY'));
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester