Hallo,
Is het nodig om de invoer voor PHP's mail() functie te controleren op
onveilige code of doet de mail-functie dat voor je?
Arjen Haayman
Likes: 0
Hallo,
Is het nodig om de invoer voor PHP's mail() functie te controleren op
onveilige code of doet de mail-functie dat voor je?
Arjen Haayman
Arjen Haayman wrote:
> Hallo,
>
> Is het nodig om de invoer voor PHP's mail() functie te controleren op
> onveilige code of doet de mail-functie dat voor je?
hmm, misschien is m'n vraag niet duidelijk genoeg.
Is deze code veilig?
$naam = $_REQUEST[ 'naam'];
$email = $_REQUEST[ 'email'];
$onderwerp = $_REQUEST[ 'onderwerp'];
$bericht = $_REQUEST[ 'bericht'];
function send_mail()
{
global $naam, $onderwerp, $email, $bericht;
mail( "ik@mijndomein.nl",
"[vraag] $onderwerp",
$bericht,
"From: $naam <$email>\n");
}
--
Arjen Haayman
-- cogito ergo bicyclo --
Arjen Haayman <ahaayman@deadspam.com>, you wrote on Tue, 05 Oct 2004
21:48:40 +0200:
>Arjen Haayman wrote:
>> Hallo,
>>
>> Is het nodig om de invoer voor PHP's mail() functie te controleren op
>> onveilige code of doet de mail-functie dat voor je?
>hmm, misschien is m'n vraag niet duidelijk genoeg.
>Is deze code veilig?
>
>$naam = $_REQUEST[ 'naam'];
>$email = $_REQUEST[ 'email'];
>$onderwerp = $_REQUEST[ 'onderwerp'];
>$bericht = $_REQUEST[ 'bericht'];
>
>function send_mail()
>{
> global $naam, $onderwerp, $email, $bericht;
> mail( "ik@mijndomein.nl",
> "[vraag] $onderwerp",
> $bericht,
> "From: $naam <$email>\n");
>}
Tenzij anders vermeld in de handleiding, zou ik er nooit vanuit gaan
dat een PHP-functie 'veilig' is. In dit geval zou ik dus zeker de
$_REQUEST-waarden controleren.
--
Wel zie ik het betere en prijs het;
toch jaag ik het slechtere na
> > Is het nodig om de invoer voor PHP's mail() functie te controleren op
> > onveilige code of doet de mail-functie dat voor je?
> hmm, misschien is m'n vraag niet duidelijk genoeg.
> Is deze code veilig?
> $naam = $_REQUEST[ 'naam'];
> $email = $_REQUEST[ 'email'];
> $onderwerp = $_REQUEST[ 'onderwerp'];
> $bericht = $_REQUEST[ 'bericht'];
>
> function send_mail()
> {
> global $naam, $onderwerp, $email, $bericht;
> mail( "ik@mijndomein.nl",
> "[vraag] $onderwerp",
> $bericht,
> "From: $naam <$email>\n");
> }
Naast de vele opmerkingen die je waarschijnlijk zal krijgen en die veel
zinniger zullen zijn dan die van mij...ik zou er ook even een referrer check
in bouwen. Anders kan iedereen mailen via dat script. Dus iets als:
if($waar_kom_je_vandaan != mijn_eigen_server_)
{
hoepel op
}
else
{
mail versturen
}
Mazzel,
Matthijs
>
> --
> Arjen Haayman
> -- cogito ergo bicyclo --
Op Tue, 05 Oct 2004 22:12:38 +0200, schreef Branko Collin:
> Tenzij anders vermeld in de handleiding, zou ik er nooit vanuit gaan
> dat een PHP-functie 'veilig' is. In dit geval zou ik dus zeker de
> $_REQUEST-waarden controleren.
Inderdaad, in dit geval zeker omdat het requestwaarden zijn, maar als je
die maar controleert dan lijkt me de aanroep van de functie beslist wel
veilig.
Branko Collin <collin@xs4all.nl>, you wrote on Tue, 05 Oct 2004
22:12:38 +0200:
>Tenzij anders vermeld in de handleiding, zou ik er nooit vanuit gaan
>dat een PHP-functie 'veilig' is.
Euh, dat moet natuurlijk "Tenzij vermeld" zijn. :-\
--
Wel zie ik het betere en prijs het;
toch jaag ik het slechtere na
Matthijs de Z wrote:
>>>Is het nodig om de invoer voor PHP's mail() functie te controleren op
>>>onveilige code of doet de mail-functie dat voor je?
>>
>>hmm, misschien is m'n vraag niet duidelijk genoeg.
>>Is deze code veilig?
>
>
>
>>$naam = $_REQUEST[ 'naam'];
>>$email = $_REQUEST[ 'email'];
>>$onderwerp = $_REQUEST[ 'onderwerp'];
>>$bericht = $_REQUEST[ 'bericht'];
>>
>>function send_mail()
>>{
>>global $naam, $onderwerp, $email, $bericht;
>>mail( "ik@mijndomein.nl",
>>"[vraag] $onderwerp",
>>$bericht,
>>"From: $naam <$email>\n");
>>}
>
>
> Naast de vele opmerkingen die je waarschijnlijk zal krijgen en die veel
> zinniger zullen zijn dan die van mij...ik zou er ook even een referrer check
> in bouwen. Anders kan iedereen mailen via dat script. Dus iets als:
>
> if($waar_kom_je_vandaan != mijn_eigen_server_)
> {
> hoepel op
> }
> else
> {
> mail versturen
> }
>
Aangezien ik zelf de 'To: ' invul, denk ik dat dit script voor anderen
niet interessant is.
--
Arjen Haayman
-- cogito ergo bicyclo --
nmp wrote:
>>Tenzij anders vermeld in de handleiding, zou ik er nooit vanuit gaan
>>dat een PHP-functie 'veilig' is. In dit geval zou ik dus zeker de
>>$_REQUEST-waarden controleren.
>
>
> Inderdaad, in dit geval zeker omdat het requestwaarden zijn, maar als je
> die maar controleert dan lijkt me de aanroep van de functie beslist wel
> veilig.
Welke controles zal ik uitvoeren?
Het veiligst is om alleen een set toegestane karakters door te laten,
maar welke set zou dat dan moeten zijn?
Weet iemand hoe je mail() kunt misbruiken? (de server gebruikt sendmail).
function send_mail()
{
global $naam, $onderwerp, $email, $bericht;
mail( "ik@mijndomein.nl", #<--- geen exploit mogelijk??
"[vraag] $onderwerp", #<--- idem?
$bericht, #<--- idem?
"From: $naam <$email>\n"); /* <---- Mogelijk dat hier extra
headers aan toegevoegd kunnen worden? Hoe te voorkomen? */
}
--
Arjen Haayman
-- cogito ergo bicyclo --
Matthijs de Z:
>>Is het nodig om de invoer voor PHP's mail() functie te controleren op
>>onveilige code of doet de mail-functie dat voor je?
[...]
>Naast de vele opmerkingen die je waarschijnlijk zal krijgen en die veel
>zinniger zullen zijn dan die van mij...ik zou er ook even een referrer check
>in bouwen. Anders kan iedereen mailen via dat script.
Dit waag ik tegen te spreken. De referer kan client-side vervalst worden
en is dus van nul en generlei waarde als het om veiligheid gaat.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Branko Collin:
>>Tenzij vermeld in de handleiding, zou ik er nooit vanuit gaan
>>dat een PHP-functie 'veilig' is.
>
>Euh, dat moet natuurlijk "Tenzij vermeld" zijn. :-\
En zelfs dan zou ik er niet vanuit gaan, want ik heb weinig vertrouwen in
de PHP-manual.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Arjen Haayman <ahaayman@deadspam.com> wrote:
> Is deze code veilig?
>
> $naam = $_REQUEST[ 'naam'];
> $email = $_REQUEST[ 'email'];
> $onderwerp = $_REQUEST[ 'onderwerp'];
> $bericht = $_REQUEST[ 'bericht'];
>
> function send_mail()
> {
> global $naam, $onderwerp, $email, $bericht;
Hmmm, bad practice! Waarom op deze manier? Een copie van een superglobal
naar een variabele met de global scope!
> mail( "ik@mijndomein.nl",
> "[vraag] $onderwerp",
> $bericht,
> "From: $naam <$email>\n");
> }
Stel je voor dat $naam het volgende bevat:
"evil <spammer@example.com>\r\nCc: <iemand@example.com>, <anders@example.com>,"
even urlencoden en het kan zo in de URL worden gedumpt, mocht je een
referrer check inbouwen van wordt het spam script 3 regels langer.
--
Daniel Tryba
In article <tj46m011ivf4ltvmgg5ecngnc8i82qo8ij@4ax.com>, Rene Pijlman wrote:
> Matthijs de Z:
>>>Is het nodig om de invoer voor PHP's mail() functie te controleren op
>>>onveilige code of doet de mail-functie dat voor je?
> [...]
>>Naast de vele opmerkingen die je waarschijnlijk zal krijgen en die veel
>>zinniger zullen zijn dan die van mij...ik zou er ook even een referrer check
>>in bouwen. Anders kan iedereen mailen via dat script.
>
> Dit waag ik tegen te spreken. De referer kan client-side vervalst worden
> en is dus van nul en generlei waarde als het om veiligheid gaat.
Ik durf dit te onderbouwen en ik noem een ding : Formmail.pl ;-)
Hans
--
"Helemaal zelfgebakken gentoo-kernels zijn dus minder geoptimaliseerd en
van mindere kwaliteit. :>"
-- Ruben van der Leij in nl.comp.os.linux.discussie
Arjen Haayman:
>Weet iemand hoe je mail() kunt misbruiken?
Een gangbare truc is via een header newlines met andere headers en
evenntueel een andere body toe te voegen. Zo zou het script wellicht
misbruikt kunnen worden om spam te versturen.
Een andere truc is gebruik te maken van eventuele buffer overruns om
willekeurige code uit te voeren, maar dat is zeer uitermate bijzonder
geavanceerd. Bovendien moeten er daarvoor bufferbugs zijn.
>(de server gebruikt sendmail).
Vergeet dan die laatste kanttekening maar. Sendmail is _het_
schoolvoorbeeld van een bufferbug-dierentuin.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Rene Pijlman wrote:
> En zelfs dan zou ik er niet vanuit gaan, want ik heb weinig vertrouwen in
> de PHP-manual.
Hee, daar hebben we het al lang niet meer over gehad! ;-)
Groeten,
Patrick
Patrick:
>Rene Pijlman:
>> En zelfs dan zou ik er niet vanuit gaan, want ik heb weinig vertrouwen in
>> de PHP-manual.
>
>Hee, daar hebben we het al lang niet meer over gehad! ;-)
Om de een of andere reden moet ik steeds aan de PHP-manual denken als de
LPF ruzie heeft.
Maar toch is dit wel een interessant punt. In de traditionele software
engineering ga je ervan uit dat een component aan zijn specificaties
voldoet. Als dat niet zo is, dan heeft de component een bug, niet de
applicatie die er gebruik van maakt.
Maar bij open source software wordt de documentatie vaak onafhankelijk
geschreven van de implementatie. Eigenlijk wordt er archeologie bedreven,
in plaats van informatica.
Dat roept de vraag op in hoeverre een deugende applicatiebouwer zich op de
documentatie mag beroepen, als het om veiligheid gaat. Er valt iets te
zeggen voor: niet.
Ofwel, OP: gij zult zelf uw data checken, alvorens het aan PHP en diens
functies toe te vertrouwen.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl