'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Custom attribute?CyCloneNL schreef op woensdag 01 oktober 2008 @ 12:59:
Maar hoe geef je dan optionele velden aan.
1
| <input type="text" name="name" optional="true"> |
1
2
3
4
5
6
7
8
9
10
11
12
13
| function CheckForm(Form) { for (var i = 0; i < Form.Elements.Length; i++) { if(Form.Elements[i].value == '' && !Form.Elements[i].getAttribute("optional")) { alert('Vul aub alle velden in!'); return false; } } Form.submit(); return true; } |
Let ook op de return values zodat je in een submit button het submitten kan tegenhouden:
1
| <input type="submit" name="submit" value="Verstuur" onclick="return CheckForm(...);"> |
More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs

Nu-uh, het is tijd voor deel 4!-NMe- schreef op woensdag 01 oktober 2008 @ 13:31:
Het is alweer tijd voor deel 3 van deze succesvolle topicreeks.
Daarom vraag ik hoe je het juist wel goed moet doenEvilB2k schreef op woensdag 01 oktober 2008 @ 15:04:
Hence the topic name "Slechste programmeervoorbeelden"

Of is het alleen de bedoeling om foute dingen te posten?
1
| goto <regelnummer> |
even wat enters/nieuwe code er tussendoor en je programma is stuk

en draait dan ook nog eens in productie bij een niet nader te noemen bedrijfje.
edit naar hierboven: Ja deze topic is gemaakt om slechte voorbeelden in te posten die niet bepaald conform "best-practice" zijn gemaakt. Gewoon... omdat het grappig is

[Voor 45% gewijzigd door Laurens-R op 01-10-2008 15:21]
Nein

"Daarnaast is het niet de bedoeling dat je hier maar even snel een kort vraagje komt stellen. Als een vraag niet topicwaardig is, dan is hij wat dit forum betreft ook niet postwaardig."CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:15:
[...]
Daarom vraag ik hoe je het juist wel goed moet doen
Of is het alleen de bedoeling om foute dingen te posten?
'You like a gay cowboy and you look like a gay terrorist.' - James May
Beter met "rel'.IceManX schreef op woensdag 01 oktober 2008 @ 13:48:
[...]
Custom attribute?
HTML:
1 <input type="text" name="name" optional="true">
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Het zou wel valide xhtml zijn wanneer je een eigen namespace 'foo' definieert:CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:01:
Maar dat is toch niet valide html.
1
| <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.bar"> |
en je je custom attribute als volgt gebruikt:
1
| <input type="text" name="name" foo:optional="true"> |
Maar of dat nou ook echt is wat je wilt...
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
EvilB2k schreef op woensdag 01 oktober 2008 @ 15:17:
maar goed om maar even een start te maken deze kwam ik laatst nog tegen in een oude VB app:
code:
1 goto <regelnummer>
even wat enters/nieuwe code er tussendoor en je programma is stuk

Regelnummers in basic moeten expliciet worden opgegeven, en zijn ongerelateerd aan regelnummers in het bestand. Een enter ertussen boeit dus niet.
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Anoniem: 178962
Inderdaad, vroegah waren we altijd zo aan het proggen:.oisyn schreef op woensdag 01 oktober 2008 @ 16:25:
[...]
Regelnummers in basic moeten expliciet worden opgegeven, en zijn ongerelateerd aan regelnummers in het bestand. Een enter ertussen boeit dus niet.
10 bla
20 bla
30 bla
40 bla
Op die manier kon je altijd nog genoeg code tussendoor toevoegen mocht je een foutje gemaakt hebben.
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)


If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
20 poke 53281, x
30 x = x + 1
40 goto 20
en later werd het geloof ik zoiets
.A2000 LDX $D020
INX
STX $D020
JMP $2000
Mooie tijden. Toen waren er nog geen small portal hacks

[Voor 18% gewijzigd door Zoijar op 01-10-2008 16:56]
Zolang de W3C HTML validator al keihard onderuit gaan zodra ik een link heb met &, en in JavaScript gaat zoeken naar errors, krijg ik de neiging die te negeren zodra JavaScript eraan te pas komt.CyCloneNL schreef op woensdag 01 oktober 2008 @ 15:01:
Maar dat is toch niet valide html.
Bovendien, 1) het werkt zonder veel extra moeite, 2) (vrijwel) geen enkele browser valt erover, en 3) ik zou nergens beweren dat mijn pagina valid HTML bevat

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)

Overigens, ik neem aan dat die & in een link een & moet zijn? Daar is best wat voor te zeggen...
[Voor 55% gewijzigd door .oisyn op 01-10-2008 18:09]
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Of een custom dtd gebruiken dat de standaard dtd uitbreidt.rrrandy schreef op woensdag 01 oktober 2008 @ 16:21:
[...]
Het zou wel valide xhtml zijn wanneer je een eigen namespace 'foo' definieert:
HTML:
1 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.bar">
en je je custom attribute als volgt gebruikt:
HTML:
1 <input type="text" name="name" foo:optional="true">
Maar of dat nou ook echt is wat je wilt...
Uh, jawel hoor, is in de OP nu ook al gefixed

Uhm, & moet zoals .oisyn al zei gewoon & worden, en fouten in Javascript? Waarom heb ik daar nooit last van dan?Zolang de W3C HTML validator al keihard onderuit gaan zodra ik een link heb met &, en in JavaScript gaat zoeken naar errors, krijg ik de neiging die te negeren zodra JavaScript eraan te pas komt.

