Mooie Heisenbug als dat het heeft opgelost

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.
Mooie Heisenbug als dat het heeft opgelost
Mijn typkunst...
Ben allang blij dat het niet een copy-paste van de live site was nu... Ben ik net thuis, blijkt die hele site al een halve dag plat te liggen
[ Voor 65% gewijzigd door Firesphere op 25-04-2012 18:35 ]
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Jammer dat case zonder expliciete jump-operator niet mag in C#..oisyn schreef op woensdag 25 april 2012 @ 15:41:
Die oplossing behandel ik toch ook gewoon?
"maar dat wordt wat lastiger als er veel afhankelijke lokale state is"
Flash is not dead yet? Lets kill it with taxes.alienfruit schreef op donderdag 29 maart 2012 @ 08:41:
[...]
Alleen voor webgames. Het geld niet voor AIR based applicaties. 9% Angry Birds op Facebook is natuurlijk wel leuk voor Adobe. Maar goed, ik weet echt niet meer wat ze aan het doen zijn bij Adobe. Stelletje idioten
De "as"-operator returned een null als de waarde niet gecast kan worden, gaat dus zelfs goed als de sessionvariabele iets anders is dan de bedoelde uitkomst.farmertjes schreef op woensdag 25 april 2012 @ 17:15:
Volgens mij krijg je in C# een exception als je niet eerst checkt op null, dus is zijn code wel goed.
De code erboven klopt ook gewoon, dat is de gewoon de property syntax voor C#.
1
2
3
4
5
| public SearchFilterCompany SearchFilter { get { return HttpContext.Current.Session[SessionKeySearchFilter] as SearchFilterCompany; } set { HttpContext.Current.Session[SessionKeySearchFilter] = value; } } |
De class wordt iedere keer opnieuw geinstantieerd en het is een reference. Dus daar zal het net goed gaan...MatHack schreef op woensdag 25 april 2012 @ 17:22:
_filter wordt toch echt gevuld met het resultaat van de methode GetSearchFilter().
Die viel me inderdaad pas later op en daar heb ik ook al meerdere (op andere plekken) van opgeruimd....MatHack schreef op woensdag 25 april 2012 @ 17:22:
Ik vind de "as SearchFilterCompany" in de SetSearchFilter() toch echt het mooiste staaltje onzin.
[ Voor 27% gewijzigd door HeSitated op 25-04-2012 20:50 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
| public SearchFilterCompany SearchFilter { get { if(HttpContext.Current.Session[SessionKeySearchFilter] == null) { HttpContext.Current.Session[SessionKeySearchFilter] = new SearchFilterCompany(); } return HttpContext.Current.Session[SessionKeySearchFilter] as SearchFilterCompany; } set { HttpContext.Current.Session[SessionKeySearchFilter] = value; } } |
We are shaping the future
Kater? Eerst water, de rest komt later
1
2
3
4
5
6
7
8
9
10
11
12
| private string _testProperty = string.Empty; public string TestProperty { get { return _testProperty; } set { if (_testProperty != value) { _testProperty = value; } } } |
Hmm, ik had er -12 besteld, maar de iDeal-pagina geeft aan dat -198 euro een ongeldig bedrag isEnfer schreef op zondag 29 april 2012 @ 03:05:
Ook, helaas, bij de Hema kun je een negatief aantal dagkaarten bestellen.. http://nsdagkaart.hema-actie.nl/ Of meer dan 12, wat je ook maar wilt..
If money talks then I'm a mime
If time is money then I'm out of time
Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three
Gewoon van een van de bestaande items de value veranderen. Je hoeft niks toe te voegen.Struikrover schreef op zondag 29 april 2012 @ 11:33:
Haha leuk. Helaas is dit niet echt uit te buiten omdat er gelijk een iDeal aan gekoppeld is. Tenzij je natuurlijk meer dan 12 wilt.
Hoe zorgen jullie er trouwens voor dat die negatieve optie mogelijk is? Ik heb het net geprobeerd door in Chrome met de dev tool een <option /> aan die dropdown toe te voegen met de console, en die daarna geselecteerd. Kan het ook nog anders?
Precies en op een indexChanged event in de dropdown-menu wordt de waarde uit het value-veld overgenomen in de berekening.Avalaxy schreef op zondag 29 april 2012 @ 12:40:
Gewoon van een van de bestaande items de value veranderen. Je hoeft niks toe te voegen.
If money talks then I'm a mime
If time is money then I'm out of time
Ja dat zegt ie toch zelf al in die post?BM schreef op zondag 29 april 2012 @ 11:36:
[...]
In het voorbeeld wat je daar geeft zal het niet zoveel uitmaken. Als er in de setter nog een NotifyPropertyChanged aangeroepen word kan het wel handig zijn. Je wilt geen change events triggeren als er niks veranderd is
Kijk, als je een property hebt die PropertyChanged afvuurt, dan snap ik het.
[ Voor 9% gewijzigd door .oisyn op 29-04-2012 17:13 ]
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.
Oh shoot, helemaal gemist.oisyn schreef op zondag 29 april 2012 @ 17:12:
[...]
Ja dat zegt ie toch zelf al in die post?
[...]
Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three
Er zit een hidden <select /> op de pagina die als boodschappenmandje fungeert.Matis schreef op zondag 29 april 2012 @ 13:09:
[...]
Precies en op een indexChanged event in de dropdown-menu wordt de waarde uit het value-veld overgenomen in de berekening.
Jammer dat je niet -6 en + 6 kaartjes kunt toevoegen. Dan was het wel weer nuttig geweest.
We are shaping the future
Ohja, nu zie ik het ook, maar als ik zelf met firebug de selects aanpas, worden ze niet meer meegenomen in de post naar de proces-pagina.Alex) schreef op zondag 29 april 2012 @ 19:33:
Er zit een hidden <select /> op de pagina die als boodschappenmandje fungeert.
1
2
3
4
5
| <select id="product_list" class="scProductSelect" multiple="multiple" style="display:none;" name="product_list[]"> <option id="scoption0" rel="ADMIN" "="" value="ADMIN|1">administratiekosten</option> <option id="scoption1" value="v_1269767|1" rel="v_1269767">NS dagkaart</option> <option id="scoption2" value="v_1269767|-1" rel="v_1269767">NS dagkaart</option> </select> |
[ Voor 43% gewijzigd door Matis op 30-04-2012 20:26 ]
If money talks then I'm a mime
If time is money then I'm out of time
We are shaping the future
[ Voor 3% gewijzigd door bindsa op 30-04-2012 21:34 ]
Nee hoor, het kan zijn dat het mailtje al is opgesteld voordat het wachtwoord versleuteld wordt en wordt opgeslagen. Zelfde principe heb ik ook in diverse tools moeten bouwen, dan wil men een wachtwoord naar een gebruiker sturen (als het account door iemand anders dan de gebruiker wordt aangemaakt), tja dan moet je wel het wachtwoord voor het versleutelen in de mail zettenT.H. Lassche schreef op maandag 30 april 2012 @ 21:34:
Ja hoor, V&D slaat wachtwoorden plain text op:
[...]
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.
"Je wachtwoord is gewijzigd! Er is een bevestigingsmail verzonden met daarin je nieuwe wachtwoord".Gertjan. schreef op maandag 30 april 2012 @ 21:52:
[...]
maar daar zijn dan weer trucjes als "user must change password on first logon" voor uitgevonden
Dat is maar marginaal beter dan onbeveiligd opslaan, natuurlijk. Iemand die toegang heeft tot je database heeft ook toegang tot je encryptiemethode (vooral als je gewoon een "standaard" encryptie gebruikt)..Gertjan. schreef op maandag 30 april 2012 @ 21:52:
Daarnaast zijn er ook genoeg encrypties die 2-way werken. Die je encrypted wachtwoord dus ook weer kunnen decrypten.
Ben het verder wel met je eens hoor, maar bovenstaande hoeft natuurlijk niet waar te zijn. Kan best zijn dat er ergens op je server een certificaat staat waarmee ge-encrypt wordt. Daar hoef je vanuit de db geen toegang tot te hebben.Soultaker schreef op dinsdag 01 mei 2012 @ 09:12:
[...]
Iemand die toegang heeft tot je database heeft ook toegang tot je encryptiemethode (vooral als je gewoon een "standaard" encryptie gebruikt).
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Dat is nogal sterke taal, vind je niet? Gebruikers denken niet in het bijzonder over zulk soort dingen na, die willen gewoon inloggen om hun ding te doen. Ik kan m'n oma het niet kwalijk nemen dat ze het wel verwacht.Soultaker schreef op dinsdag 01 mei 2012 @ 09:37:
Gebruikers die verwachten dat je ze hun plain-text wachtwoord kan terugsturen zijn idioten die niet weten wat goed voor ze is.
Inderdaad: "Als ik mijn pincode vergeten ben, krijg ik toch ook mijn oude pincode weer :)"TJHeuvel schreef op dinsdag 01 mei 2012 @ 10:15:
[...]
Dat is nogal sterke taal, vind je niet? Gebruikers denken niet in het bijzonder over zulk soort dingen na, die willen gewoon inloggen om hun ding te doen. Ik kan m'n oma het niet kwalijk nemen dat ze het wel verwacht.
Reden temeer dat jouw oma niet de beveiliging van zo'n website moet dicteren. Niet alleen in haar eigen belang trouwens; tegemoetkomen aan haar wensen betekent dat ook jouw en mijn privacy in het geding komt.TJHeuvel schreef op dinsdag 01 mei 2012 @ 10:15:
Gebruikers denken niet in het bijzonder over zulk soort dingen na, die willen gewoon inloggen om hun ding te doen. Ik kan m'n oma het niet kwalijk nemen dat ze het wel verwacht.
1
2
3
4
5
6
7
8
9
10
| class Foo { public Bar Bar { get; set; } public String FooString { get; set; } } class Bar { public int Baz { get; set; } } |
1
2
3
4
5
| var foo = new Foo { FooString = "Qux", Bar.Baz = -1 }; |
1
| Bar = new Bar { Baz = -1 } |
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ik gebruik LastPass voor het beheren van mijn wachtwoorden. Dat heeft er mede voor gezorgd dat ik op heel veel onbenullige sites mijn wachtwoord niet eens weet. Maar laat invullen door LastPass.Chrizzly schreef op dinsdag 01 mei 2012 @ 11:19:
Ik had exact hetzelfde bij wehkamp. Toen ik me laatst registreerde kreeg ik een bevestigingsmail met mijn wachtwoord erin. Overbodig en niet handig vind ik zelf. Als ik het wachtwoord net aangemaakt heb weet ik heus nog wel wat het is. Mocht ik het later vergeten dan verwacht ik een reset wachtwoord functie en ga ik niet in mijn mailtjes lopen spitten.
If money talks then I'm a mime
If time is money then I'm out of time
Speel ook Balls Connect en Repeat
Na 16:30 mag je ook niet meer programmeren op vrijdag. Je kent de regels toch.CodeCaster schreef op vrijdag 04 mei 2012 @ 16:52:
Eentje van mezelf hoor, het is vrijdagmiddag zeker.
C#:
1 2 3 4 5 6 7 8 9 10 class Foo { public Bar Bar { get; set; } public String FooString { get; set; } } class Bar { public int Baz { get; set; } }
Prima, toch? Dan gaan we 'm initializeren:
C#:
1 2 3 4 5 var foo = new Foo { FooString = "Qux", Bar.Baz = -1 };
En maar niet snappen waar de rode lijn onder Bar.Baz = -1 vandaan komt. Eh, misschien zit je nog vóór de constructor van Foo, waardoor Bar gegarandeerd nog niet geïnitialiseerd is, waardoor je niet direct properties kunt aanspreken?
C#:
1 Bar = new Bar { Baz = -1 }
Natuurlijk.
Zeker waar, maar ben het wel met TJHeuvel eens dat dat geen reden is om alle leken op dit vlak idioten te noemen.Soultaker schreef op dinsdag 01 mei 2012 @ 10:53:
[...]
Reden temeer dat jouw oma niet de beveiliging van zo'n website moet dicteren. Niet alleen in haar eigen belang trouwens; tegemoetkomen aan haar wensen betekent dat ook jouw en mijn privacy in het geding komt.
[ Voor 21% gewijzigd door Michali op 04-05-2012 21:44 ]
Kan me nog één andere reden indenken en dat is 'nieuwe wachtwoord moet minimaal X karakters verschillen met laatste Y wachtwoorden'; zo'n compleet nutteloze averechtse policy die veel bedrijven toch nog wel eens afgedwongen willen hebben.Soultaker schreef op dinsdag 01 mei 2012 @ 09:37:
Gebruikers die verwachten dat je ze hun plain-text wachtwoord kan terugsturen zijn idioten die niet weten wat goed voor ze is. (Dat lijkt me de enige reden om wachtwoorden in plain-text op te slaan, want zelfs voor dingen als hash-based authenticatie hoef je geen plaintext wachtwoorden op te slaan.)
Een nieuw wachtwoord instellen bij de RuG is ook altijd een feest: http://www.rug.nl/medewer...etenswaardigheden?lang=nlR4gnax schreef op vrijdag 04 mei 2012 @ 22:41:
[...]
Kan me nog één andere reden indenken en dat is 'nieuwe wachtwoord moet minimaal X karakters verschillen met laatste Y wachtwoorden'; zo'n compleet nutteloze averechtse policy die veel bedrijven toch nog wel eens afgedwongen willen hebben.
Verwijderd
Daar heb je helemaal geen plaintext voor nodigR4gnax schreef op vrijdag 04 mei 2012 @ 22:41:
[...]
Kan me nog één andere reden indenken en dat is 'nieuwe wachtwoord moet minimaal X karakters verschillen met laatste Y wachtwoorden'; zo'n compleet nutteloze averechtse policy die veel bedrijven toch nog wel eens afgedwongen willen hebben.
Urgh. Wat is er zo speciaal aan het & teken dat dát niet gebruikt mag worden?Intru schreef op zaterdag 05 mei 2012 @ 12:31:
Een nieuw wachtwoord instellen bij de RuG is ook altijd een feest: http://www.rug.nl/medewer...etenswaardigheden?lang=nl
Hoe zou je het aanpakken zonder plaintext?Verwijderd schreef op zaterdag 05 mei 2012 @ 14:02:
Daar heb je helemaal geen plaintext voor nodig
Simpel:Soultaker schreef op zaterdag 05 mei 2012 @ 14:16:
*snip*
Hoe zou je het aanpakken zonder plaintext?
Als je alleen eist dat het wachtwoord niet letterlijk hetzelfde is als het vorige dan kun je inderdaad met een hash toe. Een aantal andere eisen zijn ook nog wel zonder plaintext te checken. Maar heel algemene eisen (zoals e.g. de edit distance naar een vorig wachtwoord moet minstens 3 zijn) zijn praktisch niet te checken zonder de plain text te hebben.
wsitedesign schreef op zaterdag 05 mei 2012 @ 14:26:
[...]
Simpel:
Typ oud wachtwoord in:
Typ nieuw wachtwoord in:
Herhaal nieuw ww:
Dan controleer je of het oude overeenkomt met de hash, en kijk je of het nieuw genoeg afwijkt van het oude
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Ik geloof dat er hier een misverstand is? Tuurlijk dat een hash volledig veranderd bij het wijzigen van 1 letter...Boeboe schreef op zaterdag 05 mei 2012 @ 15:28:
[...]
![]()
Als je je wachtwoord maar 1 letter wijzigt gaat je hash niet "een beetje" aangepast zijn, je krijgt een compleet andere hash.
Dat kan inderdaad, maar dat is heel vervelend als de eis is dat (zoals Ragnax zei) het wachtwoord verschilt van alle laatste Y wachtwoorden. (Of je moet de gebruiker z'n laatste Y wachtwoorden laten intypen, wat natuurlijk praktisch ondoenlijk is.)wsitedesign schreef op zaterdag 05 mei 2012 @ 14:26:
Simpel:
Typ oud wachtwoord in:
Typ nieuw wachtwoord in:
Herhaal nieuw ww:
Dan controleer je of het oude overeenkomt met de hash, en kijk je of het nieuw genoeg afwijkt van het oude
[ Voor 7% gewijzigd door Soultaker op 05-05-2012 15:41 ]
Ik ging er inderdaad maar vanuit met het vorige wachtwoord, niet met alle vorigeSoultaker schreef op zaterdag 05 mei 2012 @ 15:40:
[...]
Dat kan inderdaad, maar dat is heel vervelend als de eis is dat (zoals Ragnax zei) het wachtwoord verschilt van alle laatste Y wachtwoorden. (Of je moet de gebruiker z'n laatste Y wachtwoorden laten intypen, wat natuurlijk praktisch ondoenlijk is.)
Je kan niet volstaan met alleen checken tegen het oude wachtwoorden want dan kun je steeds tussen twee basiswachtwoorden wisselen: "appel1", "appel2" mag niet, "banaan2", "appel3", "banaan4", et cetera.
Banken en verzekeraars en daar omheen hangende software hebben deze eis. Dus: elke 3 maanden een nieuw wachtwoord, mag niet eerder gebruikt zijn, moet minimaal 10 karakters zijn, hoofletters, kleine letters, cijfers en een leesteken bevatten. En hoe denken die idioten dat een gebruiker dat gaat onthoudenSoultaker schreef op zaterdag 05 mei 2012 @ 15:40:
[...]
Dat kan inderdaad, maar dat is heel vervelend als de eis is dat (zoals Ragnax zei) het wachtwoord verschilt van alle laatste Y wachtwoorden. (Of je moet de gebruiker z'n laatste Y wachtwoorden laten intypen, wat natuurlijk praktisch ondoenlijk is.)
[ Voor 22% gewijzigd door Soultaker op 05-05-2012 16:13 ]
[ Voor 97% gewijzigd door Marcj op 05-05-2012 16:15 ]
Het zou me niet verbazen als blijkt dat password-updates via unencoded HTTP GET-requests worden doorgegeven aan andere systemen.Soultaker schreef op zaterdag 05 mei 2012 @ 14:16:
[...]
Urgh. Wat is er zo speciaal aan het & teken dat dát niet gebruikt mag worden?
[ Voor 3% gewijzigd door Alex) op 05-05-2012 16:17 ]
We are shaping the future
Daar hebben we toch urlencode voor?Alex) schreef op zaterdag 05 mei 2012 @ 16:17:
Het zou me niet verbazen als blijkt dat password-updates via unencoded HTTP GET-requests worden doorgegeven aan andere systemen.
Denk aan het volgende:
Http://esb/updatePassword.do?user=henk&newPassword=Tr0ub@doUr3$
If money talks then I'm a mime
If time is money then I'm out of time
Tenzij je de oude wachtwoorden wel weer als tekst gaat opslaan.Soultaker schreef op zaterdag 05 mei 2012 @ 15:40:
[...]
Dat kan inderdaad, maar dat is heel vervelend als de eis is dat (zoals Ragnax zei) het wachtwoord verschilt van alle laatste Y wachtwoorden. (Of je moet de gebruiker z'n laatste Y wachtwoorden laten intypen, wat natuurlijk praktisch ondoenlijk is.)
Je kan niet volstaan met alleen checken tegen het oude wachtwoorden want dan kun je steeds tussen twee basiswachtwoorden wisselen: "appel1", "appel2" mag niet, "banaan2", "appel3", "banaan4", et cetera.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Verwijderd
Met een beetje algoritme kun je het nieuwe wachtwoord wel testen op de oude hashes. Elk teken een paar bitjes up en down en vergelijken maar. Zo moeilijk is het niet hoor.Boeboe schreef op zaterdag 05 mei 2012 @ 15:28:
[...]
![]()
Als je je wachtwoord maar 1 letter wijzigt gaat je hash niet "een beetje" aangepast zijn, je krijgt een compleet andere hash.
[ Voor 14% gewijzigd door Verwijderd op 05-05-2012 21:22 ]
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
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Als je wilt testen op een afwijking van één teken misschien nog wel te doen, maar meer dan één is uit combinatorisch oogpunt niet zo'n goed plan...Verwijderd schreef op zaterdag 05 mei 2012 @ 21:18:
[...]
Met een beetje algoritme kun je het nieuwe wachtwoord wel testen op de oude hashes. Elk teken een paar bitjes up en down en vergelijken maar. Zo moeilijk is het niet hoor.
Heeft geen speciale krachten en is daar erg boos over.
Inderdaad, wat een blunder!Firesphere schreef op zondag 06 mei 2012 @ 20:18:
In de categorie "slechte programmeervoorbeelden" kan deze toch niet achter blijven?
https://www.zdnet.com/blo...words-in-clear-text/11963
Met een beetje algoritme is dat juist niet goed te doen.Verwijderd schreef op zaterdag 05 mei 2012 @ 21:18:
[...]
Met een beetje algoritme kun je het nieuwe wachtwoord wel testen op de oude hashes. Elk teken een paar bitjes up en down en vergelijken maar. Zo moeilijk is het niet hoor.
Dus ik blijf bij mijn stelling: ook voor "nieuw wachtwoord mag niet eerder gebruikt zijn" en "moet minimaal X afwijken" heb je geen plaintext nodig.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Tuurlijk dat het dan niet meer te doen is, maar dat is nu toch wel een beetje overkill?PiepPiep schreef op zondag 06 mei 2012 @ 22:06:
[...]
Met een beetje algoritme is dat juist niet goed te doen.
Als je het echt goed doet gebruik je iets als PBKDF2.
Simpel uitgelegd is het een hashfunctie die altijd in een lusje gedaan wordt.
Dus in geval van sha256 zou je dan bijvoorbeeld sha256(sha256(sha256(sha256(wachtwoord)))) doen, maar dan dus niet 4 keer maar bijvoorbeeld 1000 keer.
Om een keer in te loggen is het namelijk niet erg als de hash berekenen een seconde duurt, maar om bruteforce het password te achterhalen is dan niet meer te doen.
Verwijderd
fijn om te weten... Ik draai overigens zonder flash, waarschijnlijk komt het daar door.Got error 28 from storage engine SQL=SELECT advert.* FROM jos_wbadvert AS advert LEFT JOIN jos_wbadvert_client AS client ON client.id = advert.client_id LEFT JOIN jos_wbadvert_idx_menu AS idx_menu ON idx_menu.advert_id = advert.id LEFT JOIN jos_wbadvert_idx_section AS idx_section ON idx_section.advert_id = advert.id LEFT JOIN jos_wbadvert_idx_category AS idx_category ON idx_category.advert_id = advert.id LEFT JOIN jos_wbadvert_idx_content AS idx_content ON idx_content.advert_id = advert.id WHERE advert.group_id = 1 AND advert.published = 1 AND client.published = 1 AND ((advert.date_start = '0000-00-00 00:00:00') OR (advert.date_start <= '2012-05-06')) AND ((advert.date_stop = '0000-00-00 00:00:00') OR (advert.date_stop >= '2012-05-06')) AND ((advert.imptotal = 0) OR (advert.imptotal > advert.impmade)) AND ((idx_menu.menu_id = 0) OR (idx_menu.menu_id = 0)) AND ((idx_section.section_id = 7) OR (idx_section.section_id = 0)) AND ((idx_category.category_id = 55) OR (idx_category.category_id = 0)) AND ((idx_content.content_id = 8480) OR (idx_content.content_id = 0)) GROUP BY advert.id ORDER BY RAND() LIMIT 1There are No Adverts to Display
Van meerdere keren hashen wordt het er niet beter op. Stel dat je voor elke waarde die je er in stopt, slechts 98% (willekeurige waarde) als mogelijke uitvoer kan krijgen. Met een instelling van 17566.5 rondjes (bij een 512 bit hash) zit iedereen mogelijk met dezelfde hash, en kan iedereen met elk willekeurig wachtwoord gewoon inloggen.PiepPiep schreef op zondag 06 mei 2012 @ 22:06:
[...] Dus in geval van sha256 zou je dan bijvoorbeeld sha256(sha256(sha256(sha256(wachtwoord)))) doen, maar dan dus niet 4 keer maar bijvoorbeeld 1000 keer. [...]
Ik kwam laatst de volgende referentie tegen. Met name het een-na-laatste commentaar. Nu kan ik het niet beoordelen, maar ik denk dat je brute-forcen ook niet te klein moet inschatten.wsitedesign schreef op zondag 06 mei 2012 @ 23:28:
[...] of te brute-forcen... [...]
[ Voor 3% gewijzigd door Feanathiel op 08-05-2012 17:39 ]
Ik kwam laatst ook nog error 28 tegen bij een klant van mij omdat zijn HDD vol was gelopen met MySQL queries (als in 1 groot bestand van 60GB).Verwijderd schreef op maandag 07 mei 2012 @ 00:02:
Deze is ook leuk:
http://www.funkykit.com/c...-flash-drive.html?start=2
[...]
fijn om te weten... Ik draai overigens zonder flash, waarschijnlijk komt het daar door.
...en dat 6!! keer op de pagina.
[ Voor 4% gewijzigd door Manuel op 07-05-2012 08:40 ]
Zie Wikipedia: Key stretchingFeanathiel schreef op maandag 07 mei 2012 @ 08:24:
[...]
Van meerdere keren hashen wordt het er niet beter op. Stel dat je voor elke waarde die je er in stopt, slechts 98% (willekeurige waarde) als mogelijke uitvoer kan krijgen. Met een instelling van 17566.5 rondjes (bij een 512 bit hash) zit iedereen mogelijk met dezelfde hash, en kan iedereen met elk willekeurig wachtwoord gewoon inloggen.
FPGA's zijn fantastische stukjes techniek. Wij baseren onze video-analyse en conversie-apparatuur ook op FPGA's. Nog een stukje rapper en groter dan de gene beschreven in het artikel.Feanathiel schreef op maandag 07 mei 2012 @ 08:24:
Ik kwam laatst de volgende referentie tegen. Met name het een-na-laatste commentaar. Nu kan ik het niet beoordelen, maar ik denk dat je brute-forcen ook niet te klein moet inschatten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| private function validate_password($password) { $salt = substr($this->hashed_password, 0, 64); $hash = substr($this->hashed_password, 64, 64); $password_hash = hash('sha256', $salt . $password); return $password_hash == $hash; } private function hash_password($password) { $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); $hash = hash('sha256', $salt . $password); return $salt . $hash; } |
If money talks then I'm a mime
If time is money then I'm out of time
Dan vind ik dat je beter een mailtje met een activatie-link kunt sturen. Dat is feitelijk natuurlijk hetzelfde, maar duidelijker voor gebruikers; anders heb je "magische eenmalige eerstekeer-wachtwoorden" en "echte wachtwoorden"..Gertjan. schreef op maandag 30 april 2012 @ 21:52:
Uiteraard is het dan nog niet helemaal veilig (het "geheim" staat namelijk ergens als plain-text opgeslagen, namelijk in iemands mailbox en heeft diverse stations gepasseerd waar men het zou kunnen zien), maar daar zijn dan weer trucjes als "user must change password on first logon" voor uitgevonden
Dat hangt nogal van de context af natuurlijk.Verwijderd schreef op zaterdag 05 mei 2012 @ 21:18:
Met een beetje algoritme kun je het nieuwe wachtwoord wel testen op de oude hashes. Elk teken een paar bitjes up en down en vergelijken maar. Zo moeilijk is het niet hoor.
Dus ik blijf bij mijn stelling: ook voor "nieuw wachtwoord mag niet eerder gebruikt zijn" en "moet minimaal X afwijken" heb je geen plaintext nodig.
Waarom? Het herhalen van een hash zorgt ervoor dat de hash berekenen trager wordt, zodat brute-forcen onaantrekkelijk wordt. Natuurlijk kun je dat overkill vinden, maar tsja... Je kunt überhaupt hashen ook overkill vinden. Waar trek je die grens?wsitedesign schreef op zondag 06 mei 2012 @ 23:28:
Tuurlijk dat het dan niet meer te doen is, maar dat is nu toch wel een beetje overkill?
...dan heb je een slechte salt. Gebruik alsjeblieft gewoon een random string.Als ik nu een sha512 hash met het wachtwoord en een salt van bijv. registratietijd die ik door de md5 gehaald heb...
Natuurlijk achterhaal je die, een salt is onderdeel van een hash.Zelfs al achterhaal je de md5 hash die als salt is gebruikt
Hoeveel onveiliger denk je dat "gewoon md5" is dan jouw geschetste aanpak?* zeker als je dan weet dat er nog veel zijn die plain-text opslaan, of gewoon md5...
Die comment lijkt te willen concluderen dat je beter geen salts dan wel salts kunt gebruiken, en dat is sowieso onzin; zelfs al helpt een salt je niet (en dat doet een salt idd niet bij brute force; salts helpen tegen precomputed dictionary attacks), kwaad doet een salt niet. Hij stipt wel goed aan wat één van de redenen is dat MD5 tegenwoordig af te raden is; de hash is gewoon te licht aan het worden voor het rekengeweld van tegenwoordig.Feanathiel schreef op maandag 07 mei 2012 @ 08:24:
Ik kwam laatst de volgende referentie tegen. Met name het een-na-laatste commentaar. Nu kan ik het niet beoordelen, maar ik denk dat je brute-forcen ook niet te klein moet inschatten.
De grens trek ik waar je het een potentiele hacker al een stuk moeilijker maakt dan dat het nodig is. Als ze met een "simpele" md5 of sha1 (waar er genoeg reverse-hash sites voor zijn) gehasht zijn (zonder salts), maak je het een hacker niet veel moeilijker dan plain-text. Een sha-512 met (goedgekozen) salt zou het al een stuk moeilijker zijn, dus dat is mijn persoonlijke grens.deadinspace schreef op maandag 07 mei 2012 @ 11:24:
Waarom? Het herhalen van een hash zorgt ervoor dat de hash berekenen trager wordt, zodat brute-forcen onaantrekkelijk wordt. Natuurlijk kun je dat overkill vinden, maar tsja... Je kunt überhaupt hashen ook overkill vinden. Waar trek je die grens?
Ok dan... Hier heb je een sha-512 met de salt ertussen, waar zit de salt?deadinspace schreef op maandag 07 mei 2012 @ 11:24:
...dan heb je een slechte salt. Gebruik alsjeblieft gewoon een random string.
Zie mijn punt hierboven.deadinspace schreef op maandag 07 mei 2012 @ 11:24:
Natuurlijk achterhaal je die, een salt is onderdeel van een hash.
Redelijk veel onveiliger, zie hierboven ook alweerdeadinspace schreef op maandag 07 mei 2012 @ 11:24:
Hoeveel onveiliger denk je dat "gewoon md5" is dan jouw geschetste aanpak?
Wie gebruikt er dan crypt() voor MD5? De meeste mensen doen dat met md5()deadinspace schreef op maandag 07 mei 2012 @ 11:24:
(let op, md5 is doorgaans ook gesalt, bij PHP bijvoorbeeld standaard met een 12-character salt)
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.
Je kan toch alle letters extracten en in sequence hashen en opslaan en alle niet-letters extracten en in sequence hashen. Dit zelfde doe je met het nieuwe wachtwoord, als je dan een match hebt op een van de twee is het niet verschillend genoeg. Niet perfect, maar dan heb je een semi-usage check zonder unencrypted spul op te slaan.PiepPiep schreef op zaterdag 05 mei 2012 @ 20:44:
[...]
Tenzij je de oude wachtwoorden wel weer als tekst gaat opslaan.
Nadeel dan is eigenlijk dat in veel gevallen van normale gebruikers waarschijnlijk het wachtwoord net zo goed niet gehasht opgeslagen kan worden.
Vorige wachtwoorden: porsche mercedus peugeot volvo renault
Nou, laat ik eens beginnen met wat automerken.
De originele developer van een project van ons deed dat. Toen we erachter kwamen dat alle strings langer dan 8 karakters met dezelfde salt, allemaal dezelfde hash gaven, hebben we dat maar veranderd naar een ander algoritme (met ook nog eens unieke salts).oisyn schreef op maandag 07 mei 2012 @ 12:17:
[...]
Wie gebruikt er dan crypt() voor MD5? De meeste mensen doen dat met md5()
Zit wat in, maar vraag jezelf eens af waarom je het ze niet nóg moeilijker zou maken, als dat niet veel werk kost.wsitedesign schreef op maandag 07 mei 2012 @ 11:58:
[...]
De grens trek ik waar je het een potentiele hacker al een stuk moeilijker maakt dan dat het nodig is. Als ze met een "simpele" md5 of sha1 (waar er genoeg reverse-hash sites voor zijn) gehasht zijn (zonder salts), maak je het een hacker niet veel moeilijker dan plain-text. Een sha-512 met (goedgekozen) salt zou het al een stuk moeilijker zijn, dus dat is mijn persoonlijke grens.
Ah, security through obscurity. Het punt was ook dat de registratietijd geen goed idee is om te gebruiken, voor redenen kijk bijvoorbeeld eens hier.[...]
Ok dan... Hier heb je een sha-512 met de salt ertussen, waar zit de salt?
Als je als hacker dan de broncode niet kunt bemachtigen, kun je dit niet weten en is dit dus imho veilig.
c8723ae7e41f9c756627f929fc3a3d56cc872d2fc4af5a4b3759ea6ca8c7dbf1098f6bcd4621d373cade4e832627b4f692000c36287bc6b8b0b0c986b7fb3f3ef1aa685e7b12d942a8c1616f0796dac1
(en stel dat je zelfs nog niet weet dat er hier een gedeelte sha-512 is, heb je nog meer keuzes)
Les één uit cryptografie: neem altijd aan dat de aanvaller weet hoe je systeem ontworpen is (en dat is echt les één). Ga er bij wachtwoorden dus van uit dat ze de gebruikte structuur weten, maar de keuzes binnen die structuur niet. Voor hashes hetzelfde, ga er van uit dat ze de structuur weten. Al het andere is security by obscurity.wsitedesign schreef op maandag 07 mei 2012 @ 11:58:
Als je als hacker dan de broncode niet kunt bemachtigen, kun je dit niet weten en is dit dus imho veilig.
Zie hierboven wat?Redelijk veel onveiliger, zie hierboven ook alweer
Is dat zo? Ik heb nog nooit md5()-gebruik voor wachtwoordhashes gezien. Mja, anekdotaal bewijs....oisyn schreef op maandag 07 mei 2012 @ 12:17:
Wie gebruikt er dan crypt() voor MD5? De meeste mensen doen dat met md5()
Ja, dan heeft hij crypt() DES-hashes laten genereren. Dat dan alleen de eerste 8 tekens significant zijn is gewoon gedocumenteerd.Tsunami schreef op maandag 07 mei 2012 @ 15:04:
De originele developer van een project van ons deed dat. Toen we erachter kwamen dat alle strings langer dan 8 karakters met dezelfde salt, allemaal dezelfde hash gaven, hebben we dat maar veranderd naar een ander algoritme (met ook nog eens unieke salts)
Je hebt natuurlijk wel gelijk, maar ik bedoel vooral:Patriot schreef op maandag 07 mei 2012 @ 18:26:
[...]
Zit wat in, maar vraag jezelf eens af waarom je het ze niet nóg moeilijker zou maken, als dat niet veel werk kost.
[...]
Ah, security through obscurity. Het punt was ook dat de registratietijd geen goed idee is om te gebruiken, voor redenen kijk bijvoorbeeld eens hier.
Nu denk je natuurlijk: Maar dat is toch nog een redelijk verwaarloosbaar risico? Het is toch maar een héél klein ietsiepietsie beetje onveiliger? Klopt. Maar waarom zou je, aangezien het je niet tot nauwelijks extra moeite kost, het niet gewoon dat kleine beetje veiliger maken?
Omdat er nu eenmaal sneller een sql-injectie kan gebeuren dan de volledige broncode kapen denk ik? Natuurlijk is het altijd mogelijk, maar dan kan je evengoed een extra regel code met email met plaintext wachtwoord toevoegen...deadinspace schreef op maandag 07 mei 2012 @ 18:27:
*snip*
Om het concreter te maken: als ze de hashes uit je DB weten te vissen, waarom ben je dan zo arrogant te denken dat ze je broncode niet kunnen zien?
*snip*
[ Voor 22% gewijzigd door azerty op 07-05-2012 20:15 ]
Klopt, ik vond het ook gewoon netjes terug in de documentatie, dus geen idee waarom hij dat zo had gedaan.deadinspace schreef op maandag 07 mei 2012 @ 18:27:
Toegegeven, DES password-hashing is tegenwoordig braindead te beschouwen en zou niet meer mogen bestaan, en crypt() is een kut-interface, maar dat probleem was gewoon te voorkomen geweest door braaf de documentatie te lezen
Verwijderd
Nou hier zijn sowieso al 4 dingen mis mee:ERROR! Type in the file location manually, then hit convert.
1
2
3
4
5
6
7
8
9
10
11
12
13
| Private Sub btnBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Dim dialog As New OpenFileDialog Dim fileName As String = "" dialog.Filter = "XML files (*.xml)|*.xml" If (dialog.ShowDialog = DialogResult.OK) Then fileName = dialog.FileName End If If (fileName.Trim = "") Then fileName = "ERROR! Type in the file location manually, then hit convert." End If Me.txtLocation.Text = fileName Me.btnConvert.Enabled = True End Sub |
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
| Private Sub btnConvert_Click(ByVal sender As Object, ByVal e As EventArgs) Dim writer As StreamWriter Dim reader As New StreamReader(Me.txtLocation.Text) If File.Exists(Me.txtLocation.Text.Replace(".xml", ".txt")) Then VBMath.Randomize Dim num3 As Integer = CInt(Math.Round(CDbl(((88888! * VBMath.Rnd) + 1!)))) writer = New StreamWriter(Me.txtLocation.Text.Replace(".xml", (Conversions.ToString(num3) & ".txt"))) Else writer = New StreamWriter(Me.txtLocation.Text.Replace(".xml", ".txt")) End If Dim str As String = reader.ReadToEnd Dim num2 As Integer = Strings.InStr(str, "sf:anchor-loc=""0""", CompareMethod.Binary) str = str.Remove(0, (num2 + &H12)) num2 = Strings.InStr(str, "</sf:layout>", CompareMethod.Binary) str = str.Remove((num2 - 1), (str.Length - num2)).Replace("<sf:br/>", ChrW(13) & ChrW(10)).Replace("<sf:tab/>", ChrW(9)).Replace("<sf:lnbr/>", ChrW(13) & ChrW(10)).Replace("’", "'").Replace("‘", "'").Replace("“", """").Replace("”", """").Replace("ō", "o").Replace("—", "-").Replace("ē", "e").Replace("…", "...").Replace("ï", "i").Replace("ë", "e") num2 = Strings.InStr(str, "<", CompareMethod.Binary) Dim i As Integer = Strings.InStr(str, ">", CompareMethod.Binary) Do While (num2 <> 0) str = str.Remove((num2 - 1), ((i - num2) + 1)) num2 = Strings.InStr(str, "<", CompareMethod.Binary) i = Strings.InStr(str, ">", CompareMethod.Binary) Loop reader.Close writer.Write(str) writer.Close MessageBox.Show("File has been sucessfully converted to .txt.", "Pages Converter") Me.txtLocation.Text = "" Me.btnConvert.Enabled = False End Sub |
1
2
3
| VBMath.Randomize Dim num3 As Integer = CInt(Math.Round(CDbl(((88888! * VBMath.Rnd) + 1!)))) writer = New StreamWriter(Me.txtLocation.Text.Replace(".xml", (Conversions.ToString(num3) & ".txt"))) |
Bril nodig?Verwijderd schreef op woensdag 09 mei 2012 @ 15:52:
Dus ja, dan kijken we naar de source. Wacht die staat niet online, het was toch een Open Source project???
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| Private Sub AddFile() Dim opnFile As New OpenFileDialog Dim strLocation As String '''''''''''''''Filter out all but XML files opnFile.Filter = "XML files (*.xml)|*.xml" '''''''''''''''Show Open Dialog, add to lstLocation If opnFile.ShowDialog() = Windows.Forms.DialogResult.OK Then strLocation = opnFile.FileName '''''''''''''''Quick check for proper file format If Not ((strLocation.IndexOf(".xml") = -1) Or (strLocation.Length < 4)) Then Me.lstLocation.Items.Add(strLocation) Me.btnConvert.Enabled = True End If End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End Sub |
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
| Private Sub Convert() Dim strFileContents, strLocation, strFilename As String Dim intIndex, intChars As Integer Dim blnWorkDone As Boolean Do While Not System.IO.File.Exists(Me.lstLocation.Items.Item(0)) 'If file doesn't exist, throw error and remove MessageBox.Show("The file: " & vbCrLf & lstLocation.Items.Item(0) & vbCrLf & "does not exist. It will not be converted.", "Error!") Me.lstLocation.Items.RemoveAt(0) If Me.lstLocation.Items.Count = 0 Then '''''''''''''''Quit loop if nothing is left Exit Do End If Loop Do While Me.lstLocation.Items.Count <> 0 Dim objReader As System.IO.StreamReader = New StreamReader(String.Format(Me.lstLocation.Items.Item(0))) Dim objWriter As System.IO.StreamWriter '''''''''''''''The loop is being run; work must be occuring blnWorkDone = True '''''''''''''''Differentiate path into location and filename for saving document as "filename".txt strFilename = Me.lstLocation.Items.Item(0) strFilename = strFilename.Substring(0, strFilename.LastIndexOf("\")) strFilename = strFilename.Substring(strFilename.LastIndexOf("\") + 1) strFilename = strFilename.Replace(".pages", Nothing) strLocation = String.Format(Me.lstLocation.Items.Item(0)) strLocation = strLocation.Replace("index.xml", strFilename & ".txt") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''If file exists, add random number. If Not System.IO.File.Exists(strLocation) Then objWriter = New StreamWriter(strLocation) Else Randomize() Dim intRand As Integer = ((99999 - 11111) * Rnd() + 1) objWriter = New StreamWriter(strLocation.Replace(".txt", intRand & ".txt")) End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Read file into string strFileContents = objReader.ReadToEnd '''''''''''''''Remove beginning intIndex = InStr(strFileContents, "sf:anchor-loc=" & """" & "0" & """") strFileContents = strFileContents.Remove(0, intIndex + 18) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Remove end intIndex = InStr(strFileContents, "</sf:layout>") strFileContents = strFileContents.Remove(intIndex - 1, (strFileContents.Length) - intIndex) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''Formatting - this is all I know, feel free to add here strFileContents = strFileContents.Replace("<sf:br/>", vbCrLf) strFileContents = strFileContents.Replace("<sf:tab/>", vbTab) strFileContents = strFileContents.Replace("<sf:lnbr/>", vbCrLf) strFileContents = strFileContents.Replace("’", "'") strFileContents = strFileContents.Replace("‘", "'") strFileContents = strFileContents.Replace("“", """") strFileContents = strFileContents.Replace("”", """") strFileContents = strFileContents.Replace("ō", "o") strFileContents = strFileContents.Replace("—", "-") strFileContents = strFileContents.Replace("ē", "e") strFileContents = strFileContents.Replace("…", "...") strFileContents = strFileContents.Replace("ï", "i") strFileContents = strFileContents.Replace("ë", "e") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Gets the variables ready so they aren't forced into the loop (in case no formatting exists) intIndex = InStr(strFileContents, "<") intChars = InStr(strFileContents, ">") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Removes all unknown xml While intIndex <> 0 strFileContents = strFileContents.Remove(intIndex - 1, (intChars - intIndex) + 1) intIndex = InStr(strFileContents, "<") ' i forsee this being a problem if someone has < or > in their work. intChars = InStr(strFileContents, ">") End While '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Close reader, write, close writer objReader.Close() objWriter.Write(strFileContents) objWriter.Close() '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''Remove the item just done Me.lstLocation.Items.RemoveAt(0) Loop '''''''''''''''After everything is done the convert button will need to be disabled and user needs to be alerted If blnWorkDone Then Me.btnConvert.Enabled = False blnWorkDone = False MessageBox.Show("File Conversion Completed." & vbCrLf & vbCrLf & "Files are located in their respective directories", "File Conversion Complete!") End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End Sub |
[ Voor 90% gewijzigd door RobIII op 09-05-2012 16:18 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Verwijderd
[ Voor 46% gewijzigd door Verwijderd op 09-05-2012 16:25 ]
[ Voor 44% gewijzigd door Barryvdh op 09-05-2012 16:32 ]
Want 1 van de verschillende xml parsers van .NET gebruiken is voor noobsRobIII schreef op woensdag 09 mei 2012 @ 16:11:
[...]
En niet dat 't veel beter is ( ), maar ik zie hele andere code:
1
2
| strFileContents = strFileContents.Replace("ï", "i") strFileContents = strFileContents.Replace("ë", "e") |
[ Voor 47% gewijzigd door boe2 op 09-05-2012 17:40 ]
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
1
| $zero = 0 |
[ Voor 5% gewijzigd door YellowOnline op 09-05-2012 18:53 ]
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Ow god praat me er niet van, leuk geintje van collega van me...Freeaqingme schreef op woensdag 09 mei 2012 @ 19:07:
Je kan dan ook 0 gaan randommizen
$zero = rand()-rand();
1
| function resetToZero($var){ $var = rand(); return $var } |
[ Voor 2% gewijzigd door Firesphere op 09-05-2012 19:20 . Reden: $var dus, PINDA die ik ben! ]
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Ik denk ineens wél weer te weten waarom ik dat deed en tegelijkertijd snap ik niet waar mijn hoofd op dat moment zat. De context zag er als volgt ongeveer uit:YellowOnline schreef op woensdag 09 mei 2012 @ 18:53:
Ik heb in een van m'n scripts het volgende:
PowerShell:
1 $zero = 0
Vraag me niet meer waarom, maar ik weet dat het echt een reden had
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $Zero = 0 $Counter = $Zero While ($Counter -NE $SomeVariable) { #Do something $Counter++ } $Counter = $Zero While ($Counter -NE $SomeOtherVariable) { #Do something $Counter++ } |
Klinkt als een typen met gedachten er half bij ietsYellowOnline schreef op woensdag 09 mei 2012 @ 19:23:
[...]
Ik denk ineens wél weer te weten waarom ik dat deed en tegelijkertijd snap ik niet waar mijn hoofd op dat moment zat. De context zag er als volgt ongeveer uit:
PowerShell:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $Zero = 0 $Counter = $Zero While ($Counter -NE $SomeVariable) { #Do something $Counter++ } $Counter = $Zero While ($Counter -NE $SomeOtherVariable) { #Do something $Counter++ }
't Ontgaat me waarom ik niet gewoon $Counter = 0 doe, maar morgen op het werk kan ik wel eens uitchecken hoe het vork echt in de steel zat.
1
| $Zero = 1 |
We are shaping the future
Dit heeft toch niets met Open Source te maken? Als het closed source geweest was, was de kwaliteit er niet beter op geweest. Sterker nog, omdat het Open Source is, kan jij nu bijdragen door het te verbeterenVerwijderd schreef op woensdag 09 mei 2012 @ 15:52:
Open Source is ook niet heiligVandaag was ik op zoek naar een programma op iWork .pages bestanden te converteren. Toen kwam ik op dit leuke programmatje:
[...]
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
6
7
8
9
10
11
12
13
14
15
16
17
| //Login process function check_login($input) { include('../inc/settings.php'); $pass_1=md5($adminpassword); $pass_2=md5($input); if($pass_1==$pass_2) { return true; } else { return false; } } |
[ Voor 24% gewijzigd door Zeebonk op 10-05-2012 16:27 ]
Ook nog in plain-text zo te zien. En dan toch gewoon even allebei door de md5 heen halen, want het moet wel secure natuurlijk!Zeebonk schreef op donderdag 10 mei 2012 @ 16:25:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //Login process function check_login($input) { include('../inc/settings.php'); $pass_1=md5($adminpassword); $pass_2=md5($input); if($pass_1==$pass_2) { return true; } else { return false; } }
Even voor de goede orde: settings.php is een file die puur variabelen defineerd zoals $adminpassword.
1
2
3
4
5
6
7
8
| if($a==$b) { return true; } else { return false; } |
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Ik douw gewoon zelf de eentjes en nulletjes de processor in. Haskell, bah.RayNbow schreef op donderdag 10 mei 2012 @ 18:21:
Iedereen weet toch dat alles behalve Haskell bagger programmeertalen zijn?
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Met twee pez-dispensers in de hand een beetje tegen je cpu te frotten. Goed plan.Firesphere schreef op donderdag 10 mei 2012 @ 18:27:
[...]
Ik douw gewoon zelf de eentjes en nulletjes de processor in. Haskell, bah.
Verwijderd
Niet iedereen weet dat $a==$b een boolean waarde geeft, o wacht.deadinspace schreef op donderdag 10 mei 2012 @ 17:12:
Ik vind de
PHP:
1 2 3 4 5 6 7 8 if($a==$b) { return true; } else { return false; }
ook wel mooi eigenlijk
Valt mee, maar het is zoveel codeCornholio schreef op donderdag 10 mei 2012 @ 14:57:
Eigenlijk is heel Java een slecht programmeervoorbeeld
De stap van 'iets dat je aan een 'if' kunt voeren naar 'bruikbaar datatype' is voor sommigen gewoon een brug te ver. De meeste mensen groeien daar wel overheen; ik schaam me nog steeds diep voor een aantal dingen die ergens in productie draaien.Verwijderd schreef op donderdag 10 mei 2012 @ 20:48:
Niet iedereen weet dat $a==$b een boolean waarde geeft, o wacht.
1
| Format('0 padded decimal = <%.6d>', [1234]) |
1
2
3
4
5
| function Pad6 (input: String): String; begin case Lenght(input) of 0: Result := '000000'; 1: Result := '00000' + input; |
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Verwijderd
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
| var intStartPosition = 7; function Update(intPosition) { var intTimeOut; if (intPosition > 0) { // update bar var intPercentage = Math.round((intPosition*100)/intStartPosition); UpdateBar(intPercentage); if (intPosition > 1000) { intTimeOut = 270000; // 4,5min - >1000 wachtenden } else if (intPosition > 500) { intTimeOut = 270000; // 4,5min - 500-1000 wachtenden } else if (intPosition > 250) { intTimeOut = 120000; // 2min - 250-500 wachtenden } else if (intPosition > 100) { intTimeOut = 60000; // 60sec - 100-250 wachtenden } else if (intPosition > 50) { intTimeOut = 30000; // 30sec - 50-100 wachtenden } else if (intPosition > 10) { intTimeOut = 15000; // 15sec - 10-50 wachtenden } else { intTimeOut = 10000; // 10sec - 0-10 wachtenden } // laat msg met waarschuwing zien: window.setTimeout("xajax_GetPositionInQueue(" + intStartPosition + ")", intTimeOut); } else { window.location="http://ldt.nl/"; } } function UpdateBar(intPercentage) { strWidth = (intPercentage) + '%'; nodImg = document.getElementById('imgQueueIndicator'); nodImg.style.width = strWidth; } function StartUpdate() { Update(7) } addLoadEvent(StartUpdate) |
Als je alleen de 6, 10 en 12 nodig hebt en er geen collega voor handen is dan is die oplossing (bedrijfseconomisch) beter dan gaan zoeken wat de betere manier isGrijze Vos schreef op vrijdag 11 mei 2012 @ 09:39:
Nou, dat tweede vind ik ook een gebrek aan inzicht. Als je als programmeur functies als Foo1, Foo2, Foo3 gaat schrijven dan moet er toch een lampje gaan branden van "dat kan makkelijker". En als dat lampje brand is een collega of got snel te vinden.
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Dit topic is gesloten.
Apple iPhone 16e LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq