Waarom Javascript zo awesome is nl

Door creator1988 op maandag 14 februari 2011 14:03 - Reacties (12)
Categorie: Frontend, Views: 5.115


JavaScript:
1
2
3
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+
($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__
[_+~$]+$_[_]+$$](_/_)


Via ADAMCECC

Niet alleen awesome, want welke andere taal is zo flexibel met haar language-constructs? Tevens weer een quick reminder dat user input nooit te vertrouwen is. Wanneer je geïnteresseerd bent in beveiliging tegen dit soort aanvallen, kijk dan eens naar dit paper van Ryan Barnett: XSS Street Fight.

Volgende: Bouw eens een API met WCF, deel 4: Beschikbaar via SOAP, XML en JSON 02-'11 Bouw eens een API met WCF, deel 4: Beschikbaar via SOAP, XML en JSON
Volgende: Nieuwe mobiele website, deel 1: Kickoff 02-'11 Nieuwe mobiele website, deel 1: Kickoff

Reacties


Door Tweakers user -RetroX-, maandag 14 februari 2011 14:44

geweldige manier om javascript zo zelf de text te laten genereren om uit te voeren. Heel mooi.

Door Tweakers user Apache, maandag 14 februari 2011 14:53

Yep, een taal die language constructs kan hebben die zo obscuur zijn dat zelfs doorgewinterde javascript devs helemaal geen enkel idee hebben wat ze doen lijkt me ideaal voor long term development en onderhoud van code. Het lijkt visueel wel heel erg op perl op deze manier :)

Door Tweakers user tech-no-logical, maandag 14 februari 2011 15:18

het lijkt idd op obfuscated perl, het zou zo een japh kunnen zijn. ik vond (en vind) het altijd wel grappig, zo'n obfuscated code contest, maar het praktisch nut is ver te zoeken imho.

Door Tweakers user ajakkes, maandag 14 februari 2011 15:28

tech-no-logical schreef op maandag 14 februari 2011 @ 15:18:
het lijkt idd op obfuscated perl, het zou zo een japh kunnen zijn. ik vond (en vind) het altijd wel grappig, zo'n obfuscated code contest, maar het praktisch nut is ver te zoeken imho.
Mocht een dergelijke code regel in mijn javascript file van 1000 regels staan en kwaadaardige code uitvoeren, wat heel goed mogelijk is, zou deze regel mij niet heel erg snel gaan opvallen. Ik denk dat er voor hackers een heel groot praktisch nut is. En daarmee ook voor developers die javascript gebruiken om zich hiertegen te beveiligen. Of voer jij regelmatig een hash validatie uit op je javascript files?

Door Tweakers user creator1988, maandag 14 februari 2011 15:36

Apache schreef op maandag 14 februari 2011 @ 14:53:
Yep, een taal die language constructs kan hebben die zo obscuur zijn dat zelfs doorgewinterde javascript devs helemaal geen enkel idee hebben wat ze doen lijkt me ideaal voor long term development en onderhoud van code. Het lijkt visueel wel heel erg op perl op deze manier :)
Het toont vooral aan hoe flexibel javascript is, het praktisch nut van puur deze snippet lijkt me ook niet zo evident maar het toont wel aan dat je met weinig code hele 'mooie' constructies kan maken. En mooie constructies betekent minder code, en minder code is altijd awesome.

Door Tweakers user Jaap-Jan, maandag 14 februari 2011 16:00

Minder code betekent dat je er te lang over na hebt gedacht om het zo slim mogelijk te doen.

En dat is niet goed: "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

Oftewel: fijn dat de code er slim uitziet, maar als er wat mis mee is is het een hel om erachter te komen wat dat is. Ideaal voor hackers die code willen obfuscaten, maar niet voor programmeurs die een goed programma willen afleveren.

[Reactie gewijzigd op maandag 14 februari 2011 16:02]


Door Tweakers user -RetroX-, maandag 14 februari 2011 16:15

Het voorbeeld toont aan dat je niet de direct geschreven code nodig bent om het toch uitgevoerd te krijgen. Het voorbeeld hierboven laat heel duidelijk zien dat je altijd je userinput moet controleren. Niet alleen op een blacklist methode met verboden woorden maar juist op een whitelist op toegestane input.

(en ja, ik ben erg voorstander van leesbare code, waarbij in ontwikkelmodus ook gedocumenteerd wordt en in live mode alle comments er uit gaan.. wat voor onzin je soms uitgecommentarieerd ziet is ongeloofelijk.)

[Reactie gewijzigd op maandag 14 februari 2011 16:17]


Door Tweakers user PrisonerOfPain, maandag 14 februari 2011 16:19

creator1988 schreef op maandag 14 februari 2011 @ 15:36:
[...]

Het toont vooral aan hoe flexibel javascript is, het praktisch nut van puur deze snippet lijkt me ook niet zo evident maar het toont wel aan dat je met weinig code hele 'mooie' constructies kan maken. En mooie constructies betekent minder code, en minder code is altijd awesome.
Het praktische nut is natuurlijk het uitvoeren van xss exploits ;-)

Door Tweakers user creator1988, maandag 14 februari 2011 17:06

Jaap-Jan schreef op maandag 14 februari 2011 @ 16:00:
Minder code betekent dat je er te lang over na hebt gedacht om het zo slim mogelijk te doen.

En dat is niet goed: "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."
Nee hoor. Ik kan in javascript in minder regels code schrijven dan in C#, zonder dat het onduidelijker wordt; omdat in JS zaken als AOP, Reflection & Anonieme objecten first class citizens zijn.

Door Tweakers user Spetsnaz, maandag 14 februari 2011 18:12

Jaap-Jan schreef op maandag 14 februari 2011 @ 16:00:
Minder code betekent dat je er te lang over na hebt gedacht om het zo slim mogelijk te doen.

En dat is niet goed: "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

Oftewel: fijn dat de code er slim uitziet, maar als er wat mis mee is is het een hel om erachter te komen wat dat is. Ideaal voor hackers die code willen obfuscaten, maar niet voor programmeurs die een goed programma willen afleveren.
Slimme code die door ervaring in 1x opkomt kan dus volgens jou niet? Als het goed is is slimme code ook beter te onderhouden anders zou het geen slimme code zijn.

Door Tweakers user ChessSpider, maandag 14 februari 2011 20:38

@spetsnaz; alles is relatief.. Maar als er een foutje in ($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+
($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__
[_+~$]+$_[_]+$$](_/_) zit kan je dat niet zomaar debuggen, terwijl het wel 'mooie' code is volgens sommige hier omdat het zo klein is geschreven is.
Jaap-Jan geeft terecht aan dat het niet het doel is om dingen zo klein mogelijk op te schrijven.

Door Tweakers user YopY, maandag 14 februari 2011 20:45

Met een taal als C kun je minstens zo goed vage stukjes code schrijven, zie http://www.ioccc.org/. Moet wel zeggen, deze zou zo in dat rijtje passen, en de meeste entries van de IOCCC gebruiken defines om aliassen voor 'gewone' taalconstructs te definiëren.

Reageren is niet meer mogelijk