WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Något är fel med vad? (https://www.wn.se/forum/showthread.php?t=30535)

ztream 2008-07-14 17:44

www.php.net/mail

Magnus_A 2008-07-14 20:56

PHPMailer, fast det blir nog för svårt. Fixat säkerhetshålen ännu?

tartareandesire 2008-07-14 21:24

Citat:

Originally posted by eliasson@Jul 14 2008, 15:37
mail(To, Subject, Body, Headers);

Det som gäller enligt eliassons exempel är:

To: adressen dit mailet ska skickas
Subject: Titel / rubrik för mailet
Body: Meddelandet (har du en massa variabler enligt ditt exempel så måste du sätta ihop allt till en variabel som innehåller HELA meddelandet)
Headers: från-adress, teckenkodning etc. (se beskrivning av mail-funktionen i länk ovan)

Som flera redan påpekat så kan vem som helst i nuläget använda ditt kontaktformulär för att skicka spam till hela världen om de så önskar, med de begränsningar eventuellt webbhotell har.

victor- 2008-07-15 00:48

Citat:

Originally posted by Jonathan P@Jul 14 2008, 16:45
Ändra följande...
Kod:

if (mail($to, $message, $persnr, $adress, $postnr, $ort, $from, $tel, $bild, $antal, $format, $agree ,"From: $name <$from>"))
...till...
Kod:

if (mail($to, "From: $name <$from>", "$message, $persnr, $adress, $postnr, $ort, $from, $tel, $bild, $antal, $format, $agree"))

Ändra följande...
Kod:

if (mail($to, "From: $name <$from>", "$message, $persnr, $adress, $postnr, $ort, $from, $tel, $bild, $antal, $format, $agree"))
...till...
Kod:

if (mail($to, "HEJSAN!!!!!11 från $name <$from>", "$message, $persnr, $adress, $postnr, $ort, $from, $tel, $bild, $antal, $format, $agree"), "From: En Apa i Pyjamas!")

Davve 2008-07-15 04:52

Tack för alla svar, nu fungerar det korrekt. Ni som påpekar säkerhetshålen skulle tillföra så mycket mer genom att komma med exempel på hur man löser det istället för att förlöjliga det. några av oss även här haft annat för sig i sin uppväxt än att sitta 20 timmar framför burken varje dag :)=

EmilIsberg 2008-07-15 10:52

Det jag skulle göra är att skriva skriptet på ett något annat sätt.

Kod:

<?php

// http://www.phpit.net/code/valid-email/
function valid_email($email) {
 // First, we check that there's one @ symbol, and that the lengths are right
 if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
  // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
  return false;
 }
 // Split it into sections to make life easier
 $email_array = explode("@", $email);
 $local_array = explode(".", $email_array[0]);
 for ($i = 0; $i < sizeof($local_array); $i++) {
  if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\|\")]{0,62}\"))$", $local_array[$i])) {
  return false;
  }
 }
 if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
  $domain_array = explode(".", $email_array[1]);
  if (sizeof($domain_array) < 2) {
    return false; // Not enough parts to domain
  }
  for ($i = 0; $i < sizeof($domain_array); $i++) {
  if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
    return false;
  }
  }
 }
 return true;
}

// liten egen hjälpfunktion
function pvar($var)
{
 $got = $_POST[$var];
 // jag använder htmlentities som man kan läsa om på http://se2.php.net/htmlentities
 $got = htmlentities($got);

 // alternativt borde man kunna använda något av följande
 // http://se.php.net/manual/en/function.strip-tags.php
 // http://se.php.net/manual/en/function.htmlspecialchars-decode.php
 // http://se.php.net/manual/en/function.addslashes.php
 return $got;
}

$to = "[email protected]";
$subj = "Hemsidesinfo";
$from = pvar("email");
$fname = pvar("name");
$msg = "<b>Personnummer:</b> ". pvar("persnr")."\n".
"<b>Namn:</b> ". pvar("name")."\n".
"<b>Adress:</b> ". pvar("adress")."\n".
"<b>Postnummer:</b> ". pvar("postnr")."\n".
"<b>Ort:</b> ". pvar("ort")."\n".
"<b>Epost:</b> ". pvar("email")."\n".
"<b>Telefon:</b> ". pvar("tel")."\n".
"<b>Bild:</b> ". pvar("bild")."\n".
"<b>Antal:</b> ". pvar("antal")."\n".
"<b>Format:</b> ". pvar("format")."\n".
"<b>Meddelande:</b> ". pvar("message")."\n".
"<b>Godkänd:</b> ". pvar("agree")."\n".
"\n";

if (!valid_email($from))
 echo "<h2>Felaktigt formulärdata.</h2>Kontrollera att uppgifterna är korrekt ifyllda.";
elseif (mail($to, $subj, wordwrap(strip_tags($msg),70), "From: \"$fname\" <$from>")
 echo nl2br("<h2>Din beställning har nu skickats till oss! Kopian på beställningen ser du nedan, är det något som inte stämmer, kontakta oss snarast!</h2>\n\n$msg");
else
 echo "<h2>Det gick inte att skicka ditt meddelande.</h2> Var god försök senare.";

?>

Jag gjorde följande:
  • "Presonnummer" och "Kompian"
  • Visa samma sak som skickas (bra rekommendation generellt och minskar missförstånd vid felsökning)
  • Få överskådliga variabler
  • Undvik att skriva ut e-postadressen meddelandet skickas till (onödigt för besökaren som skickat formuläret plus att det kan användas för skräppost)
  • Undvik att upprepa kod (enklare att ändra och lägga till om man använder egna hjälpfunktioner)
  • Försök att validera att man faktiskt får något som liknar en e-postadress.
  • Undvik att "lita" på det kunden skickar. (http://blogg.loopia.se/?p=68)
  • Använd example.org (testdomän) istället för adress.se (ägs av PMG Media Group AB)
  • Ange en ärenderad som är specifik för just detta formulär (gör det enklare att särskilja från annan e-post och formulär)
  • Radbryt om rader överstiger 70 tecken (http://se.php.net/manual/en/function.wordwrap.php)

Om du använder dig av UNIX-server hos oss eller någon annan bör du dessutom lägga till ett fjärde fält till mail()-funktionen:
Kod:

elseif (mail($to, $subj, strip_tags($msg), "From: \"$fname\" <$from>","-f$from")
Notera dock att jag inte på något sätt har testat ovanstående skript och att inget ansvar tas för eventuella fel i skriptet.

tartareandesire 2008-07-15 12:24

Citat:

Originally posted by Davve@Jul 15 2008, 04:52
Tack för alla svar, nu fungerar det korrekt. Ni som påpekar säkerhetshålen skulle tillföra så mycket mer genom att komma med exempel på hur man löser det istället för att förlöjliga det. några av oss även här haft annat för sig i sin uppväxt än att sitta 20 timmar framför burken varje dag =

Om det är någon som förlöjligar någon så är det du nu.... Jag satt inte mycket vid datorn alls under min uppväxt om det nu har någon betydelse.

Till Emils kod kan tilläggas att teckenkodning bör skickas med till htmlentities om man inte använder ISO-8859-1 (förslagsvis UTF-8). Htmlentities är inte helt nödvändig dock utan det går som han antyder att lösa på andra sätt.

För övrigt så säger väl ztream det nedan som flera hintat om på mindre väl valda sätt.

ztream 2008-07-15 12:27

Poängen som många gör är nog att oavsett hur lat man är, så borde man läsa manualen innan man ber professionella webmasters lösa ens problem gratis.

Citat:

Originally posted by Davve@Jul 15 2008, 04:52
Tack för alla svar, nu fungerar det korrekt. Ni som påpekar säkerhetshålen skulle tillföra så mycket mer genom att komma med exempel på hur man löser det istället för att förlöjliga det. några av oss även här haft annat för sig i sin uppväxt än att sitta 20 timmar framför burken varje dag =


digi 2008-07-15 12:29

Citat:

Originally posted by Davve@Jul 15 2008, 04:52
Tack för alla svar, nu fungerar det korrekt. Ni som påpekar säkerhetshålen skulle tillföra så mycket mer genom att komma med exempel på hur man löser det istället för att förlöjliga det. några av oss även här haft annat för sig i sin uppväxt än att sitta 20 timmar framför burken varje dag
Tror du inte folk tappar lusten att hjälpa dig när du uttrycker dig sådär?
Även om det inte var illa menat så låter det inte vidare trevligt, hade jag kunnat PHP hade jag nog gjort allt annat än hjälpt dig nu.

edit: typo

FredrikNas 2008-07-15 13:08

Førvisso håller jag med dig davve i att vill man ge kritik kan det ju också høra till god sed att åtminstone ge dig ett tips om hur du går vidare (annars ær man væl bara elak? ;)), (jag tycker absolut inte, under några omstændigheter att folk ska ge dig kod, det lær du dig ingenting av.) Hur har du tænkt kunna koda i php om du inte kan php (och inte tycks villig att læra dig? måste jag också fråga mig? du kan ju inte mena att du ska førlita dig på att andra skriver koden gratis åt dig før att du frågar på wn.se? Vill du jobba i php så finns det vældigt många bra bøcker att læsa jag kan rekomedera dig flera stycken som skulle passa och ge dig en basic insættning i php, som du behøver før att skriva ett mailformulær.

Sen kommentarer om hur mycket folk hær inne har spenderat framfør datorn i barndomsdagar ær ju oerhørt onødigt, speciellt då du vænder dig till dessa personer før hjælp? Vem tror du vill hjælpa dig næsta gång ?

Edit: Type-o


Alla tider är GMT +2. Klockan är nu 02:06.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson