[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 52 ... 103 Laatste
Acties:
  • 993.657 views

Acties:
  • 0 Henk 'm!

  • Famous Copra
  • Registratie: April 2010
  • Laatst online: 07:32
@Morax

Dank u. Nu is het goed

Acties:
  • 0 Henk 'm!

  • Roytoch
  • Registratie: November 2007
  • Laatst online: 03-10 17:04

Roytoch

Nietes

PHP:
1
2
3
4
5
6
7
8
9
10
function safe($string) {
   
    if(get_magic_quotes_gpc()) {
        return stripslashes($string);
    } else {
        return $string;
    }
    $string = mysql_real_escape_string($string);
    $string = htmlentities($string);        
}


Ik heb sterk het idee dat de return wel wat vroeg komt in de code :P

Welles


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
En sowieso is die hele safe() functie vies: je weet niet eens of je de data in een database propt of gaat tonen maar gaat daar alvast vanuit. Escaping moet je doen als het nodig is.

Ik denk dat dit opzettelijk zo gedaan is, omdat een andere coder daar ook achter kwam.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd het is sowieso vies, want die functie escaped (probeert althans) zowel voor HTML als voor MySql. HTML Escaping zou je alleen moeten doen op het moment dat je HTML output, en database escaping alleen als je met een database communiceert.

“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.”


Acties:
  • 0 Henk 'm!

Verwijderd

Woy schreef op dinsdag 22 februari 2011 @ 12:27:
Idd het is sowieso vies, want die functie escaped (probeert althans) zowel voor HTML als voor MySql. HTML Escaping zou je alleen moeten doen op het moment dat je HTML output, en database escaping alleen als je met een database communiceert.
Dat ligt er aan. Als je bijvoorbeeld forum berichten hebt dan kun je ze best voor beide willen escapen.

Als de user een nieuwe post doet dan wil je hem natuurlijk sowieso escapen voor SQL. De keuze of je hem ook wilt escapen op HTML ligt denk ik een beetje aan wat je aan performance wilt. Als je hem al geescaped in de database zet, hoef je hem dus maar 1 keer te escapen en kun je hem vervolgens gewoon rechtstreeks tonen op de site, maar je verliest dus wel mogelijk wat informatie in je database. Wordt je site niet zoveel bezocht dan kun je er ook voor kiezen om hem pas te escapen bij output. Maar dan gebeurt dit dus wel bij elk bericht, bij elke gebruiker. Dit kan natuurlijk best wel een performance impact hebben.

Het is uiteindelijk een afweging of je je database wel of niet vertrouwd en welke performance je nodig hebt.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op dinsdag 22 februari 2011 @ 12:38:
[...]
Dat ligt er aan. Als je bijvoorbeeld forum berichten hebt dan kun je ze best voor beide willen escapen.
Je kunt er best voor kiezen om ook data te cachen, en dus ook een reeds getransformeerde versie op te slaan, maar dan nog is het idioot om dat in een dergelijke functie te doen waar je al je data door haalt ( Waar dit verdacht veel op lijkt ).

Op het moment dat je aan het cachen bent, dan ben je dus HTML aan het outputten, en dus zul je inderdaad moeten escapen, maar dat heeft nog niet veel met de database te maken. Als je die gecachde versie later weer opslaat in de database, moet je escapen voor de database. Het zijn gewoon 2 compleet losse dingen die niet op een dergelijke manier gecombineerd moeten worden, want ze hebben beiden een compleet ander doel.

[ Voor 30% gewijzigd door Woy op 22-02-2011 12:55 ]

“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.”


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Je kunt het bericht ook zowel opslaan als HTML-escaped als origineel voor het editen.

Acties:
  • 0 Henk 'm!

  • Roytoch
  • Registratie: November 2007
  • Laatst online: 03-10 17:04

Roytoch

Nietes

Davio schreef op dinsdag 22 februari 2011 @ 12:55:
Je kunt het bericht ook zowel opslaan als HTML-escaped als origineel voor het editen.
Er komt geen html data aan te pas, in principe allemaal tekst alleen (naam velden etc), maar het is wel een mooie functie :P

Welles


Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 03-10 10:59
Jammer, maar met uw huidige internetbrowser kunt u deze website niet optimaal gebruiken. Om al onze toepassingen correct te kunnen opstarten, moet u een recentere versie van uw internetbrowser installeren, of een andere gebruiken.
Op https://www.dexia.be/info/nl/iws/home.html in de webbrowser Opera 11.01 :X . Ik word er echt zot van (en de website werkt perfect bij mij). Oké, online bankieren gaat niet in Opera, wat ik ook een zonde vind.

[ Voor 11% gewijzigd door Styxxy op 25-02-2011 14:23 . Reden: code tags -> quote tags ]


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Styxxy schreef op vrijdag 25 februari 2011 @ 13:45:
[...]


Op https://www.dexia.be/info/nl/iws/home.html in de webbrowser Opera 11.01 :x . Ik word er echt zot van (en de website werkt perfect bij mij). Oké, online bankieren gaat niet in Opera, wat ik ook een zonde vind.
if (browser niet herkend) {
browser moet wel niet ondersteund worden, snap het niet ¯\(°_o)/¯
}

Acties:
  • 0 Henk 'm!

  • Tim_bots
  • Registratie: April 2004
  • Laatst online: 28-09 12:02
YopY schreef op vrijdag 25 februari 2011 @ 14:02:
[...]


if (browser niet herkend) {
browser moet wel niet ondersteund worden, snap het niet ¯\(°_o)/¯
}
Een ander voorbeeld is https://www.ziggo.nl/
In de code (onderaan) is te zien dat deze site moeilijk gaat doen met IE6 en opera. Met een mobile browser (G1, android 1.6) krijg je op iedere pagina (middels een alert) te zien "Browser not supported". Best irritant als je iets van ziggo wil opzoeken.

Alvast hartelijk bedankt voor al jullie hulp en reacties, Tim Bots


Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

PHP:
1
2
3
4
5
6
7
function antisql($sql) {
        $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|'|show tables|\\\\)/"),"",$sql);
        $sql = trim($sql);
        $sql = strip_tags($sql);
        $sql = addslashes($sql);
        return $sql;
}

Zo heb ik um :)

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:12

Janoz

Moderator Devschuur®

!litemod

Prachtig slecht programmeer voorbeeld inderdaad.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

Janoz schreef op vrijdag 25 februari 2011 @ 16:02:
Prachtig slecht programmeer voorbeeld inderdaad.
Dus het is beter om in plaats van een functie ervoor te gebruiken elk variable die je wilt gebruiken gewoon allemaal apart te processen in plaats van $security->antisql($whatever); ?

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
Ik dacht dat iedere PHP- programmeur tegenwoordig wel weet dat 'ie zijn input door mysql_real_escape_string(), pg_escape_string(), sqlite_escape_string() of whatever *_escape_string() functie aanwezig is voor de database waar je het in wilt proppen, of gebruik maken van prepared statements, met of zonder PDO.

[ Voor 82% gewijzigd door Jaap-Jan op 25-02-2011 16:35 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom zou je überhaupt SQL keywords en HTML tags uit een string willen filteren? Jij vindt dus dat je bijv. op een forum geen post mag maken met daarin toevallig het woord "select" of een <html> tag. Zoals de post die ik nu maak dus.

sql_regcase() is trouwens deprecated vanaf PHP 5.3
Jaap-Jan schreef op vrijdag 25 februari 2011 @ 16:26:
Ja, want je kunt makkelijk om die keywords heen werken.
Volgens mij vroeg hij zich meer af of de functie an sich onlogisch was en dat ie de body van de functie dus maar her en der moet dupliceren.
Hoe ga je je tegen zoiets wapenen:
' or 1=1#
Dat doet ie al enigszins, met addslashes(). Niet de juiste functie natuurlijk, hij had mysql_real_escape_string() oid moeten gebruiken.

[ Voor 48% gewijzigd door .oisyn op 25-02-2011 16:32 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ja, en wat nou als je bijvoorbeeld een post hebt met die keywords erin als plain text, mag dat dan wel?

Of worden al die woorden overal uitgesloopt.

Je kunt beter mysql_real_escape_string gebruiken, die functie is er speciaal voor gemaakt om SQL-injection tegen te gaan. Eventueel bouw je zelf voor verschillende db-types een data access layer of gebruik je Adodb.

Acties:
  • 0 Henk 'm!

  • Jeffroiscool
  • Registratie: December 2006
  • Laatst online: 29-09 23:46

Jeffroiscool

Proud DD Member! :D

Hmm, simpelste oplossing is dus complete functie eruit slopen en gewoon in mijn databaselayer mysqli_real_escape_string() erin gooien :)

Edit: Ik ben overigens niet "professioneel" php-programmeur dus ik heb niet al te veel gemaakt maar ben wel van plan hier beter in te worden ;)

Edit2: Ik doe ook alles fout he :-(

[ Voor 41% gewijzigd door Jeffroiscool op 25-02-2011 16:52 ]

League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Jeffroiscool schreef op vrijdag 25 februari 2011 @ 16:47:
Hmm, simpelste oplossing is dus complete functie eruit slopen en gewoon in mijn databaselayer mysqli_real_escape_string() erin gooien :)
Nee, je moet je input sanitizen ;) Dan hoef je je daar in de rest van je code geen zorgen meer om te maken. En daarna met prepared statements werken of inderdaad handmatig escapen.

[ Voor 29% gewijzigd door Radiant op 25-02-2011 17:02 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:12

Janoz

Moderator Devschuur®

!litemod

Jeffroiscool schreef op vrijdag 25 februari 2011 @ 16:24:
[...]


Dus het is beter om in plaats van een functie ervoor te gebruiken elk variable die je wilt gebruiken gewoon allemaal apart te processen in plaats van $security->antisql($whatever); ?
Problemen met je functie zijn oa:
1 Compleet onduidelijke functienaam die op geen enkele manier duidelijk maakt wat er gebeurt.
2 Parameter naam impliceert dat je er sql in moet stoppen, maar uit de implementatie blijkt het juist enkel om de tekstvelden die je wilt gebruiken in een query te gaan.
3 Termen worden gefilterd die compleet legitiem kunnen zijn.
4 De functie maakt het compleet onmogelijk om iets met een apostrof op te slaan (denk aan 's avonds of Mijnheer d'Ancona).
5 De functie maakt het compleet onmogelijk om iets met een backslash op te slaan (denk aan een windows directory).
6 Ook iets wat tussen een < en een > staat zou volledig legitiem kunnen zijn.
7 Er wordt gebruik gemaakt van de verkeerde escape functie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Radiant schreef op vrijdag 25 februari 2011 @ 17:01:
[...]


Nee, je moet je input sanitizen ;)
Wat hij voorstelde is precies wat hij moet doen. Of prepared statements gebruiken idd, maar dat maakt niet zoveel uit. Het gaat erom dat je de escaping pas bij versturen van je database goed maakt, en niet zodra je die binnenkrijgt. Het sanitizen van input is nogal input-afhankelijk. Om de post van een forum er maar weer bij te halen, daar valt weinig aan te sanitizen. Het topic-id waar die post in terecht moet komen dan weer wel.

[ Voor 20% gewijzigd door .oisyn op 25-02-2011 17:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Tim_bots schreef op vrijdag 25 februari 2011 @ 14:42:
[...]

Een ander voorbeeld is https://www.ziggo.nl/
In de code (onderaan) is te zien dat deze site moeilijk gaat doen met IE6 en opera. Met een mobile browser (G1, android 1.6) krijg je op iedere pagina (middels een alert) te zien "Browser not supported". Best irritant als je iets van ziggo wil opzoeken.
Op mijn android-telefoon vraagt hij dan automatisch of ik de user-agent wil switchen. Dus als de mogelijkheid bestaat voor jou om user-agent te switchen. DOEN! Wel terugzetten daarna want anders krijg je ook niet meer dat je mobile websites laadt.

[ Voor 13% gewijzigd door Verwijderd op 25-02-2011 17:45 ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
Zo, even een lap code herschreven zodat het wat leesbaarder, efficiënter en compacter is. De code was echt om te janken :(

Ik merk wel dat ik sinds het lezen van Clean Code veel beter ben geworden in het netter maken van code. Ondanks dat er een hoop obvious dingen in staan heb ik er ook veel van geleerd :)

Hadden de bouwers van deze code dat boek maar gelezen...

[ Voor 8% gewijzigd door Avalaxy op 25-02-2011 18:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als het met een lezen van een boek beter zou zijn valt het nog mee.. Ik kom nu nog wel eens code tegen waarvan ik niet weet wat ik moet denken, diegene die dat geschreven heeft kan beter een carriere-switch overwegen. :9 Maar dat gaat dan niet om hoe netjes de code is (wat trouwens ook om te huilen is), maar dat het niet werkt en nooit zou kunnen werken. :')

Klein voorbeeldje:

Betaling via PayPal krijg je een callback van de PayPal-server, en dat werd dan zo afgehandeld:
PHP:
1
2
3
4
5
6
7
8
// http://example.com/paypal/123
function paypal($orderId) {
    if ($orderId != $_POST['blaat']) {
        exit;
    }
    $this->Order->id = $orderId;
    $this->Order->betaald();
}

In eerste instantie dacht ik er alleen aan dat gebruikers er mee zouden kunnen kloten, maar toen ik betere keek, zag ik dat er geen check in zat voor de betaalstatus. En er stonden inderdaad al wat facturen op "Betaald" waarvan de betaling "Pending"/"Failed" was... _O-

Acties:
  • 0 Henk 'm!

  • Tim_bots
  • Registratie: April 2004
  • Laatst online: 28-09 12:02
Verwijderd schreef op vrijdag 25 februari 2011 @ 17:44:
[...]

Op mijn android-telefoon vraagt hij dan automatisch of ik de user-agent wil switchen. Dus als de mogelijkheid bestaat voor jou om user-agent te switchen. DOEN! Wel terugzetten daarna want anders krijg je ook niet meer dat je mobile websites laadt.
offtopic:
Welke android telefoon heb jij dan? Op mijn G1 (stock android 1.6) heb ik deze vraag nog nooit gezien

Het is natuurlijk zeer vreemd dat je je "user-agent" moet aanpassen om een beetje fatsoenlijk met een web-site te werken. Ook een slecht voorbeeld van sommige programmeer kunsten. ;)

Alvast hartelijk bedankt voor al jullie hulp en reacties, Tim Bots


Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 18-09 16:32
Verwijderd schreef op zaterdag 26 februari 2011 @ 11:50:
Klein voorbeeldje:

Betaling via PayPal krijg je een callback van de PayPal-server, en dat werd dan zo afgehandeld:
PHP:
1
2
3
4
5
6
7
8
// http://example.com/paypal/123
function paypal($orderId) {
    if ($orderId != $_POST['blaat']) {
        exit;
    }
    $this->Order->id = $orderId;
    $this->Order->betaald();
}

In eerste instantie dacht ik er alleen aan dat gebruikers er mee zouden kunnen kloten, maar toen ik betere keek, zag ik dat er geen check in zat voor de betaalstatus. En er stonden inderdaad al wat facturen op "Betaald" waarvan de betaling "Pending"/"Failed" was... _O-
Het werkt toch? :+

Acties:
  • 0 Henk 'm!

Verwijderd

Ja, inderdaad. En de mensen waarbij de betaling niet gelukt is, hebben we de producten cadeau gedaan! :+

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Verwijderd schreef op zondag 27 februari 2011 @ 20:41:
[...]

Ja, inderdaad. En de mensen waarbij de betaling niet gelukt is, hebben we de producten cadeau gedaan! :+
Wel knap dat die mensen hebben gevonden welke URL/post ze moeten gebruiken om jullie systeem te laten geloven dat de betaling gelukt is. Via een get/querystring is het makkelijk te zien en te faken, maar een post analyseren en simuleren kost toch wel iets meer moeite (is het nog niet moeilijk overigens).

Misschien dat iemand iets "gelekt" heeft over het gat? Een post faken zou niet direct bij mij opkomen namelijk. Maar iemand die zo'n mooi gat weet te vinden "gun" je toch wel een gratis product :*)

Een querystring in de URL aanpassen is altijd leuk om te doen, als er een orderId staat even eentje er vanaf trekken en kijken of je de order van een ander kan zien. Soms blijven die lekken ontzettend lang onopgemerkt, heb er zelf ooit een ontdekt bij de Nationale Tijdschriften Bon, kon gewoon in andere orders kijken. Dit maar even gemeld aan hun helpdesk (leek me wel netjes, sommige mensen melden het eerst aan GeenStijl ofzo), want niemand hoeft te weten dat ik de playboy Donald Duck heb besteld ;)

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.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Het kan toch dat de transactie door een storing of door onvoldoende saldo is mislukt? :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Als ik het goed begrijp is het nog iets anders: de betaling wordt gestart, er wordt naar PayPal geredirect, waar de betaling mislukt/wordt geannuleerd. De klant wordt teruggeredirect naar het systeem (adhv een opgegeven return URL), en het systeem registreert hoe dan ook de status als "betaald" zonder eerst te checken of dat ook zo is volgens PayPal.

Klopt het?

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Dat is wat ik ook dacht, Alex.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Mmm, dat kan natuurlijk ook nog zijn. Dacht dat dit een aparte call was die alleen werd gedaan bij gelukte betalingen. Had namelijk ook mogelijk geweest dat je opgeeft welke URL moet worden gebruikt bij succes en bij fail.

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.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
.Gertjan. schreef op maandag 28 februari 2011 @ 10:16:
[...]

Mmm, dat kan natuurlijk ook nog zijn. Dacht dat dit een aparte call was die alleen werd gedaan bij gelukte betalingen. Had namelijk ook mogelijk geweest dat je opgeeft welke URL moet worden gebruikt bij succes en bij fail.
Zo werkt iDeal ook ja. Maar die url kan je alsnog uit je formulier halen omdat die wordt gePOST'd naar de iDeal server. Dus als je alsnog bij die success-url je betaling als betaald markeert ben je er nog niet.

De PayPal "simpele" oplossing (gewoon formulier met emailadres van ontvanger) heeft geen mogelijkheid tot feedback. In ons eCommerce systeem moeten eigenaren de transacties dus altijd handmatig op betaald zetten. Bij iDeal kan het wel, maar dan via de XML callback url die je in de interface kan aangeven (iDeal basic dan). Op die manier weet je wel zeker dat een betaling voltooid is :)

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 02-10 09:47
Vandaag heb ik een klasgenoot geholpen met z'n website/CMS.

Aan de website was qua code een hoop mis, maar twee dingen vielen me gelijk op. Een pagina redirecten deed hij door de volgende code:

PHP:
1
echo "<script>javascript:location.replace('/zoeken')</script>";


Toen ik vroeg waarom hij dat niet deed door middel van een header redirect, liet hij mij z'n index.php zien. En toen begreep ik het. Spaghetticode van hier tot Tokyo. Maar een ob_start() en een ob_end_flush() hielpen hem al daarmee. Het is niet de meest handige manier om dit op te lossen, maar het werkt voor hem wel.

Toen ik vroeg wat hij deed aan SQL-Injectie zei hij dat hij er wel eens wat van gehoord had, maar dat hij het niet nodig vond. Toen ik vroeg of ik in mocht loggen op z'n website, vond hij het goed want dat ging toch niet lukken.

Dus ik log in met gebruikersnaam 'wim' en wachtwoord "' OR admin = 1 --". (Hij had z'n datamodel ook laten zien) Daar schrok hij van. En terecht. Ik heb hem netjes geholpen door dat op te lossen, want hij haalde wel alle input door een of andere functie heen.

Acties:
  • 0 Henk 'm!

Verwijderd

Alex) schreef op maandag 28 februari 2011 @ 09:08:
Als ik het goed begrijp is het nog iets anders: de betaling wordt gestart, er wordt naar PayPal geredirect, waar de betaling mislukt/wordt geannuleerd. De klant wordt teruggeredirect naar het systeem (adhv een opgegeven return URL), en het systeem registreert hoe dan ook de status als "betaald" zonder eerst te checken of dat ook zo is volgens PayPal.

Klopt het?
Jep, dat klopt. Inmiddels is het omgebouwd. Krijg nu een post met alle data, waaronder de betaalstatus. Dan doe ik nog een call naar PayPal-server om te controleren of de POST echt is. Nu klopt het dus wel. :+ Is ook zoals PayPay het zelf laat zien. :Y

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 08:57

Matis

Rubber Rocket

Een juweeltje, zojuist door mij geproduceerd:
C:
1
2
3
4
5
6
7
8
uint16_t input0 = 0;
/* Doe dingen met input0 */
if ((input0 & 0x0010) == 1) {
/* Doe waar */
}
else {
/* Doe onwaar */
}

En ik maar afvragen waarom hij nooit in de "Doe waar" clausule kwam |:( :')

Ik bedoelde dus dit:
C:
1
if ((input0 & 0x0010) != 0) {


Maar het bitje zat eerst op index 0, maar is nu verschoven naar index 4 :p

[ Voor 21% gewijzigd door Matis op 01-03-2011 16:03 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Jeuj, weer ruzie met Delphi. Er wordt een Query-component gebruikt met daarin parameters en SQL gespecificeerd.

De SQL is als volgt opgebouwd:
SQL:
1
2
3
4
exec Foo
  :Param1,
  :Param2,
  :Param3


Dat gebruik je vervolgens in code als volgt:
Delphi:
1
2
3
4
5
6
7
8
with QueryComponent do
begin
  ParamByName('Param1').AsString := 'Foo';
  ParamByName('Param2').AsString := 'Bar';
  ParamByName('Param3').AsString := 'Baz';

  ExecSQL();
end;


In mijn naïviteit had ik gehoopt dat ExecSQL de parameters hard zou koppelen, maar nee, hij pakt gewoon de volgorde uit de SQL-property. Dus stel je hebt de volgende SP:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
create procedure Foo
    @Param1 varchar(20),
    @Param2 varchar(20),
    @Param3 varchar(20)
as
begin

    print 'Param1: ' + ISNULL(@Param1, '<null>');
    print 'Param2: ' + ISNULL(@Param2, '<null>');
    print 'Param3: ' + ISNULL(@Param3, '<null>');
    
END


Maar nee, de parameters die je aan het query-component toekent zijn enkel voor in code en ":Param" wordt in de uitgevoerde SQL vervangen door enkel de inhoud van die parameter, dus het wordt als volgt uitgevoerd:
SQL:
1
exec Foo 'Foo', 'Bar', 'Baz',


En niet, zoals ik verwachtte:
SQL:
1
exec Foo @Param1 = 'Foo', @Param2 = 'Bar', @Param3 = 'Baz',


Dus. :P Dat gaat niet goed als je na Param2 nog een parameter toevoegt... 8)7

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Zat met een vreemde bug hier, bleek hier aan te liggen:
PHP:
1
2
3
$test = array('foo', 'bar', 'wtfbbq');
var_dump(in_array(0, $test));
// output: bool(true)

[ Voor 4% gewijzigd door Michali op 04-03-2011 14:20 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 08:57

Matis

Rubber Rocket

in_array is sws een ranzige functie. Met de strict-vlag op true lijkt hij nog enigszins te vertrouwen, maar ik doorloop liever zelf het array, opdat ik weet waarop ik check :P

Edit; komt dat door de key-waarde van 0, waardoor hij op true triggerd?

[ Voor 17% gewijzigd door Matis op 04-03-2011 14:33 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
in_array checkt op value. Ik denk dat de string waardes naar een int geconverteerd worden.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

In PHP termen doet ie voor ieder element gewoon "if ($element == $value)". Met strict op true gebruikt ie ===.

[ Voor 20% gewijzigd door .oisyn op 04-03-2011 15:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
En de tabel (loose comparisons) zegt daarover dat 0 == $string (waarbij string geen getal is) altijd true oplevert.

[ Voor 9% gewijzigd door Jaap-Jan op 04-03-2011 16:03 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Soms code ik te snel en gebruik referecens wherever possible. Zie hier t gevolg uncomment 'curImage'
en de neigbourlist gaat de fout in!!

C++:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
int alPhotoStruct::buildViewClusters()
{
    int numViews        = m_imageMatches.size();
    int numClusters     = 0;
    //reset
    std::vector<bool> processedList;
    for( int i = 0; i < numViews; i++ )
        processedList.push_back( false );
    

    

    for( int i = 0; i < numViews; i++ )
    {
        //already done
        if( processedList[i] )
            continue;

        //alImageMatches &curImage = m_imageMatches[i];
        
        //(PAUL) Uncomment to ignore isolated views
        //if( !curImage.m_neighBourList.size() )
        //  continue;
            
        alImageViewClusters curCluster; 
        
        std::stack<int> viewList;
        
        //push neigbours onto stack
        for( int j = 0; j < m_imageMatches[i].m_neighBourList.size(); j++ )
            viewList.push( m_imageMatches[i].m_neighBourList[j] );      
        //push self onto stack
        viewList.push( i );
        
        //start building cluster list
        while( !viewList.empty() )
        {
            int viewIndex = viewList.top();
            viewList.pop();

            if( !curCluster.containsView( viewIndex ) )
            {
                //mark as processed
                processedList[viewIndex] = true;
                //add view to cluster
                curCluster.addView( viewIndex );            

                //push neigbours onto stack
                for( int j = 0; j < m_imageMatches[viewIndex].m_neighBourList.size(); j++ )
                    viewList.push( m_imageMatches[viewIndex].m_neighBourList[j] );

                //curImage = m_imageMatches[i];
                //for( int j = 0; j < curImage.m_neighBourList.size(); j++ )
                //  viewList.push(  curImage.m_neighBourList[j] );

            }
        }
        if( curCluster.m_imageViews.size() )
        {
            m_viewClusters.push_back( curCluster );
            numClusters++;      
        }
        else
        {
            wxLogMessage( wxT( "Warning --> alPhotoStruct::buildViewClusters() Empty Cluster Found" ) );
            //die anyway!
            exit( 666 );
        }   
        if( m_verbose )
        {
            wxString txt( wxT( "View Cluster Image Pairs Found -> " ) );            
            int size = curCluster.m_imageViews.size();
            for( int i = 0; i < size; i++)
            {
                txt << curCluster.m_imageViews[i];
                txt << wxT(", ");
            }
            wxLogMessage( txt );                
        }
    }   
    return numClusters;

}

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@Gorgorath: Dat past idd beter hier in slechtste programmeervoorbeelden aangezien er geen vraag gesteld, dus *trap*

[ Voor 15% gewijzigd door Woy op 04-03-2011 16:12 ]

“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.”


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 04-10 21:59
Jaap-Jan schreef op vrijdag 04 maart 2011 @ 16:03:
En de tabel (loose comparisons) zegt daarover dat 0 == $string (waarbij string geen getal is) altijd true oplevert.
Dat is ook logisch ;)

Want 0 is een int, dus convert ie $string ook naar een int, en (int) "foo" wordt 0. En laat - zelfs in php - 0 gelijk zijn aan 0.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

Verwijderd

Woy schreef op vrijdag 04 maart 2011 @ 16:09:
Dit past idd beter in slechtste programmeervoorbeelden aangezien er geen vraag gesteld.
owh sorry, daar wilde ik hem plaatsen;)

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
Freeaqingme schreef op vrijdag 04 maart 2011 @ 16:12:
[...]


Dat is ook logisch ;)

Want 0 is een int, dus convert ie $string ook naar een int, en (int) "foo" wordt 0. En laat - zelfs in php - 0 gelijk zijn aan 0.
Ik vind er niets logisch aan dat een string 'zomaar' wordt gedowncast naar een int, maar dat ben ik. Deze discussie hebben we al eens eerder gehad, volgens mij zelfs in dit topic/ deze topicreeks.

Dit zijn gewoon de quirks van PHP. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:12

Janoz

Moderator Devschuur®

!litemod

Freeaqingme schreef op vrijdag 04 maart 2011 @ 16:12:
[...]


Dat is ook logisch ;)

Want 0 is een int, dus convert ie $string ook naar een int, en (int) "foo" wordt 0. En laat - zelfs in php - 0 gelijk zijn aan 0.
Ik neem aan dat je sarcastisch bent..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Er zit wel logica achter, want PHP heeft wel types. Het volgende werkt wel zoals je verwacht:

PHP:
1
2
3
4
<?php
$a = array("A","B","C");
var_dump(in_array("0",$a));
?>


Het was gewoon een programmeer fout; je wilt de string 0 vergelijken, niet de int 0.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
De enige reden die ik kan verzinnen is omdat ints vergelijken sneller gaat dan stringvergelijkingen. Ik zie met geen enkele andere mogelijkheid waarom 0 gelijk is aan 'hoi'.

De enige logica die ik zie is booleanse logica. ;)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jaap-Jan schreef op vrijdag 04 maart 2011 @ 17:35:
De enige reden die ik kan verzinnen is omdat ints vergelijken sneller gaat dan stringvergelijkingen.
De reden is omdat ze niet bedacht hebben dat ze de moeite konden nemen om te kijken of de string wel converteerbaar is. Ze doen gewoon atoi(), en het resultaat daarvan vergelijken ze met de int. Ja, maar atoi() returnt idd 0 als de string niet klopt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 04-10 20:59

StM

Ik heb nog zo'n leuke case, net gevonden:

PHP:
1
2
3
4
5
<?php

class A {}

new A(new ThisIsANotExistingClass());


Wat doet dit? :P

Ik heb het trouwens alleen getest in PHP 5.3

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
Hij geeft geen output bij mij. Wat zou het moeten doen dan? Ik verwacht een error dat:

a) ThisIsANotExistingClass niet bestaat
b) Class A geen parameters aanneemt omdat je geen constructor met parameter hebt

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 04-10 21:27
Avalaxy schreef op vrijdag 04 maart 2011 @ 21:59:
Hij geeft geen output bij mij. Wat zou het moeten doen dan? Ik verwacht een error dat:

a) ThisIsANotExistingClass niet bestaat
b) Class A geen parameters aanneemt omdat je geen constructor met parameter hebt
Nog niet getest, maar ik verwacht:

code:
1
Fatal error: class ThisIsANotExistingClass not found in .....


[edit]
Na het testen: Het wordt blijkbaar genegeerd, geen enkele fout te zien, ook niet met errorexception. Code na deze regels wordt gewoon uitgevoerd.

[ Voor 15% gewijzigd door EdwinG op 04-03-2011 22:05 ]

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 04-10 20:59

StM

Hij geeft idd geen output. Hij voert wat er tussen de () staat niet uit als er geen constructor is. Daarom krijg je geen fatal error van dat hij die class niet kan vinden. B is het sowieso niet, want PHP checkt daar niet op (je kan immers ook variabele parameters gebruiken).

Leuk edge case waar ik dus net tijdens een project achterkom omdat ik een nieuwe class nog niet gemaakt had maar al wel ergens gebruikte.

[ Voor 20% gewijzigd door StM op 04-03-2011 22:04 ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
StM schreef op vrijdag 04 maart 2011 @ 22:02:
want PHP checkt daar niet op (je kan immers ook variabele parameters gebruiken).
Dat PHP daar niet op checkt wist ik niet. Maar variabele parameters gaat natuurlijk niet op als je meer parameters invoert dan dat er bestaan, alleen andersom (normaal gesproken dan).

Wel stom trouwens dat je in PHP zelf geen method overloading kan doen maar dat de PHP functions het zelf wel hebben ;(

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 04-10 20:59

StM

Op te weinig parameters checkt hij wel, maar nu geven we er 1 te veel op ;)

En wat bedoel je met die overloading?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php


class A { public function func() { echo 'A::Func'; } }

class B extends A { public function func($b) { echo 'B::Func('.$b.')'; } }

$a = new A();
$a->func();

echo "\n";

$b = new B();
$b->func(1);

echo "\n";


Doet gewoon wat ik zou verwachten hoor? Of bedoel je wat anders?

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
Dan maak je gebruik van overriding. Ik bedoel overloading, dus het hebben van meerdere methods met dezelfde naam binnen één class.

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 04-10 20:59

StM

Aah zo, ja dat kan idd niet. Dat zal wel te lastig in de engine te hacken zijn geweest.

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Voor degelijke overloading heb je type-informatie nodig. En aangezien het typesysteem van PHP nou niet bepaald krachtig is is het lastig om overloading te implementeren.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
En met een combinatie van default arguments en in de functie zelf verschillende types ondersteunen kun je ook hetzelfde bereiken, dus er is niet echt een noodzaak voor function overloading.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Avalaxy schreef op vrijdag 04 maart 2011 @ 22:05:
[...]


Dat PHP daar niet op checkt wist ik niet. Maar variabele parameters gaat natuurlijk niet op als je meer parameters invoert dan dat er bestaan, alleen andersom (normaal gesproken dan).

Wel stom trouwens dat je in PHP zelf geen method overloading kan doen maar dat de PHP functions het zelf wel hebben ;(
Je kunt juist wel meer parameters opgeven dan er bestaan:

PHP:
1
2
3
4
5
6
7
function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs\n";
}

foo(1, 2, 3);


Zie de functies func_num_args(), func_get_arg() en func_get_args().

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 09:56
Spockz schreef op zaterdag 05 maart 2011 @ 11:35:
Voor degelijke overloading heb je type-informatie nodig. En aangezien het typesysteem van PHP nou niet bepaald krachtig is is het lastig om overloading te implementeren.
In de trunk versie van PHP is het inmiddels wel mogelijk om iets als 'bla(int $a, string $b)' te.schrijven, dus dan moeten ze dit ook kunnen gaan implementeren.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 04-10 20:44
StM schreef op vrijdag 04 maart 2011 @ 22:18:
Aah zo, ja dat kan idd niet. Dat zal wel te lastig in de engine te hacken zijn geweest.
Tuurlijk wel. Jaren geleden al iets over geschreven.

Practisch is anders tho'.
hostname schreef op zaterdag 05 maart 2011 @ 13:03:
In de trunk versie van PHP is het inmiddels wel mogelijk om iets als 'bla(int $a, string $b)' te.schrijven, dus dan moeten ze dit ook kunnen gaan implementeren.
Dat kun je nu ookal doen afaik, alleen wordt er voor primitieven niet op gechecked. Voor objecten wel al, dus als je netjes OOP werkt kom je een heel eind.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
Spockz schreef op zaterdag 05 maart 2011 @ 11:35:
Voor degelijke overloading heb je type-informatie nodig. En aangezien het typesysteem van PHP nou niet bepaald krachtig is is het lastig om overloading te implementeren.
Mwah. Je hoeft niet per sé het type op te geven, je kunt natuurlijk ook gewoon een method maken met 1 param, een method met 2 params, een met 3, etc.
Jaap-Jan schreef op zaterdag 05 maart 2011 @ 11:48:
En met een combinatie van default arguments en in de functie zelf verschillende types ondersteunen kun je ook hetzelfde bereiken, dus er is niet echt een noodzaak voor function overloading.
Ja maar dat is ranzig :P

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Avalaxy schreef op zaterdag 05 maart 2011 @ 13:49:
[...]


Mwah. Je hoeft niet per sé het type op te geven, je kunt natuurlijk ook gewoon een method maken met 1 param, een method met 2 params, een met 3, etc.
Zonder dat je het type weet van de parameter in de functie header en de daadwerkelijk gegeven parameter wordt het lastig kiezen voor de compiler welke functie instance hij daadwerkelijk moet gebruiken voor die call. Dat soort dingen moeten helder zijn. Het type-hinting in PHP is een stap in de goede richting maar het typesysteem is niet genoeg verwoven met de rest van het systeem om overloading goed mogelijk te maken. Het zou nu eventueel wel kunnen voor parameters afgeleid van objecten maar dat is maar een halve oplossing en het zou eigenlijk gewoon helemaal goed moeten werken, anders kan je het gewoon niet uitbrengen.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 30-09 21:00

r0b

mithras schreef op maandag 28 februari 2011 @ 10:56:
[...]
De PayPal "simpele" oplossing (gewoon formulier met emailadres van ontvanger) heeft geen mogelijkheid tot feedback. In ons eCommerce systeem moeten eigenaren de transacties dus altijd handmatig op betaald zetten. Bij iDeal kan het wel, maar dan via de XML callback url die je in de interface kan aangeven (iDeal basic dan). Op die manier weet je wel zeker dat een betaling voltooid is :)
Jawel hoor; voor de "simpele oplossing" (Website Payments Standard) kan je gewoon notify_url meegeven om een POST met informatie over de transactie te ontvangen. Vervolgens verifiëren door het naar https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate te sturen.
Eenzelfde met Express Checkout overigens; met NOTIFYURL in je SetExpressCheckout call.

/laat

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 04-10 10:42
hostname schreef op zaterdag 05 maart 2011 @ 13:03:
[...]

In de trunk versie van PHP is het inmiddels wel mogelijk om iets als 'bla(int $a, string $b)' te.schrijven, dus dan moeten ze dit ook kunnen gaan implementeren.
Ik heb het niet kunnen vinden in de trunk, linkje?

[ Voor 31% gewijzigd door Manuel op 05-03-2011 16:38 ]


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Manuel schreef op zaterdag 05 maart 2011 @ 16:36:
[...]

Dat gaat hem niet worden jammer genoeg, zie ook deze quote:

[...]


Type Hinting
Hij zegt toch ook dat het nu mogelijk is in de trunk en niet in een gereleasede versie (dus een versie waar die documentatie op gebaseerd is)? :)

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 04-10 10:42
@Spockz: Inderdaad, had het even verkeerd gelezen. :) Heb zojuist even in de trunk zitten te zoeken maar ik kan het maar niet vinden.

Edit:
Patch en motivatie gevonden, zie ook: http://wiki.php.net/rfc/typecheckingstrictandweak

[ Voor 26% gewijzigd door Manuel op 05-03-2011 16:51 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
r0b schreef op zaterdag 05 maart 2011 @ 16:36:
[...]


Jawel hoor; voor de "simpele oplossing" (Website Payments Standard) kan je gewoon notify_url meegeven om een POST met informatie over de transactie te ontvangen. Vervolgens verifiëren door het naar https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate te sturen.
Eenzelfde met Express Checkout overigens; met NOTIFYURL in je SetExpressCheckout call.

/laat
Door de post waarop ik reageerde ben ik ook gaan zoeken, en kwam achter deze feature inderdaad :) Instant Payment Notification heet het en daar kan je kennelijk ook automatisch betalingen mee controleren. Best wel fijn, want zo hoeft dat niet meer handmatig!

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

mithras schreef op zaterdag 05 maart 2011 @ 17:07:
[...]
Door de post waarop ik reageerde ben ik ook gaan zoeken, en kwam achter deze feature inderdaad :) Instant Payment Notification heet het en daar kan je kennelijk ook automatisch betalingen mee controleren. Best wel fijn, want zo hoeft dat niet meer handmatig!
Gefeliciteerd, nu heb je de dame van de kassa wegbezuinigd. ;)

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
PHP:
1
$passhash = sha1(sprintf("oliebollen met poedersuiker %s %s", $password, $salt));


gniffel

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 30-09 21:00

r0b

mithras schreef op zaterdag 05 maart 2011 @ 17:07:
[...]
Door de post waarop ik reageerde ben ik ook gaan zoeken, en kwam achter deze feature inderdaad :) Instant Payment Notification heet het en daar kan je kennelijk ook automatisch betalingen mee controleren. Best wel fijn, want zo hoeft dat niet meer handmatig!
Klopt. https://www.paypal.com/ipn
Ze hebben ook PDT - Payment Data Transfer, mocht je realtime betalingstatus aan de koper willen laten zien; https://www.paypal.com/pdt

Enfin, * r0b gaat weer verder lurken :+

[ Voor 5% gewijzigd door r0b op 05-03-2011 20:19 ]


Acties:
  • 0 Henk 'm!

  • Vinnienerd
  • Registratie: Juli 2000
  • Nu online
Gamebuster schreef op zaterdag 05 maart 2011 @ 19:12:
PHP:
1
$passhash = sha1(sprintf("oliebollen met poedersuiker %s %s", $password, $salt));


gniffel
Afbeeldingslocatie: http://www.inquisitr.com/wp-content/wat.jpg

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Gamebuster schreef op zaterdag 05 maart 2011 @ 19:12:
PHP:
1
$passhash = sha1(sprintf("oliebollen met poedersuiker %s %s", $password, $salt));


gniffel
Ach, dit is nog niet eens zo heel erg, zolang de salt maar random is en per password verschilt. En per verandering van de password ook verandert.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Spockz schreef op zaterdag 05 maart 2011 @ 22:01:
[...]

Ach, dit is nog niet eens zo heel erg, zolang de salt maar random is en per password verschilt. En per verandering van de password ook verandert.
Het is niet erg, ik vond het gewoon grappig :9

$salt is idd anders per account/wachtwoord.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
Wikipedia: Rubber duck debugging ;) Collega heeft dus ook een rubber duck van een 30 cm hoog op z'n bureau 8)7

Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 04-10 13:15

Hmail

Doet ook maar wat.

PHP:
1
2
3
4
// rare erros met indexes enzo weg
ini_set("display_errors", 0);
$query = $sql->query("SELECT `privileges` FROM role WHERE id = (SELECT role FROM privilege WHERE privilege = (SELECT privilege FROM user WHERE user = '$SESSION[user]'))");
extract($sql->fetch_assoc($query));


Ik probeer me de laatste tijd dagelijks door dit soort code heen te wroeten. Alleen het bovenstaande geeft al een indicatie aan hoe slecht de code is. En nee, $SESSION is geen typo, de originele ontwikkelaar begreep sessies niet, en heeft toen maar een global $SESSION gemaakt die in iedere functie aangeroepen wordt. Natuurlijk is dan ook de oplossing voor de notice "undefined index" gewoon het uitzetten van de errors.

Nog zo'n vraag.. Hoe hou je bij hoeveel berichten een user heeft? Simpel. Je doet gewoon SELECT * FROM posts WHERE user = xyz, en vervolgens een mysql_num_rows. Maarja. Dan heb je ook de posts die naar de 'prullenbak' geplaatst zijn. Eitje. Nogmaals een SELECT * FROM posts, dan nog een keer SELECT * FROM posts WHERE forum = prullenbak (pseudocode uiteraard). Van beide mysql_num_rows, en dan trek je het resultaat van de tweede af van de eerste.
En dat op een "forum" met > 2.000.000 berichten. En het werkt allemaal nog redelijk. Tja, als het te traag wordt zet je gewoon een aparte databaseserver op.

Gelukkig hebben we volgende week de migratie naar PHPBB. Ook geen utopie, maar met deze code begin je er verliefd op te worden.

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 23:22
Haha, een paarduizend records fetchen om daarna voor elk resultaat weer een nieuwe query uit te voeren om de bijbehorende data op te halen ben ik ook tegengekomen...

Of de complete tabel fetchen en vervolgens met PHP de output limitten tot ~max 100 :')

Maar ik ben het nog veel erger tegengekomen, zal eens wat voorbeeldjes posten als ik er weer een tegenkom :)

Acties:
  • 0 Henk 'm!

Verwijderd

Avalaxy schreef op zaterdag 05 maart 2011 @ 23:34:
Of de complete tabel fetchen en vervolgens met PHP de output limitten tot ~max 100 :')
Hier valt in sommige scenario's best wel wat voor te zeggen. Helaas meestal niet ;)

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 04-10 12:10
Verwijderd schreef op zondag 06 maart 2011 @ 04:05:
[...]

Hier valt in sommige scenario's best wel wat voor te zeggen. Helaas meestal niet ;)
Ik ben benieuwd of je een voorbeeld kan geven. Want ik kan er zo snel geen verzinnen :).

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

alex3305 schreef op zondag 06 maart 2011 @ 23:19:
Ik ben benieuwd of je een voorbeeld kan geven. Want ik kan er zo snel geen verzinnen :).
Een bewerking op de data moeten uitvoeren die niet door de database gedaan kan worden, waarop vervolgens gesorteerd moet/kan worden? Niet ondenkbaar in ieder geval.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Erkens schreef op zondag 06 maart 2011 @ 23:29:
Een bewerking op de data moeten uitvoeren die niet door de database gedaan kan worden, waarop vervolgens gesorteerd moet/kan worden? Niet ondenkbaar in ieder geval.
En waarbij je het ook maar eenmaal hoeft uit te lezen (of die in tijd verandert). Anders had je het die bewerking immers al bij het inserten uit kunnen voeren.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
alex3305 schreef op zondag 06 maart 2011 @ 23:19:
[...]

Ik ben benieuwd of je een voorbeeld kan geven. Want ik kan er zo snel geen verzinnen :).
Simpelweg als je gegevens van een 3e nodig hebt om te bepalen of je het aan de gebruiker mag tonen.

Omgekeerd voorbeeld had ik tijdje terug met een externe zoekmachine, dat ding ondersteunde wel pagination maar geen uitgebreide security rights (die stonden in de db), kreeg je het leuk verschijnsel dat de pagination naar minimaal 500+userpref ging, waarna dat resultaat richting dbase ging waar de security rights erbij betrokken werden om de artikelen te tonen ( en dan was er in 1e instantie vaak nog een ajax call nodig omdat bijv de 1e 600 results weggeprofiled waren ).

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Nu online

Onbekend

...

Het volgende is vergelijkbaar met wat wij bij ons in de software hadden gevonden. We hebben dus een programma die gegevens per week laat zien. Dit kan per klant anders zijn, vandaar deze vergelijkbare database query's:

SELECT FieldDate FROM CalenderDates WHERE WeekNumber = 52 AND YEAR(FieldDate) = 2011 ORDER BY FieldDate LIMIT 1

SELECT FieldDate FROM CalenderDates WHERE WeekNumber = 52 AND YEAR(FieldDate) = 2011 ORDER BY FieldDate DESC LIMIT 1


Resultaat van de eerste query is 2011-01-01 en van de tweede query is 2011-12-31, dus die week beslaat 365 dagen. :+
Na een tijdje zoeken heb ik de oorzaak gevonden, en het blijkt dus dat de eerste dag van dit jaar in week 52 van vorig jaar viel. Morgen maar eens kijken of we een eenvoudige ( en snelle en definitieve) oplossing hiervoor hebben. :)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Zie Wikipedia: Seven-day week # Week numbering. Gevalletje slecht normaliseren: zowel de datum als het weeknummer zijn opgeslagen - wat redundante informatie is, en dat laatste doe is bovendien fout gedaan: een week hoort bij een bepaald jaar, maar dat hoeft niet het jaar te zijn waar de dag in ligt! (zie die wikipedia-pagina).

