Pitanje:
Zamračivanje JavaScript-a znakovima nulte širine - prednosti i nedostaci?
James Donnelly
2013-03-20 17:06:39 UTC
view on stackexchange narkive permalink

To dolazi iz komentara na pitanje na StackOverflowu o JavaScript varijablama: Zašto ◎ ܫ ◎ i ☺ nisu valjana imena JavaScript varijabli?

JavaScript prihvaća znakove nulte širine kao valjana imena varijabli, na primjer sve tri ove varijable imaju različita imena, ali su vizualno identične:

  var ab, / * ab * / a‍b, / * a‍ b * / a‌b; / * a‌ b * /  

Evo JSFiddle primjera gornje tri korištene varijable.

Koje su prednosti i nedostaci da to učinite kao tehniku ​​zamagljivanja za JavaScript (i druge podržane jezike)?

četiri odgovori:
#1
+13
WPrecht
2013-03-20 17:19:59 UTC
view on stackexchange narkive permalink

Pa, u vašim vlastitim programima to je vjerojatno u redu. Ali u korporacijskom okruženju to je noćna mora održavanja bez izuzetno dobre dokumentacije i / ili kontinuiteta tima. Ni jedno ni drugo ne čini se toliko uobičajenim u mom iskustvu.

Mislim da bi moglo biti općenitije pitanje, "jesu li tehnike zamagljivanja zaista toliko korisne?" Mogu razumjeti minify za učitavanje stranica. Ali čini se da skrivanje izvora nema smisla. Ili mislite da imate neki pametan, nikad prije urađen algoritam. Ako je to slučaj, možda JS nije njegov jezik, jer stvarno nema načina da se to potpuno sakrije. Ili pokušavate biti trixsy i pokušavate osigurati sigurnost putem nejasnoća, općenito loše ideje.

#2
+8
Michael Anderson
2013-03-20 19:25:04 UTC
view on stackexchange narkive permalink

Velika zabrinutost postavljena je u sljedećim pitanjima:

  • Koji se tumači JavaScript-a prekidaju kad se suoče s takvim kodom?
  • Je li to prihvatljivo?

Jednostavni normalni Obfuscator trebao bi dati izrazito tupi kôd bez razbijanja nekih JavaScript-tumača.

Ako se stvarno želi raditi sa znakovima nulte širine u imenima varijabli, to bi bilo uključeno u Postupak zamagljivanja koda (Rezultirajuća js-datoteka treba se učitati samo nakon provjere verzije preglednika.). Na ovaj način programer ne mora imati posla sa znakovima nulte širine u izvornom izvornom kodu.

#3
+6
Gilles 'SO- stop being evil'
2013-03-21 00:10:37 UTC
view on stackexchange narkive permalink

Otkrivanje imena varijabli znakovima nulte širine lako je poput preimenovanja varijabli. To biste u svakom slučaju učinili kao dio procesa deobfuskacije jer zaključujete o namjeri iza varijabli i dajete im smislena imena. Dakle, ova bi tehnika mogla najviše potaknuti čitatelja na početno preimenovanje. Dodatni trošak defuskacije zanemariv je. Ne vrijedi, nema prednosti za a , b , c , ...

#4
+5
George V. Williams
2013-03-21 02:36:51 UTC
view on stackexchange narkive permalink

Ovo također razbija neke uljepšavanja (ali ne sve). Na primjer, izvođenje koda kroz JS Beautifier:

  var ab = "Zdravo, svijete!", A‍ b = "Potpuno drugačiji niz!", A‌ b = "Još jedan potpuno drugačiji niz! "; document.getElementById ('result1'). innerHTML = ab; document.getElementById ('result2'). innerHTML = a‍ b; document.getElementById ('result3'). innerHTML = a‌ b;  

(Imajte na umu razmake između "a" i "b".)

Možete tvrditi da je ovo za i protiv. Ovisno o tome koliko točno zbunjujete kôd, možda će biti još zbunjujuće vidjeti slučajne razmake koji se ubrizgavaju. S druge strane, također upozorava čitatelja da se nešto definitivno događa.



Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...