Onveilig script-hulp
Nu ben ik geen held op PHP gebied en zit nu voor het volgende euvel:
Jaren geleden heb ik een keer een php script aangepast dat gekoppeld zat aan een form. Nu is deze verouderd en niet veilig meer volgens mijn host en mag ik deze niet meer gebruiken.
Na het invullen van het formulier gaat er 1 mail naar de invuller en 1 mailtje naar mij.
het PHP bestandje :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
$Bank = $_POST['Bank'];
$Opnaam = $_POST['Opnaam'];
$email = $_POST['e_mail'];
$my_email = $_POST['my_email'];
$my_subject = $_POST['my_subject'];
$thanks_text = $_POST['thanks_text'];
$mail_name = $_POST['mail_name'];
$Reknum = $_POST['Reknum'];
$Gebdat = $_POST['Gebdat'];
$Woonplaats = $_POST['Woonplaats'];
$Postcode = $_POST['Postcode'];
$Huisnummer = $_POST['Huisnummer'];
$Straat = $_POST['Straat'];
$Geslacht = $_POST['Geslacht'];
$Tussenvoeg = $_POST['Tussenvoeg'];
$Achternaam = $_POST['Achternaam'];
$Voornaam = $_POST['Voornaam'];
$reply_subject = $_POST['reply_subject'];
$thanks_text = $_POST['thanks_text'];
if ($email != ""){
$header_info = "MIME-Version: 1.0\r\n";
$header_info .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header_info .= "From: ".$mail_name." <".$my_email.">";
mail ($email,$reply_subject,$thanks_text,$header_info);
$header_info = "MIME-Version: 1.0\r\n";
$header_info .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header_info .= "From: ".$name." <".$email.">";
$message = stripslashes($message);
mail ($my_email, $my_subject,
"De volgende reservering is er gemaakt op uw website:<br>
Voornaam: $Voornaam<br>
Achternaam: $Achternaam<br>
Tussenvoegsel: $Tussenvoeg<br>
Geslacht: $Geslacht<br>
E-mail: $email<br>
Staat en Huisnummer: $Straat <br>
Postcode: $Postcode <br>
Plaats: $Woonplaats<br>
Aantal 1 persoonskamers: $Reknum<br>
Aantal 2 Persoonskamers: $Opnaam<br>
Totaal aantal personen: $Abbo<br>
Aankomst datum: $Gebdat<br>
Aantal overnachtingen: $Bank<br>
Opmerkingen of vragen: $Huisnummer <br>
<br><br><br>
<br>
"
, $header_info);
}
?>
$Bank = $_POST['Bank'];
$Opnaam = $_POST['Opnaam'];
$email = $_POST['e_mail'];
$my_email = $_POST['my_email'];
$my_subject = $_POST['my_subject'];
$thanks_text = $_POST['thanks_text'];
$mail_name = $_POST['mail_name'];
$Reknum = $_POST['Reknum'];
$Gebdat = $_POST['Gebdat'];
$Woonplaats = $_POST['Woonplaats'];
$Postcode = $_POST['Postcode'];
$Huisnummer = $_POST['Huisnummer'];
$Straat = $_POST['Straat'];
$Geslacht = $_POST['Geslacht'];
$Tussenvoeg = $_POST['Tussenvoeg'];
$Achternaam = $_POST['Achternaam'];
$Voornaam = $_POST['Voornaam'];
$reply_subject = $_POST['reply_subject'];
$thanks_text = $_POST['thanks_text'];
if ($email != ""){
$header_info = "MIME-Version: 1.0\r\n";
$header_info .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header_info .= "From: ".$mail_name." <".$my_email.">";
mail ($email,$reply_subject,$thanks_text,$header_info);
$header_info = "MIME-Version: 1.0\r\n";
$header_info .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header_info .= "From: ".$name." <".$email.">";
$message = stripslashes($message);
mail ($my_email, $my_subject,
"De volgende reservering is er gemaakt op uw website:<br>
Voornaam: $Voornaam<br>
Achternaam: $Achternaam<br>
Tussenvoegsel: $Tussenvoeg<br>
Geslacht: $Geslacht<br>
E-mail: $email<br>
Staat en Huisnummer: $Straat <br>
Postcode: $Postcode <br>
Plaats: $Woonplaats<br>
Aantal 1 persoonskamers: $Reknum<br>
Aantal 2 Persoonskamers: $Opnaam<br>
Totaal aantal personen: $Abbo<br>
Aankomst datum: $Gebdat<br>
Aantal overnachtingen: $Bank<br>
Opmerkingen of vragen: $Huisnummer <br>
<br><br><br>
<br>
"
, $header_info);
}
?>
aangezien ik zeer beperkt php kennis heb vraag ik jullie, hoe krijg ik dit bovenstaande "veilig"?
- Regel 3 tot en met 21 zijn onnodig. Variabelen kopieren kost alleen meer tijd en het is van de rest geen verschil.
- Bekijk of de velden zijn ingevuld, door isset of empty te gebruiken.
- Variabelen moeten buiten quotes, dus bijv. 'Voornaam: $Voornaam<br>' is fout en dat moet zijn: 'Voornaam: '.$Voornaam.'<br>'
- Mail injection is mogelijk
Het komt er op neer dat header-injection mogelijk is, waarmee mensen kunnen spammen. Wat ik je kan aanraden is om een mail-class te gebruiken zoals phpMailer of Swiftmailer.
Als ik nog een opmerking mag geven: Het overschrijven van variabelen in de regelnummers 3 t/m 21 is gewoon overbodig. Je kan de $_POST variabelen altijd direct in je script gebruiken.
Wouter J op 28/04/2011 11:03:15:
Even wat punten:
- Regel 3 tot en met 21 zijn onnodig. Variabelen kopieren kost alleen meer tijd en het is van de rest geen verschil.
- Regel 3 tot en met 21 zijn onnodig. Variabelen kopieren kost alleen meer tijd en het is van de rest geen verschil.
Oke, maar zoals het er staat is het niet "onveilig" ??
Het formulier zelf (dat gebouwd met flash is) controleert op lege velden.
Quote:
- Variabelen moeten buiten quotes, dus bijv. 'Voornaam: $Voornaam<br>' is fout en dat moet zijn: 'Voornaam: '.$Voornaam.'<br>'
oke, ik ga dit aanpassen..
Quote:
- Mail injection is mogelijk
que?
ik ga even google raadplegen op mail injection
Gewijzigd op 28/04/2011 11:17:32 door Co Vanenwijk
Quote:
Oke, maar zoals het er staat is het niet "onveilig" ??
Is alleen maar overbodig..
Quote:
Het formulier zelf (dat gebouwd met flash is) controleert op lege velden.
En daar dienen isset() en empty() voor.
Quote:
ik ga even google raadplegen op mail injection
Kort samengevat komt het er op neer dat buitenstaanders zelf mail-headers kunnen toevoegen en aanpassen door deze in je bericht-veld in te vullen. Zo ken er een hele spamrun naar anderen gestart worden vanaf je contactformulier.
Injection dmv:
[email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected]
invoeren in het emailveld.
ik heb de bovenstaande email adressen veranderd door emailadressen van mijzelf.
Echter krijg ik ze niet binnen, dus ga er vanuit dat ze niet verzonden worden.
in het flash formulier staat ook het volgende:
================
} else if (!e_mail.length || e_mail.indexOf("@") == -1 || e_mail.indexOf(".") == -1) {
result = "Vul een geldig Email adres in";
================
zou dit voldoende zijn?
De Support van Mijndomein zegt alleen maar dat hij onveilig is... niet waar het hem inzit...
:@ ;)
Je moet gewoon een goede mailclass zoals phpMailer of SwiftMailer gebruiken.
Co Vanenwijk op 28/04/2011 11:49:21:
Toch aandringen bij je hosting support om meer informatie te krijgen. Pas dan kan je gericht oplossen naar hun eisen/wensen. Nu blijft het gissen en wellicht hebben zij een verkeerd idee over bepaalde code. Het zal best wel mail-injection zijn maar laat ze dat dan even duidelijk zeggen ipv het domme en nietzeggende "niet veilig"De Support van Mijndomein zegt alleen maar dat hij onveilig is... niet waar het hem inzit...
Gewijzigd op 28/04/2011 16:06:56 door Dirk Renes