Re: PHP - Notatie voor een veilig SQL injectie
"Erick T. Barkhuis" <erick.usenet@ardane.c-o-m> wrote:
> Warden Dave:
>> [Men ziet bijv.
>> 'is_numeric' (http://nl3.php.net/is_numeric) en 'intval'
>> (http://nl2.php.net/intval)]
>
> Hee, dit is grappig.
> Waarom verwijs je voor is_numeric naar nl3.php en voor intval
> naar nl2.php?
Eerder al verwees ik ook al naar 'http://nl2.php.net/mysqli_multi_query' en
het zal zijn dat de angst ontstond dat 'nl2.php.net' over den toeren zou
raken van alle aandacht.
> Is http://nl3.php.net/intval stuk, of achterhaald, of iets anders?
Anders. Je kunt bij 'www.php.net' voor '/intval' gewoon een 'Found' +
'Location: http://nl3.php.net/intval' op je brood krijgen en tegen zo'n
prachtvondst ga ik me niet verzetten. Maar als je 't zaakje niet vertrouwt
en 'een luchtje' denkt waar te nemen dan probeer je ze toch allemaal uit!?
(Een fijne regenachtige zaterdagmiddag 'zoek de verschillen'. ;))
groet,
WD
Re: PHP - Notatie voor een veilig SQL injectie
Install http://support.microsoft.com/kb/900930 to read this message.
begin quote of Erick T Barkhuis (erick.usenet@ardane.c-o-m):
> Erik Hensema:
>
>> Dit is nog weer beter:
>> $leeftijd = (int) $_POST['leeftijd'];
>> if($leeftijd >= 0 && $leeftijd <= 120) {
>> # opslaan
>> } else {
>> # afgekeurd
>> }
>
> Post eens voor de grap de waarde "12ab" als invoer?
Klopt, de 'ab' wordt stilletjes gedropt. Silly php. Punt is
echter dat dat geen invloed heeft op de veiligheid. Je krijgt
misschien onzin in de database, maar wel veilige onzin.
--
Erik Hensema (erik@hensema.net) ICQ# 8280101
"But officer, I was only trying to gain enough speed so I could coast
to the nearest gas station."
Re: PHP - Notatie voor een veilig SQL injectie
Erik Hensema:
> Install http://support.microsoft.com/kb/900930 to read this message.
> begin quote of Erick T Barkhuis (erick.usenet@ardane.c-o-m):
>
Hee, een attachment?
--
Erick
"If a man speaks in the forest and there are no women there to hear him,
is he still wrong?"
Re: PHP - Notatie voor een veilig SQL injectie
> Als het je alleen gaat om het voorkomen van SQL-injecties, is het
> bovenstaande ietwat overdreven. mysql_real_escape_string() is daarvoor
> afdoende.
Ik zit zomaar wat te proberen om het te gaan begrijpen en heb het volgende
gedaan:
$string = "jan') AND DELETE * WHERE '1'='1' " ;
$sql="INSERT INTO vacatures (tekst) VALUES ('$string')";
echo $sql ;
echo "<br>";
echo "<br>";
$sql="INSERT INTO vacatures (tekst) VALUES ($string)";
echo $sql ;
echo "<br>";
echo "<br>";
$string2 = mysql_real_escape_string($string) ;
$sql="INSERT INTO vacatures (tekst) VALUES ('$string2')";
echo $sql ;
echo "<br>";
echo "<br>";
$string3 = addslashes ($string) ;
$sql="INSERT INTO vacatures (tekst) VALUES ($string3)";
echo $sql ;
echo "<br>";
echo "<br>";
en daar kwam het volgende uit:
INSERT INTO vacatures (tekst) VALUES ('jan') AND DELETE * WHERE '1'='1'')
INSERT INTO vacatures (tekst) VALUES (jan') AND DELETE * WHERE '1'='1')
INSERT INTO vacatures (tekst) VALUES ('jan\') AND DELETE * WHERE
\'1\'=\'1\'')
INSERT INTO vacatures (tekst) VALUES (jan\') AND DELETE * WHERE \'1\'=\'1\')
Maar wat doet nu wat?
Haico
Re: PHP - Notatie voor een veilig SQL injectie
"Erik Hensema" <usenet@smac.hensema.net> schreef in bericht > Kortom: check
of de data voldoet aan je verwachtingen. Daarmee
> creeer je veiligheid. Niet door zomaar wat functies aan te
> roepen.
OK, dank je wel, een duidelijk verhaal. Ook het idee om te controleren op
juiste invoer en niet op foute invoer is interressant. Helaas heb ik veel
velden waar hele lappen tekst ( be- c.q. omschrijvingen ) ingevoerd kunnen
worden.
Haico
Re: PHP - Notatie voor een veilig SQL injectie
"Haico" <hspaapenMONKEYTALEtiscali-INHOLLAND> writes:
> "Erik Hensema" <usenet@smac.hensema.net> schreef:
> Kortom: check of de data voldoet aan je verwachtingen.
> OK, dank je wel, een duidelijk verhaal. Ook het idee om te controleren op
> juiste invoer en niet op foute invoer is interressant.
Hmja, *hoe* interessant dat is zie je vooral bij regexp email
'validatie'. :->
--
||| hexadecimal EBB
o-o decimal 3771
--oOo--( )--oOo-- octal 7273
205 goodbye binary 111010111011
Re: PHP - Notatie voor een veilig SQL injectie
Install http://support.microsoft.com/kb/900930 to read this message.
begin quote of Haico ():
>
> "Erik Hensema" <usenet@smac.hensema.net> schreef in bericht > Kortom: check
> of de data voldoet aan je verwachtingen. Daarmee
>> creeer je veiligheid. Niet door zomaar wat functies aan te
>> roepen.
>
> OK, dank je wel, een duidelijk verhaal. Ook het idee om te controleren op
> juiste invoer en niet op foute invoer is interressant. Helaas heb ik veel
> velden waar hele lappen tekst ( be- c.q. omschrijvingen ) ingevoerd kunnen
> worden.
Maakt niet uit. Dan nog kun je checken op een maximale lengte,
bijvoorbeeld. Of ASCII < 32. Vervolgens gewoon even addslashes()
en het kan veilig de database in.
Bij weergave in html haal je het door htmlentities() en ook dat
is dan veilig.
Soms heb je meer layout nodig in de opgeslagen tekst, dan kun je
gaan werken met striptags().
--
Erik Hensema (erik@hensema.net) ICQ# 8280101
Quoting-HOWTO: http://www.leerquoten.nl
Re: PHP - Notatie voor een veilig SQL injectie
"Erik Hensema" <usenet@smac.hensema.net> wrote:
> Install http://support.microsoft.com/kb/900930 to read this message.
Nog steeds volledig offtopic.
> begin quote of Erick T Barkhuis (erick.usenet@ardane.c-o-m):
>> Erik Hensema:
>>
>>> Dit is nog weer beter:
>>> $leeftijd = (int) $_POST['leeftijd'];
>>> if($leeftijd >= 0 && $leeftijd <= 120) {
>>> # opslaan
>>> } else {
>>> # afgekeurd
>>> }
>> Post eens voor de grap de waarde "12ab" als invoer?
> Klopt, de 'ab' wordt stilletjes gedropt. Silly php.
Jij kunt dat nu 'silly' vinden, maar het is bij zo'n conversie geen
ongewoon gedrag en staat ook beschreven: "The value is given by the
initial portion of the string. If the string starts with valid
numeric data, this will be the value used. Otherwise, the value will
be 0 (zero).".
> Punt is echter dat dat geen invloed heeft op de veiligheid.
> Je krijgt misschien onzin in de database, maar wel veilige onzin.
Met dat in gedachte hoef je niet eerst te stellen dat het nog weer
'beter' is mensen die 999 jaar oud zijn buiten te sluiten. etc.
(Mensen zijn overigens wel ouder dan 120 jaar geworden.)
WD
Re: PHP - Notatie voor een veilig SQL injectie
>> OK, dank je wel, een duidelijk verhaal. Ook het idee om te controleren op
>> juiste invoer en niet op foute invoer is interressant.
>
> Hmja, *hoe* interessant dat is zie je vooral bij regexp email
> 'validatie'. :->
Jeetje, regexp..... moet ik dat weer gaan opzoeken. Oh reguliere
expressies..
Eigenlijk meer voor mezelf omdat ik het nu eenmaal beter leer als ik het
opschrijf het onderstaande:
2 jaar geleden gebruikte ik deze voor e-mail validatie ( uit Larry Ullman's
PHP voor het world wide web ), ik kreeg echter een paar ( 1 of 2 ) mailtjes
van mensen die hun bestaande -emailadres niet gevalideerd kregen:
=============
$lengte = strlen($address) ;
$patroon = ".+@.+\..+";
$patroon = "^([0-9a-z]+)([0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([0-9a-z]+)";
if(!eregi($patroon,$address)){
=================
Even kijken : we beginnen met minstens 1 cijfer of letter gevolgd door
minstens 1 cijfer, letter, punt, streepje of underscore, gevolgd door een
apestaart, gevolgd door minstens 1 cijfer, letter, punt, streepje of
underscore, gevolgd door een punt, gevolgd door minstens 1 cijfer, letter.
Het lijkt me dat meneer.jan.jansenccc@hetvvvnet.yy er wel door zal komen
maar meneer.jan.jansen@parijs.frankrijk.hetvvvnet.yy weer niet, of toch
wel, huh... een raar e-mailadres hadden ze dan....
en deze kwam ik net tegen met Google "regexp mail validation" (
http://www.codetoad.com/asp_email_reg_exp.asp ), was een ASP voorbeeld
overigens
===============
regEx.Pattern =
"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
isValidE = regEx.Test(myEmail)
================
Wat zou dit kunnen zijn? Beginnen met kleine of hoofdletters maar geen
cijfer, gevolgd door 0 (nul) of meer ( die asterix ) woordkarakters ( \w =
a-z0-9 ) punt en/of streepje, gevolgd door een of meer (hoofd)letters en/of
cijfers, dan de apestaart, dan letters en cijfers, nul of meer
woordkarakters punten en/of streepjes, dan 1 of meer (hoofd)letters en/of
cijfers, dan een verplichte punt, dan 1 of meerdere (hoofd)letters, dan
eventueel nul of meerdere (hoofd)letters en/of punten en tenslotte eindigend
op 1 of meerdere (hoofd)letters.
Dit zal xxxx@xxxx.nl dekken en ook xxx.xxx.xxx.xxx@x1x.x1x.co.uk
( met dank aan http://www.4guysfromrolla.com/webtech/052899-1.shtml )
Haico
PS, met excuses voor de late reacties, het duurt altijd even voordat ik het
door of opgezocht heb ;-)
Re: PHP - Notatie voor een veilig SQL injectie
"Haico" <hspaapenMONKEYTALEtiscali-INHOLLAND> writes:
> Jeetje, regexp..... moet ik dat weer gaan opzoeken.
Ik scherts een beetje in reactie op het toetsen van de 'goede' input.
Ook dat gaat in de praktijk vaak erg fout.
Reguliere expressies op een email adres los te laten is er een klassiek
voorbeeld van (een ander is het 'parsen' van HTML).
> $patroon = "^([0-9a-z]+)([0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([0-9a-z]+)";
> "^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
Nou nou. Jij trapt er iets *te* makkelijk in.
Om inspiratie op te doen zou je de reguliere expressie uit het Perl
module Mail::RFC822::Address kunnen bestuderen.
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
..\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
..|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
..(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
Weet waar je aan begint.
Re: PHP - Notatie voor een veilig SQL injectie
Eric B. Bednarz:
> (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
> )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
> \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
> ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
> \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
> 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
> ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
> (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
> (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
> |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
> ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
[...]
> ?:\r\n)?[ \t])*))*)?;\s*)
>
>
> Weet waar je aan begint.
Sommige mensen doen ook alles om niet het risico te lopen opnieuw in een
..sig te passen, he?
--
Erick
"Da's geen IE-hack, da's een standaard EHBO procedure" - Eric B. Bednarz
in niwo
Re: PHP - Notatie voor een veilig SQL injectie
"Eric B. Bednarz" <bednarz@fahr-zur-hoelle.org> schreef
> Om inspiratie op te doen zou je de reguliere expressie uit het Perl
> module Mail::RFC822::Address kunnen bestuderen.
>
> (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
> \000-\031]+(?:(?:(?:\r\n)?[ \t]
> )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
> \t]))*"(?:(?:
> \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
> \000-\031]+(?:(?:(
<knip knip knip>
> +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
> \t])*)(?:\
> .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
> \t])+|\Z
> |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
> \t])*))*\>(?:(
> ?:\r\n)?[ \t])*))*)?;\s*)
> Weet waar je aan begint.
Dit is Perl? Dat zou je in theorie toch gewoon in combinatie met PHP kunnen
gebruiken? Vind je het overigens heel erg dat ik je aanbod om dit uit te
pluizen even oversla? Ik heb wel een pagina met daarop uitleg van wat wat
betekent:
http://www.tldp.org/linuxfocus/Neder...tml#53lfindex1
Gelukkig krijgt onze website een opt-in via het door hun ingevoerde
e-mailadres en als hun invoer niet binnen een bepaalde tijd geactiveerd
wordt wordt het Record automatisch verwijderd. Als ik met addslashes() SQL
injecties tegen kan gaan en dan eventueel met strip_tags of
htmlspecialcharacters() de uitvoer dan zit ik redelijk safe ( nadat ik de
input gecheckt heb op wat ik logischerwijs in dat invoerveld mag
verwachten ):
$string = strip_tags($string, '<a><b><i><u>');
Waarschuwing
Deze functie verandert geen attributen in de tags die je toestaat met
allowable_tags, waaronder de style and onmouseover attributen die een
slechtwillende gerbuiken kan misbruiken bij het posten van tekst dat gezien
kan worden door andere bezoekers.
groet,
Haico
Re: PHP - Notatie voor een veilig SQL injectie
Haico wrote:
> Ronald:
>>Als het je alleen gaat om het voorkomen van SQL-injecties, is het
>>bovenstaande ietwat overdreven. mysql_real_escape_string() is daarvoor
>>afdoende.
De PHP manual zegt immers "This function must always (with few
exceptions) be used to make data safe before sending a query to MySQL.".
Maar eigenlijk is ook dat weer overdreven, zo valt te lezen op
http://dev.mysql.com/doc/refman/4.1/...pe-string.html :
"Strictly speaking, MySQL requires only that backslash and the quote
character used to quote the string in the query be escaped. This
function quotes the other characters to make them easier to read in log
files." addslashes() zou dus afdoende moeten zijn.
Overigens moet je voor gebruik van addslashes() kijken wat de waarde van
magic_quotes_gpc is: indien 'true', worden quotes al geescaped en zou
addslashes() dat nogmaals doen.
> Maar wat doet nu wat?
Wat doet wat?
--
groet, Ronald
Re: PHP - Notatie voor een veilig SQL injectie
Warden Dave wrote:
> "Michiel de Roo" <yourlove@welovespam.nl> wrote:
>
>
>>Overigens gaat dit voorbeeld niet op, want php-mysql ondersteunt
>>geen meerdere queries in één string.
>
>
> Toch wel. Zie http://nl2.php.net/mysqli_multi_query (Vanaf MySQL versie 4.1
> bestaat de mogelijkheid van meerdere statements in 1 query string; zie
> daarvoor ook CLIENT_MULTI_STATEMENTS en MYSQL_OPTION_MULTI_STATEMENTS_ON
> etc.)
Je hebt gelijk, met deze functie gaat het wel lukken. Maar met mysql_query
uit het voorbeeld gaat het niet.