Soru:
Sıfır genişlikli karakterlerle JavaScript'i şaşırtmak - artıları ve eksileri?
James Donnelly
2013-03-20 17:06:39 UTC
view on stackexchange narkive permalink

Bu, JavaScript Değişkenleri hakkında StackOverflow'daki bir soruya yapılan yorumlardan gelir: Neden ◎ ܫ ◎ ve ☺ JavaScript değişken adları geçerli değil?

JavaScript, sıfır genişlikli karakterleri kabul eder geçerli değişken adları olarak, örneğin bu değişkenlerin üçünün de farklı adları vardır ancak görsel olarak aynıdır:

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

Kullanımda olan yukarıdaki üç değişkenin JSFiddle örneğini burada bulabilirsiniz.

Artıları ve eksileri nelerdir bunu JavaScript (ve diğer destekleyici diller) için bir gizleme tekniği olarak yapmak mı?

Dört yanıtlar:
#1
+13
WPrecht
2013-03-20 17:19:59 UTC
view on stackexchange narkive permalink

Kendi programlarınızda muhtemelen iyidir. Ancak kurumsal bir ortamda, son derece iyi dokümantasyon ve / veya ekip sürekliliği olmayan bir bakım kabusu. Benim deneyimlerime göre ikisi de o kadar yaygın görünmüyor.

Sanırım daha genel bir soru "Gizleme teknikleri gerçekten bu kadar yararlı mı?" Sayfa yükleme amacıyla küçültmeyi anlayabiliyorum. Ancak kaynağı saklamak mantıklı görünmüyor. Ya zeki, daha önce hiç yapılmamış bir algoritmanız olduğunu düşünüyorsunuz. Durum buysa, belki de tamamen gizlemenin bir yolu olmadığı için JS bunun için bir dil değildir. Veya önemsiz olmaya ve belirsizlik yoluyla biraz güvenlik sağlamaya çalışıyorsunuz, genellikle Kötü bir Fikirdir.

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

Aşağıdaki Sorularda büyük bir sorun ortaya çıkmaktadır:

  • Bu tür bir kodla karşılaştıklarında hangi JavaScript-Yorumcular bozulur?
  • Bu kabul edilebilir mi?

Basit bir normal Obfuscator, bazı JavaScript-Yorumlayıcıları bozmadan kabul edilebilir derecede geniş bir kod vermelidir.

Değişken adlarında sıfır genişlikli karakterlerle gerçekten çalışmak isterse, bu kod Code-Obfuscation işlemi (Elde edilen js-File sadece bir Tarayıcı-Versiyon Kontrolünden sonra yüklenmelidir.). Bu şekilde geliştiricinin orijinal kaynak kodunda sıfır genişlikli karakterlerle uğraşması gerekmez.

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

Sıfır genişlikli karakterlerle değişken adlarının gizlemesini kaldırmak, değişkenleri yeniden adlandırmak kadar kolaydır. Bu, değişkenlerin arkasındaki amacı anladıkça ve onlara anlamlı isimler verdiğinizde, gizleme kaldırma sürecinin bir parçası olarak zaten yapacağınız bir şeydir. Dolayısıyla bu teknik, okuyucuyu en fazla yeniden adlandırma geçişi yapmaya sevk edebilir. Ek gizleme kaldırma maliyeti önemsizdir. Buna değmez, a , b , c ,…

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

Bu, bazı güzellikleri de bozar (ancak hepsini değil). Örneğin, kodunuzu JS Beautifier üzerinden çalıştırmak:

  var ab = "Merhaba, dünya!", A‍ b = "Tamamen farklı dizge!", A‌ b = "Yine tamamen farklı bir dize! "; document.getElementById ('result1'). innerHTML = ab; document.getElementById ('result2'). innerHTML = a‍ b; document.getElementById ('result3'). innerHTML = a‌ b;  

("a" ve "b" arasındaki boşluklara dikkat edin.)

Bunun bir profesyonel ve bir aleyhte olduğunu iddia edebilirsiniz. Kodu ne kadar kafa karıştırıcı yaptığınıza bağlı olarak, rastgele boşlukların enjekte edildiğini görmek daha da kafa karıştırıcı olabilir. Öte yandan, okuyucuyu bir şeylerin kesinlikle yolunda olduğu konusunda da uyarıyor.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...