Oplossing: je weekkolom laten vervallen en MSDN: DATEPART (Transact-SQL) gebruiken (of de vergelijkbare functie van je favoriete DB vendor).

[ Voor 4% gewijzigd door ValHallASW op 09-03-2011 21:48 ]


Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Nu online

Onbekend

...

En zoals Wikipedia al aangeeft, is dat per werelddeel verschillend. Voor internationaal opererende klanten gaat dat niet altijd goed werken.....
MSSQL geeft trouwens ook niet altijd het juiste weeknummer terug, maar dat ligt misschien aan hoe dat geïnstalleerd is.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Onbekend schreef op woensdag 09 maart 2011 @ 21:55:
En zoals Wikipedia al aangeeft, is dat per werelddeel verschillend. Voor internationaal opererende klanten gaat dat niet altijd goed werken.....
Zolang jij alleen maar data opslaat kan je altijd de goede (week, jaar) data genereren. Afhankelijk van het land zul je dan met DET DATEFIRST en DATEPART('week') danwel DATEPART('ISO_WEEK') moeten werken. Dan heb je het voor elk land behalve Pakistan (waar de eerste week de week van 7 januari is) goed geregeld.

En ja, je kunt er voor kiezen omdat gedenormaliseerd op te slaan, maar dan moet je wel (week, jaar) opslaan, en niet alleen (week,).

[ Voor 8% gewijzigd door ValHallASW op 09-03-2011 22:18 ]


Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 04-10 18:06

Freee!!

Trotse papa van Toon en Len!

Onbekend schreef op woensdag 09 maart 2011 @ 21:55:
En zoals Wikipedia al aangeeft, is dat per werelddeel verschillend. Voor internationaal opererende klanten gaat dat niet altijd goed werken.....
Best wel vervelend soms.
MSSQL geeft trouwens ook niet altijd het juiste weeknummer terug, maar dat ligt misschien aan hoe dat geïnstalleerd is.
Dat ligt aan MicroSoft, Excel geeft ook lang niet altijd het juiste weeknummer terug (fout in 2009 en 2010 in ieder geval).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

Verwijderd

Freee!! schreef op woensdag 09 maart 2011 @ 22:47:
[...]
Dat ligt aan MicroSoft, Excel geeft ook lang niet altijd het juiste weeknummer terug (fout in 2009 en 2010 in ieder geval).
Wat een onzin, hoe kom je daar nou weer bij?

Microsoft producten blinken juist uit in hun internationalisatie, als je niet het juiste nummer krijgt dan heb je het simpelweg verkeerd ingesteld staan.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

The WEEKNUM function considers the week containing January 1 to be the first week of the year. However, there is a European standard [oh please, wat dacht je van een internationale standaard genaamd ISO 8601, red.] that defines the first week as the one with the majority of days (four or more) falling in the new year. This means that for years in which there are three days or less in the first week of January, the WEEKNUM function returns week numbers that are incorrect according to the European standard.

[ Voor 9% gewijzigd door .oisyn op 09-03-2011 23:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 04-10 18:06

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op woensdag 09 maart 2011 @ 23:01:
[...]
Wat een onzin, hoe kom je daar nou weer bij?
Ervaring.
Microsoft producten blinken juist uit in hun internationalisatie, als je niet het juiste nummer krijgt dan heb je het simpelweg verkeerd ingesteld staan.
Ik heb alle instellingen meermaals nagelopen. En het is niet de enige fout in Excel, als je het aantal dagen sinds 1 januari 1900 berekent voor een datum, kom je één dag te hoog uit (29-02-1900 wordt geaccepteerd als datum en meegenomen in de berekeningen 7(8)7 ).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

Verwijderd

Dus een paar foutjes in een paar libs en gelijk kan Microsoft nooit meer een correcte datum uitrekenen?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Explorer had tot Windows Vista of 7 ook gewoon de issue dat hij voor files de DST setting pakte van waar je computer momenteel inzit, en dus niet op het moment dat de file werd aangemaakt. Zo zijn alle files die je in de zomer hebt aangemaakt plots een uur jonger als je in de winter terugkijkt.

De datumfuncties van de win32 API zijn dan ook compleet ruk. Explorer maakte gebruik van de vage functie FileTimeToLocalFileTime(). Een FileTime is een timestamp vergelijkbaar met unix timestamps (alleen accurater en vanaf een andere startdatum). Een timestamp is een timestamp, het slaat nergens op om die te converteren naar een lokaal timestamp oid 8)7.
FileTimeToLocalFileTime uses the current settings for the time zone and daylight saving time. Therefore, if it is daylight saving time, this function will take daylight saving time into account, even if the time you are converting is in standard time

[ Voor 55% gewijzigd door .oisyn op 10-03-2011 00:56 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 04-10 20:40
Verwijderd schreef op woensdag 09 maart 2011 @ 23:58:
Dus een paar foutjes in een paar libs en gelijk kan Microsoft nooit meer een correcte datum uitrekenen?
Anders trek je het even niet door in het belachelijke, ze maken beide gewoon een valide punt. :)

[ Voor 70% gewijzigd door Jaap-Jan op 10-03-2011 00:52 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Jaap-Jan schreef op donderdag 10 maart 2011 @ 00:51:
[...]


Anders trek je het even niet door in het belachelijke, ze maken beide gewoon een valide punt. :)
Ik doelde op de "Ligt aan Microsoft" statement van Freee!!. Natuurlijk zitten er foutjes in de software, ik heb nog nooit foutloze software gezien. Maar het is echt niet zo alsof alle producten van Microsoft fouten hebben in de datum libs.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Afgezien van .Net lijkt het daar dus wel op.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

In hun verdediging: Het zijn wel Amerikanen, die snappen niet dat er mensen zijn die dingen anders doen dan zij. :+

Acties:
  • 0 Henk 'm!

  • burne
  • Registratie: Maart 2000
  • Niet online

burne

Mine! Waah!

Verwijderd schreef op donderdag 10 maart 2011 @ 00:57:
Maar het is echt niet zo alsof alle producten van Microsoft fouten hebben in de datum libs.
Het is --blijkt uit je uitspraak-- wel zo dat verschillende Microsoft-producten verschillende bugs in hun afhandeling van datums hebben. Dat draagt natuurlijk bij aan een creatief en onvoorspelbaar landschap. Precies het soort probleem waar je gebruikers dolblij mee krijgt.

*kuch*

I don't like facts. They have a liberal bias.

Pagina: 1 ... 52 ... 103 Laatste

Dit topic is gesloten.

Let op:
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. :)