Anoniem: 84120
Dus: het werkt, overal is alles goed (in alle browsers die ik ken), om een paar dingen makkelijk werkend te krijgen doe ik kleine dingen 'fout' --> BOEIEND. W3c Valide garandeert geen correct werkende webapplicatie.
[1] http://www.w3.org/TR/REC-html40/types.html#h-6.2
Mja, kan ook. Een eigen namespace vind ik dan toch wat eleganter. Is het direct overal duidelijk dat het echt om eigen dingen gaat.BalusC schreef op woensdag 01 oktober 2008 @ 18:15:
[...]
Of een custom dtd gebruiken dat de standaard dtd uitbreidt.
Anoniem: 260596
(Rechtstreekse Copy/Paste)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <script language="javascript"> <!--// /*Dit script verplicht de bezoekers een password en ID in te vullen alvorens de pagina te kunnen opvragen*/ function pasuser(form) { <!--//verander hier onder je eigen ID if (form.id.value=="BLOG01") { <!--//verander hier onder je eigen logincode if (form.pass.value=="OYEAH") { <!--//verander hier onder de pagina die beveiligd moet worden location="http/woei/show_news.php" } else { alert("Invalid Password") } } else { alert("Invalid UserID") } } //--> </script> |

[Voor 2% gewijzigd door een moderator op 02-10-2008 11:35. Reden: Link naar de echte site weggehaald]


Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Zo had mijn school eerder een pakket om toetsen af te nemen, voor elke toets stond een wachtwoord, in de bron ;')kenneth schreef op woensdag 01 oktober 2008 @ 23:52:
Waarschijnlijk een site alleen bezocht door digibeten
Kon je dus ver van te voren al de toets inzien

logisch natuurlijk als je zo openbarend bent met je passwordsGomez12 schreef op woensdag 01 oktober 2008 @ 22:30:
He, niet denigrerend doen he, het is wel waarschijnlijk versleuteld door een lettertype wat geen duidelijk onderscheid maakt tussen een 0 en een O...

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]
Nee, veel beter is een class te geven voor optionele parameters.IceManX schreef op woensdag 01 oktober 2008 @ 13:48:
[...]
Custom attribute?
HTML:
1 <input type="text" name="name" optional="true">
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 function CheckForm(Form) { for (var i = 0; i < Form.Elements.Length; i++) { if(Form.Elements\[i].value == '' && !Form.Elements\[i].getAttribute("optional")) { alert('Vul aub alle velden in!'); return false; } } Form.submit(); return true; }
Let ook op de return values zodat je in een submit button het submitten kan tegenhouden:
HTML:
1 <input type="submit" name="submit" value="Verstuur" onclick="return CheckForm(...);">
1
| <input type="text" name="name" class="optionalFormField"> |
Daarna javascript gebruiken om de class uit te lezen.
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien.CyCloneNL schreef op woensdag 01 oktober 2008 @ 22:05:
Oeh, ik weet het wachtwoord!

De echte WTF is natuurlijk hoe de maker van die site een 10 voor Nederlands heeft kunnen krijgen.Voutloos schreef op donderdag 02 oktober 2008 @ 08:25:
Ook leuk als iemand direct naar show_news.php gaat linken.

Tja... ik denk dat meisjes van 12 niet echt bezig zijn met of de beveiliging op de site goed werktTiemez schreef op donderdag 02 oktober 2008 @ 09:27:
[...]
Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien.


[Voor 98% gewijzigd door Cr1mp op 02-10-2008 09:53]
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
Richt-click disablen, jeweettoch!Tiemez schreef op donderdag 02 oktober 2008 @ 09:27:
[...]
Zullen die mensen nou echt niet snappen dat iedereen dat wachtwoord kan zien.
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Je had die location="..." ook even weg kunnen editten, want daar gaat het natuurlijk niet om. Nu krijg je allemaal weer vreemde figuren die zo nodig moeten gaan reageren daarAnoniem: 260596 schreef op woensdag 01 oktober 2008 @ 21:28:
Misschien niet echt een Slecht programmeervoorbeeld, mar veilig zal het ook wel niet zijn als je een dergelijk beveiligingssysteem hebt, dat gewoon in de Broncode van je website staat:
(Rechtstreekse Copy/Paste)
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script language="javascript"> <!--// /*Dit script verplicht de bezoekers een password en ID...*/ function pasuser(form) { <!--//verander hier onder je eigen ID if (form.id.value=="BLOG01") { <!--//verander hier onder je eigen logincode if (form.pass.value=="OYEAH") { <!--//verander hier onder de pagina die beveiligd moet worden location="" } else { alert("Invalid Password") } } else { alert("Invalid UserID") } } //--> </script>

Verder is zoiets natuurlijk te verwachten van iemand die voor het eerst een website maakt, die plukt de makkelijkste scriptjes van het internet...en als simpelste vorm van beveiliging werkt het, zolang de gebruiker geen kennis heeft van HTML

1
2
3
4
5
6
7
| $query = "SELECT * FROM tabel"; if($_SESSION["zoeken"]["betaal_status"] == "-"){ $query .= " WHERE status != 'eenletterdienietvoorkomt'"; } else { $query .= " WHERE status = '".$_SESSION["zoeken"]["status"]."'"; $zoeken = 'ja'; } |
En vandaag kwam ik nog een script pagina tegen met een if-constructie met 10 else-ifs, waarbij alleen in de "else" code staat. (oftewel, die if had anders gekunt gemoeten.)
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds

Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.Tiemez schreef op donderdag 02 oktober 2008 @ 12:21:
ik kwam deze laatst nog tegen
PHP:
1 2 3 4 5 6 7 $query = "SELECT * FROM tabel"; if($_SESSION["zoeken"]["betaal_status"] == "-"){ $query .= " WHERE status != 'eenletterdienietvoorkomt'"; } else { $query .= " WHERE status = '".$_SESSION["zoeken"]["status"]."'"; $zoeken = 'ja'; }
En vandaag kwam ik nog een script pagina tegen met een if-constructie met 10 else-ifs, waarbij alleen in de "else" code staat. (oftewel, die if had anders gekunt gemoeten.)
Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr...

(maar goed, dat is persoonlijke voorkeur

More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
Of je drukt gewoon op de context-menu toets die naast de rechter CTRL zitIceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds
Ctrl-F12, Geavanceerd, Inhoud, Javascript opties..., Ontvangen van rechter-muisklikken toestaan

Full-stack webdeveloper in Groningen
Ja, het is een stuk code van een collega van me. Die zelf ook niet (meer?) wist waarom dit er in zat.IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds
[...]
Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.
Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr...![]()
(maar goed, dat is persoonlijke voorkeur)
ik gebruik zelf overigens ook altijd engelse variabelen en functienamen. En gebruik voor Database-query's het liefst PDO of ZEND_DB die het escapen voor je doen. (en anders mysql_real_escape_string())
[Voor 6% gewijzigd door Tiemez op 02-10-2008 13:09]
Bij het opslaan maakt ie een ordernummer aan en zet die in de database en daar koppelt ie de klantgegevens aan. Wat deed ie nu... hij pakte <jaar><maand><nr> waarbij <nr> ooit begon met 1 en bij het aanmaken van het ordernummer checkte die de laatste order en pakte de laatste 3 getallen van dat ordernummer, hoogde dat op met 1, en dat plakte die dus achter <jaar><maand>.
Toevallig was dit de eerste maand waarbij het aantal bestellingen over de 1000 ging, dus zorge dat voor problemen, want de laatste 3 getallen van 2008091000 wordt...000 en + 1 = 1. Dus begon ie opnieuw met tellen en liep de boel de zeik in

Gelukkig heb ik snel een workaround ingebakken (substr op de getallen na jaar/datum) en dat + 1; maar wat een methode


Assumptions are the mother of all fuck ups | iRacing Profiel | GT Sport stats
Brrrr.... db_id lijkt me niet zo handig. Krijg je gaten in je overzicht van orders (ten minste, als je je id's globaal nummert ipv per tabel.Salandur schreef op vrijdag 03 oktober 2008 @ 16:16:
autoincrement/sequence? order nummer = <jaar><dag><db_id> is wel makkelijker dan
Dan liever een dedicated sequence voor de ordernummers.
1
2
3
| if i = 130 Then i = i End if |
Neem aan dat het gewoon nog een stukje code was om te testen of iets dergelijks.
Nu ben ik toch nieuwsgierig, de $_SESSION variabele bevat toch gegevens die door je applicatie gevuld is en niet de gebruiker? Hoe kan dit dan SQL injection veroorzaken? (mits je applicatie de $_SESSION var zelf goed vult natuurlijk).IceManX schreef op donderdag 02 oktober 2008 @ 12:39:
[...]
Ik lach elke keer weer als iedereen zit te klagen dat right-click niet werkt. Opera negeert die code namelijk nog steeds
[...]
Ik vraag me af wat ik dommer vind. De overduidelijke SQL-injection-waiting-to-happen, of het toevoegen van een feitelijke TRUE statement als WHERE clause. Waarbij helaas de performance slechter wordt omdat voor elk record wel de status moet worden vergeleken met 'eenletterdienietvoorkomt'.
Ik zal maar niks zeggen over $zoeken. Nederlands in code, brrrr...![]()
(maar goed, dat is persoonlijke voorkeur)
Toch had ik daar niet vanuit mogen gaan nee.
More than meets the eye
There is no I in TEAM... but there is ME
Vroeger IceManX | system specs
Ik bedacht me later ook dat ik zelf pas de waardes zou gaan escapen net voordat ik ze in een query zou gebruiken. Het is logischer om de originelen in de $_SESSION variabele op te slaan.
Je app kan de session variabelen nog zo goed vullen, je kan je inputvelden nog zo goed controleren.Mitrilvich schreef op zaterdag 04 oktober 2008 @ 14:20:
[...]
Nu ben ik toch nieuwsgierig, de $_SESSION variabele bevat toch gegevens die door je applicatie gevuld is en niet de gebruiker? Hoe kan dit dan SQL injection veroorzaken? (mits je applicatie de $_SESSION var zelf goed vult natuurlijk).
In wezen moet je alles controleren, anders heb je altijd het risico op een domino-effect door een oude db-entry ( van voordat je input-velden controleerde ) die in combinatie met een bugje in het vullen van session variabelen je app rare dingen laat doen.
Ten allen tijde heb je een risico op bugs, als je de resultaten opslaat heb je een kans dat je ongefilterde data in je dbase hebt zitten vanwege een oude bug.
En hoeveel moeite is het nou om 1 extra check uit te voeren? ( lijkt mij persoonlijk juist een rare situatie om 1 gegeven door je hele app heen als onbetrouwbaar te classificeren totdat hij opeens in je $_SESSION zit, dan is hij opeens magisch betrouwbaar geworden? Terwijl hij het zelfde moet voorstellen )
Ik denk dat je altijd waardes moet escapen voordat je ze gebruikt in een query. Ongeacht of ze van je applicatie of van de gebruiker af komen. (Tenzij je 200% zeker ben dat de waardes in een veilige range van tekens zitten).Gomez12 schreef op zaterdag 04 oktober 2008 @ 16:38:
[...]
Je app kan de session variabelen nog zo goed vullen, je kan je inputvelden nog zo goed controleren.
In wezen moet je alles controleren, anders heb je altijd het risico op een domino-effect door een oude db-entry ( van voordat je input-velden controleerde ) die in combinatie met een bugje in het vullen van session variabelen je app rare dingen laat doen.
Ten allen tijde heb je een risico op bugs, als je de resultaten opslaat heb je een kans dat je ongefilterde data in je dbase hebt zitten vanwege een oude bug.
En hoeveel moeite is het nou om 1 extra check uit te voeren? ( lijkt mij persoonlijk juist een rare situatie om 1 gegeven door je hele app heen als onbetrouwbaar te classificeren totdat hij opeens in je $_SESSION zit, dan is hij opeens magisch betrouwbaar geworden? Terwijl hij het zelfde moet voorstellen )
Het speciale was de combinatie van $_SESSION en de term "sql injection". Het is niet duidelijk of $_SESSION gegevens bevat die ingegeven is door de gebruiker (zoals een zoekterm) en die daarmee bewust een SQL string manipuleert.
Cartman! schreef op vrijdag 03 oktober 2008 @ 16:10:
Vorige week een dikke bug die een collega (inmiddels vertrokken) had gemaakt en ik kon gaan zoeken. Het ging om een simpele webshop waar je een paar producten in een shoppingcart kunt plaatsen en afrekenen.
Bij het opslaan maakt ie een ordernummer aan en zet die in de database en daar koppelt ie de klantgegevens aan. Wat deed ie nu... hij pakte <jaar><maand><nr> waarbij <nr> ooit begon met 1 en bij het aanmaken van het ordernummer checkte die de laatste order en pakte de laatste 3 getallen van dat ordernummer, hoogde dat op met 1, en dat plakte die dus achter <jaar><maand>.
Toevallig was dit de eerste maand waarbij het aantal bestellingen over de 1000 ging, dus zorge dat voor problemen, want de laatste 3 getallen van 2008091000 wordt...000 en + 1 = 1. Dus begon ie opnieuw met tellen en liep de boel de zeik in
Gelukkig heb ik snel een workaround ingebakken (substr op de getallen na jaar/datum) en dat + 1; maar wat een methode![]()


http://hawvie.deviantart.com/
En waarom zou je dat doen?HawVer schreef op zondag 05 oktober 2008 @ 10:47:
Alleen had ik toen opzettelijk het risico genomen.
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Roses are red Violets are blue, Unexpected ‘{‘ on line 32.
Over mij
Nouja, álle waardes escapen is wat overdreven. Maar ik denk dat je wel kunt stellen dat variabelen die "van buiten" het script komen, die dus niet in het script zijn gedefiniëerd, het beste escaped kunnen worden. $_SESSION is dus wel een variabele die ik zou escapen, maar als ik 10 (of 100, of desnoods in een geïnclude bestand) regels voor de query een variabele definiëer (met hardcoded waarde dus), dan ga ik die natuurlijk niet escapen (tenzij dat nodig is uiteraard).Mitrilvich schreef op zaterdag 04 oktober 2008 @ 17:16:
[...]
Ik denk dat je altijd waardes moet escapen voordat je ze gebruikt in een query. Ongeacht of ze van je applicatie of van de gebruiker af komen. (Tenzij je 200% zeker ben dat de waardes in een veilige range van tekens zitten).
Het speciale was de combinatie van $_SESSION en de term "sql injection". Het is niet duidelijk of $_SESSION gegevens bevat die ingegeven is door de gebruiker (zoals een zoekterm) en die daarmee bewust een SQL string manipuleert.
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Ecapen en casten.Patriot schreef op zondag 05 oktober 2008 @ 12:01:
[...]
Maar ik denk dat je wel kunt stellen dat variabelen die "van buiten" het script komen, die dus niet in het script zijn gedefiniëerd, het beste escaped kunnen worden.
Met printf kan je eerst al een correcte string opbouwen. Bv als je een integer verwacht, dat er ook echt een integer komt te staan.
1
2
3
| $data = array ( 5, '.oisyn_sql_hack', 9 ); $sql = sprintf ( 'SELECT * FROM table WHERE name = "%u"', $data[1] ); |
of
1
2
3
| $data = array ( 5, '.oisyn_sql_hack', 9 ); $sql = 'SELECT * FROM table WHERE name = "' . (int) $data[1] . '"'; |
In beide gevallen krijgen we dan:
1
| SELECT * FROM table WHERE name = "0" |
Op plaatsen waar je een string verwacht moet je escapen, en zien dat je strings tussen quotes staan. PDO heeft hier de handige functie quote () voor, die je strings altijd van quotes voorziet, en deze escaped.
En als je toch PDO gebruikt, kan je direct prepared statements gebruiken.
Juist vanwege dit zou ik een $_SESSION variabele wél willen escapen, aangezien dat een van de minst overzichtelijke variabelen is die je in je script zult tegenkomen, en dus ook user input kan bevatten (desnoods van tig page-loads terug)..oisyn schreef op zondag 05 oktober 2008 @ 20:15:
Dat lijkt me een unmaintainable zooitje worden eigenlijk. Als je dan eens een keer die waarde aanpast, waarbij op dat moment niet meer heel duidelijk is dat de waarde ook in een db wordt gestopt (zonder escaping, want dat hoefte immers eerst niet) kan een fout er gemakkelijk doorheen glippen.
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
Computer Science: describing our world with boxes and arrows.
Dat was ongeveer 6 jaar geleden toen ik nog maar net met ontwikkeling om de hoek kwam kijken, plus het aantal orders was toen ongeveer 5 per week misschien. Dus dat aantal zou die niet halen.
Ik zou het nu wel anders doen met of meer cijfers achter de maand of met een nette errormelding oid. Overigens is het systeem nooit live gegaan wegens acceptatieproblemen. Men bleef liever werken met Excel..

[Voor 11% gewijzigd door HawVer op 06-10-2008 12:45]
http://hawvie.deviantart.com/
nee, sessie variabelen staan op de server, niet op de client. Op de client staat alleen een token (sessionId) om de juiste sessie variabelen weer bij de juiste bezoeker te kunnen vinden.netvor schreef op maandag 06 oktober 2008 @ 12:40:
Een Session Variable mag dan wel door de applicatie gevuld worden, het is en blijft een cookie die door de user-agent naar de server gestuurd wordt.
Nee, dat kan dus niet. Er is een heel groot verschil tussen de waarde van je sessieId en de waarde van de variabelen in je sessie.Ik heb het zelf al vaak genoeg meegemaakt dat ik eventjes met wget wat grote bestanden van een beveiligde applicatie wilde ophalen. Inloggen is met wget een beetje omslachtig, dus wat ik dan doe is netjes inloggen via de browser, kijken wat m'n Session ID is en deze vervolgens via wget meesturen. Als ik handmatig een Session ID kan opgeven kan ik ook ' " OR 1=1 ' of iets dergelijks meesturen.
Tot slot, het escapen van input of sessie variabelen is helemaal niet relevant. Je moet escapen naar de context. Pas als je een query bouwt ga je je parameters escapen. Pas wanneer je html afdrukt ga je html spesialchars loslaten en xss verwijderen. En door php's vreemde instellingen zul je zo nu en dan de binnengekomen variabelen uit GET, POST en COOKIE moeten unescapen.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
1
2
3
4
5
| // Take away // het afhalen van PRODUCTEN // niet het afhalen van fastfood (dit ter verwarring voor mathieu) $takeaway = TRUE; |
naxasius.com, mijn eigen mmorpg spel (browser based).
Janoz schreef op maandag 06 oktober 2008 @ 12:56:
nee, sessie variabelen staan op de server, niet op de client. Op de client staat alleen een token (sessionId) om de juiste sessie variabelen weer bij de juiste bezoeker te kunnen vinden.

1
| $query = "DELETE FROM table WHERE id = '$var'"; |
Dan moet je gewoon $var escapen om te zorgen dat er op zijn minst geen loszittende aanhalingstekens in zitten. Ook al komt die $var uit de session, of uit de DB, of van de aanroepende functie, je moet gewoon dat risico afvangen. Het is net als we bij de autorijles hebben geleerd: altijd in de dode hoek kijken, ook al weet je dat er geen auto zit.
Computer Science: describing our world with boxes and arrows.
1
2
3
4
| Do While SQLCA.SQLCODE = 0 Query 1 Query 2 Loop |
Werkte prima, tot Query 1 fout ging en Query 2 niet

SQLCA is Informix IDS' standaard object voor SQL (error) codes... en 0 is uiteraard "no problem"
Als het goed is, is id een getal, en moet je dus gewoon casten naar een integernetvor schreef op maandag 06 oktober 2008 @ 13:06:
[...]
Zucht. Ik ben ook niet helemaal wakker of wel? Verder sluit ik me volledig aan bij jouw samenvatting dat je moet escapen naar context. Als je het volgende in je code hebt:
PHP:
1 $query = "DELETE FROM table WHERE id = '$var'";
Dan moet je gewoon $var escapen om te zorgen dat er op zijn minst geen loszittende aanhalingstekens in zitten. Ook al komt die $var uit de session, of uit de DB, of van de aanroepende functie, je moet gewoon dat risico afvangen. Het is net als we bij de autorijles hebben geleerd: altijd in de dode hoek kijken, ook al weet je dat er geen auto zit.

Full-stack webdeveloper in Groningen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| function setPassword($password, $oldPassword) { if ($password === $oldPassword) { return; } if (!$this->checkPassword($oldPassword)) { throw new Exception('Wrong password.'); } if (strlen($password) < 8) { throw new Exception('Password too short.'); } if (empty($password)) { throw new Exception('Empty password not permitted.'); } $this->password = $password; $this->save(); } |
bron
12x360Wp = 4320 Wp @ Growatt 4200TL-XL. Zuid met helling 13° op plat dak.
1
2
3
4
5
6
| $offset = $this->subpage * self::SUBPAGE_LIMIT; if ($this->subpage == 0) { $offset = 0; } |
doh

- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
Mwoa, vind ik niet. Het is eerder dat de aparte rule voor empty password nogal overbodig is aangezien een password toch al minstens 8 tekens mag zijn. Vanuit het standpunt van de gebruiker zou ik het ook nogal irritant vinden als ik eerst geen wachtwoord wil en dus een "leeg ww mag niet" bericht krijg, om vervolgens dan maar een ww van 1 teken te gebruiken waarop ik de melding krijg "moet minstens 8 tekens". Ja, zeg dat dan meteen!

Een speciaal geval afschermen terwijl het al afgeschermd wordt door een generiekere regel is imho gewoon overbodig.
Heh, die is helemaal niet zo d'oh als je denkt hoor. Mag jij uitvinden waaromMaghiel schreef op dinsdag 14 oktober 2008 @ 20:58:
Ik kwam laatst deze van mezelf tegen:
PHP:
1 2 3 4 5 6 $offset = $this->subpage * self::SUBPAGE_LIMIT; if ($this->subpage == 0) { $offset = 0; }
doh

[Voor 30% gewijzigd door .oisyn op 14-10-2008 23:00]
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
De volgorde klopt natuurlijk niet helemaal, daar had hij gelijk in. Maar ik ben het inderdaad met je eens dat een leeg wachtwoord niet anders zou moeten zijn dan een te kort wachtwoord.
Als ze allemaal integers zijn (wat imho toch wel geimpliceerd is), dan is de d'oh natuurlijk dat $offset al 0 is als $this->subpage 0 is.[...]
Heh, die is helemaal niet zo d'oh als je denkt hoor. Mag jij uitvinden waarom
[Voor 25% gewijzigd door Patriot op 14-10-2008 23:08]
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Het gaat volgens mij om subpagina's van het één of het ander, pagina's tellen we over het algemeen in hele getallen. Het kan natuurlijk anders, maar het lijkt mij in dit geval logischer dat het een integer betreft..oisyn schreef op dinsdag 14 oktober 2008 @ 23:09:
Ik zie niet in waarom SUBPAGE_LIMIT per se een int moet zijn. Er is namelijk precies 1 waarde in het bereik van de floats die toch een heel zinnige betekenis heeft. En precies bij die ene waarde is 0 * SUBPAGE_LIMIT ongelijk aan 0.
EDIT:
Moet overigens toegeven niet te weten bij welke floating point waarde 0 * float niet gelijk is aan 0.
[Voor 9% gewijzigd door Patriot op 14-10-2008 23:23]
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Sinds wanneer kunnen we die waarde in PHP assignen aan een variabele (en nu niet grappen dat het kan als string)?.oisyn schreef op dinsdag 14 oktober 2008 @ 23:22:
Nee, het gaat om de limiet van het aantal subpagina's. Wat als je nou geen limiet wilt gebruiken? Knutsel je dan liever met een arbitrair grote int of gewoon met het wiskundige concept dat daar prima bij past: ∞?
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
1
2
3
4
5
6
| define("INFINITY", -log(0)); echo 4 < INFINITY; // true echo max(4, INFINITY); // INF echo min(4, INFINITY); // 4 echo is_infinite(INFINITY); // true |
Het "probleem" van Maghiel dat hij onbewust toch heeft opgelost is dat 0∙∞ niet gedefinieerd is. Oftewel, daar komt een NaN uit.
[Voor 13% gewijzigd door .oisyn op 14-10-2008 23:34]
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"

[Voor 88% gewijzigd door Maghiel op 14-10-2008 23:36]
Je kan INF gebruiken..oisyn schreef op dinsdag 14 oktober 2008 @ 23:31:
Euh, infinity past gewoon in een float hoor. De rekenregels ermee zijn gewoon gedefinieerd in IEEE 754. Ik weet even niet uit m'n hoofd of PHP een constante/functie kent die je direct kunt gebruiken (de meeste programmeertalen wel),
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
Oh, ik zie nu hoe het zit, had het even eerder moeten testen. Anyway, ik vermoed dat het in dit geval niet echt boeiend is. Maar dat blijft speculatie..oisyn schreef op woensdag 15 oktober 2008 @ 00:50:
Nee, INF is echt oneindig. De hoogst mogelijke float is ongeveer 1.79769313486231570e+308. Die waarde vermenigvuldigen met 0 geeft gewoon 0, en delen door zichzelf geeft 1 (oftewel, alles wat je bij een normale waarde verwacht). Infinity vermenigvuldigen met 0 kan niet, noch kun je 'm delen door zichzelf.

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
| if (locationField != null) { if (locationField.Value.Equals("AWP")) { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "true", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN")); } else if (locationField.Value.Equals("SVF")) { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "true", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN")); } else if (locationField.Value.Equals("DRONTEN")) { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "true", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN")); } else if (locationField.Value.Equals("LAW")) { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "true", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN")); } else if (locationField.Value.Equals("VRW")) { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "true", "BOOLEAN")); } else { lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", "false", "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", "false", "BOOLEAN")); } } |
Kater? Eerst water, de rest komt later

12x360Wp = 4320 Wp @ Growatt 4200TL-XL. Zuid met helling 13° op plat dak.
Assumptions are the mother of all fuck ups | iRacing Profiel | GT Sport stats
Dat vind ik niet zo heel slecht in dit voorbeeld. Hij geeft namelijk ook een objecttype mee (als string). Dus waarschijnlijk gaat de functie die hij aanroept "false" omzetten in een mooie booelan false. Dus zo fout is dat opzich niet denk ik (mits de functie natuurlijk ook anderer types dan booleans kan ontvangen).AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout.
Hij had natuurlijk ook Object kunnen gebruiken als parameter type en dan boolean false erin gooien.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
Waarom? Misschien is ie wel iets textueels aan het genereren. Dat kun je uit deze beperkte context niet opmaken.AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout.
Maar goed, ik zou het zo opgelost hebben (even in C++, m'n C# is wat roestig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| struct LocatieInfo { string locationName; string propertyName; }; LocatieInfo locations[] = { { "AWP", "new_locatie_awp" }, { "SVF", "new_locatie_svf" }, { "DRONTEN", "new_locatie_dro" }, { "LAW", "new_locatie_law" }, { "VRW", "new_locatie_vrw" }, }; int num = sizeof(locations) / sizeof(locations[0]); for (int i = 0; i < num; i++) { string value = locationField.Value.Equals(locations[i].locationName) ? "true" : "false"; lstFields.Add(m_Processor.CreateProperty(locations[i].propertyName, value, "BOOLEAN")); } |
Of simpelweg iets als
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| struct LocationTesterHelper { private: string loc; public: LocationTesterHelper(string location) : loc(location) { } string Get(string value) { return loc.Equals(value) ? "true" : "false"; } } LocationTesterHelper locHelper(locationField.Value); lstFields.Add(m_Processor.CreateProperty("new_locatie_awp", locHelper.Get("AWP"), "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_svf", locHelper.Get("SVF"), "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_dro", locHelper.Get("DRONTEN"), "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_law", locHelper.Get("LAW"), "BOOLEAN")); lstFields.Add(m_Processor.CreateProperty("new_locatie_vrw", locHelper.Get("VRW"), "BOOLEAN")); |
[Voor 70% gewijzigd door .oisyn op 24-10-2008 13:14]
If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"
1
2
3
4
5
6
7
8
9
| bool b; if (value.Equals("false")) { b = bool.Parse("false"); } else { b = bool.Parse("true"); } |
Terwijl dat natuurlijk ook gewoon zo had gekund

1
2
3
4
5
| bool b = false; if (value.Equals("true;")) { b = true; } |
Kater? Eerst water, de rest komt later
/mierenneukmode: Die van jou gaat dus nooit goedHaan schreef op vrijdag 24 oktober 2008 @ 13:49:
Terwijl dat natuurlijk ook gewoon zo had gekund
C#:
1 2 3 4 5 bool b = false; if (value.Equals("true;")) { b = true; }

Waarom nietHaan schreef op vrijdag 24 oktober 2008 @ 13:49:
Die CreateProperty methode kan allerlei types properties aanmaken, dus om niet voor ieder type een overload te maken neemt ie gewoon strings als input. Maar nu zat ik te kijken naar hoe die boolean omgezet wordt:
C#:
1 2 3 4 5 6 7 8 9 bool b; if (value.Equals("false")) { b = bool.Parse("false"); } else { b = bool.Parse("true"); }
Terwijl dat natuurlijk ook gewoon zo had gekund
C#:
1 2 3 4 5 bool b = false; if (value.Equals("true;")) { b = true; }
1
| bool b = bool.Parse( value ); |
Of mogen er ook foutieve waardes gegeven worden die naar false moeten evalueren?
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Dat is niet helemaal waar. Alles wat niet "true" is zal in jouw geval een false worden. Maar dat is niet altijd gewenst? Stel je voor dat je met nullable bools werkt, of dat je een fout wil geven als er geen "false" of "true" wordt meegegeven. Dus zo slecht is de eerste oplossing niet.Haan schreef op vrijdag 24 oktober 2008 @ 13:49:
Die CreateProperty methode kan allerlei types properties aanmaken, dus om niet voor ieder type een overload te maken neemt ie gewoon strings als input. Maar nu zat ik te kijken naar hoe die boolean omgezet wordt:
C#:
1 2 3 4 5 6 7 8 9 bool b; if (value.Equals("false")) { b = bool.Parse("false"); } else { b = bool.Parse("true"); }
Terwijl dat natuurlijk ook gewoon zo had gekund
C#:
1 2 3 4 5 bool b = false; if (value.Equals("true;")) { b = true; }
Zoals gezegd had het overigens ook opgelost kunnen worden door de value als object mee te geven. Dan kan je aan de hand van de string die het type aangeeft het object weer terugcasten naar een boolean (uiteraard na een check).
Ik ga er overigens van uit dat je in de code de check of je eigenlijk wel een boolean wilt hebben boven het geschreven stukje hebt staan, want anders moet je daar natuurlijk ook rekening mee houden

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Niet echt, de derde parameter definieert het domein van de property, en als je vast gaat leggen dat een boolean een bool als 2e parameter wil ben je dependencies verkeerdom aan het leggen - met het systeem als hier getoond kan de implementor ervoor kiezen om domains toe te voegen zonder de code van Property aan te hoeven passen. Hoogstwaarschijnlijk zal het domain 'BOOLEAN' wel gedefinieerd zijn als een enum waarvan strings "true" en "false" de enige geldige attribute values zijn.AtleX schreef op vrijdag 24 oktober 2008 @ 10:40:
Het herhalen van code is slecht, maar "false" ipv een boolean is ook nogal fout.
Neen gewoon een string.curry684 schreef op vrijdag 24 oktober 2008 @ 15:47:
[...]
Niet echt, de derde parameter definieert het domein van de property, en als je vast gaat leggen dat een boolean een bool als 2e parameter wil ben je dependencies verkeerdom aan het leggen - met het systeem als hier getoond kan de implementor ervoor kiezen om domains toe te voegen zonder de code van Property aan te hoeven passen. Hoogstwaarschijnlijk zal het domain 'BOOLEAN' wel gedefinieerd zijn als een enum waarvan strings "true" en "false" de enige geldige attribute values zijn.
Hij test op de strings "true", "false", en probeert het daarna nog eens met whitespaces getrimt.
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
| public static bool TryParse(string value, out bool result) { result = false; if (value != null) { if ("True".Equals(value, StringComparison.OrdinalIgnoreCase)) { result = true; return true; } if ("False".Equals(value, StringComparison.OrdinalIgnoreCase)) { result = false; return true; } if (m_trimmableChars == null) { char[] destinationArray = new char[string.WhitespaceChars.Length + 1]; Array.Copy(string.WhitespaceChars, destinationArray, string.WhitespaceChars.Length); destinationArray[destinationArray.Length - 1] = '\0'; m_trimmableChars = destinationArray; } value = value.Trim(m_trimmableChars); if ("True".Equals(value, StringComparison.OrdinalIgnoreCase)) { result = true; return true; } if ("False".Equals(value, StringComparison.OrdinalIgnoreCase)) { result = false; return true; } } return false; } |
Going for adventure, lots of sun and a convertible! | GMT-8
Ik denk dat je dan in de problemen gaat komen met je versie met object. Want als je een bool meegeeft kan hij namelijk naar de functie met de bool als parameter maar ook naar versie met object als parameter. Dus ik denk dat je compiler dit niet erg leuk zal vinden (hoewel ik het niet geprobeerd heb).rwb schreef op vrijdag 24 oktober 2008 @ 14:38:
Overigens zou ik gewoon meerdere overloads creeren als je voor bepaalde types ook andere afhandeling hebt, je moet dan toch al code per type schrijven dus waarom niet meteen een goede overload erbij. Je zou dan alsnog een generieke methode met Object kunnen make voor types waar je een generieke afhandeling voor hebt.
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
1
2
3
4
5
6
7
| <td valign="top" >Type dit getal in <img src="captcha.php?rand=96334"></td> <td valign="top"> </td> <td align="left"><input name="antwoord" size="30" maxlength="50"> <input type="hidden" name="antwoordcheck" value="96334"> </td> |
De compiler zal er niet zo'n probleem mee hebben.Gertjan. schreef op vrijdag 24 oktober 2008 @ 16:00:
[...]
Ik denk dat je dan in de problemen gaat komen met je versie met object. Want als je een bool meegeeft kan hij namelijk naar de functie met de bool als parameter maar ook naar versie met object als parameter. Dus ik denk dat je compiler dit niet erg leuk zal vinden (hoewel ik het niet geprobeerd heb).
1
2
3
4
5
6
7
8
9
10
| public class MyTest { public void Test(object test) { } public void Test(bool test) { } } |
Is geen enkel probleem, als je op de volgende manier aanroept word gewoon de juiste methode aangeroepen
1
| myTest.Test( true ); |
Het gaat inderdaad mis als je het op de volgende manier aanroept
1
2
3
| bool b = true; object o = (object)b; Test(o); |
Dit zou je eventueel op kunnen vangen door daar te checken of het een type is waar je een speciale case voor hebt.
De vraag is of de captcha visueel ook 96334 bevatte of dat het alleen een identifier was voor de server om te herleiden over welke captcha het gaat. Als dat het geval is dan zou het geen probleem zijn ( Mits ze niet hergebruikt wordenKabouterSuper schreef op vrijdag 24 oktober 2008 @ 16:05:
Kwam ik gisteren tegen in een online gastenboek:
code:
1 2 3 4 5 6 7 <td valign="top" >Type dit getal in <img src="captcha.php?rand=96334"></td> <td valign="top"> </td> <td align="left"><input name="antwoord" size="30" maxlength="50"> <input type="hidden" name="antwoordcheck" value="96334"> </td>

[Voor 26% gewijzigd door Woy op 24-10-2008 16:15]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Er zijn drie mogelijkheden :rwb schreef op vrijdag 24 oktober 2008 @ 16:12:
De vraag is of de captcha visueel ook 96334 bevatte of dat het alleen een identifier was voor de server om te herleiden over welke captcha het gaat. Als dat het geval is dan zou het geen probleem zijn ( Mits ze niet hergebruikt worden)
- de waarde is 96334
- de randomizer wordt geseed met 96334 (waardoor de in te vullen captcha gelijk is wanneer de seed gelijk is)
- het is een terug vind token
2 daarvan zijn inderdaad dit topic waardig.
De derde mogelijkheid is vervolgens weer onder te verdelen in een token met beperkte korte houdbaarheid en een token met onbeperkte of lange houdbaarheid. Daarvan valt de laatste in dezelfde categorie als optie 2 uit het vorige lijstje.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Langzaam

[Voor 8% gewijzigd door BalusC op 24-10-2008 16:26]
Ik kwam er pas later achter dat "antwoordcheck" ook nog in het formulier wordt meeverstuurd....
Het plaatje bevatte 96334, maar zodra er kleuren gebruikt worden, haak ik af.
[Voor 21% gewijzigd door KabouterSuper op 24-10-2008 16:36]
- .oisyn
- Registratie: September 2000
- Laatst online: 18:22
Demotivational Speaker
:strip_exif()/u/12461/avatar.gif?f=community)
Kon ook toeval zijnKabouterSuper schreef op vrijdag 24 oktober 2008 @ 16:27:
Het plaatje bevatte 96334

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"

[Voor 5% gewijzigd door BalusC op 24-10-2008 18:06]

[Voor 4% gewijzigd door Soultaker op 24-10-2008 19:06]
Dit topic is gesloten.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.
