javascript-trap.html (18318B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> 2 3 <!--#include virtual="/server/header.tr.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="essays licensing traps" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>JavaScript Tuzağı - GNU Projesi - Özgür Yazılım Vakfı</title> 11 12 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 13 <!--#include virtual="/server/banner.tr.html" --> 14 <!--#include virtual="/philosophy/ph-breadcrumb.tr.html" --> 15 <!--GNUN: OUT-OF-DATE NOTICE--> 16 <!--#include virtual="/server/top-addendum.tr.html" --> 17 <div class="article reduced-width"> 18 <h2>JavaScript Tuzağı</h2> 19 20 <address class="byline">yazan <a href="https://www.stallman.org/">Richard Stallman</a></address> 21 22 <p><strong>Bilgisayarınızda web tarayıcınız aracılığıyla her gün farkında 23 olmadan özgür olmayan programlar çalıştırıyor olabilirsiniz.</strong></p> 24 25 <!-- any links that used to point to the appendices should point to 26 free-your-javascript.html instead. --> 27 <div class="announcement"> 28 <hr class="no-display" /> 29 <p>Web yöneticileri: Bir web sitesindeki JavaScript programlarının lisansını 30 belirtmenin <a href="/software/librejs/free-your-javascript.html">birkaç 31 yolu</a> vardır.</p> 32 <hr class="no-display" /> 33 </div> 34 35 <p>Özgür yazılım topluluğunda <a 36 href="/philosophy/free-software-even-more-important.html">özgür olmayan 37 herhangi bir programın kullanıcısına</a> kötü davrandığı fikri tanıdık 38 geliyor. Bazılarımız bilgisayarlarımızdaki tüm özel mülk yazılımları 39 reddederek özgürlüğümüzü savunuyoruz. Diğerleri özgür olmama durumunu 40 programa karşı bir darbe olarak kabul eder.</p> 41 42 <p>Pek çok kullanıcı, bu sorunun tarayıcıların kurmayı önerdiği eklentiler için 43 geçerli olduğunun farkındadır, çünkü bu eklentiler özgür olabilirler de 44 olmayabilir de. Ancak tarayıcılar; size sormadıkları, hatta size hiç söz 45 etmedikleri başka özgür olmayan programları da çalıştırırlar, web 46 sayfalarının doğrudan veya bağlantı olarak içerdiği programlar. Bu 47 programlar çoğunlukla JavaScript ile yazılmış olsa da, diğer diller de 48 kullanılabilir.</p> 49 50 <p>JavaScript (resmî olarak ECMAScript olarak adlandırılır ancak bu adı 51 kullanan azdır); bir zamanlar web sayfalarındaki sevimli ama önemsiz gezinme 52 ve görüntüleme özellikleri gibi küçük süsler için kullanılırdı. Bunları 53 gerçek yazılım olarak değil, yalnızca HTML dilinin uzantıları olarak kabul 54 etmek ve konuyu takmamak makbuldu.</p> 55 56 <p>Bazı siteler hâlâ bu şekilde JavaScript kullansa da, çoğunluğu daha büyük 57 işler yapan büyük programlar için kullanıyor. Örneğin; Google Dokümanlar 58 tarayıcınıza Obfuscript diyebileceğimiz sıkıştırılmış bir biçimde yarım 59 megabaytlık bir JavaScript programı kurmaya çalışır. Bu sıkıştırılmış biçim, 60 kaynak kodundan, kodu okunabilir hâle getiren ek boşlukları ve anlaşılabilir 61 hâle getiren açıklayıcı yorumları silerek ve koddaki her anlamlı ismi keyfi 62 bir kısa adla değiştirerek yapılır, böylece sonuçta ne anlama geldiğini 63 anlayamayız.</p> 64 65 <p><a href="/philosophy/free-sw.html">Özgür yazılımın</a> anlamının bir 66 parçası, kullanıcıların programın kaynak koduna (planına) 67 erişebilmeleridir. Bir programın kaynak kodu; yardımcı aralıklar, açıklayıcı 68 yorumlar ve anlamlı adlar dahil olmak üzere programcıların değiştirmesi için 69 tercih edilen biçim anlamına gelir. Sıkıştırılmış kod; kaynak kodu yerine 70 sahte, işe yaramaz bir alternatiftir; bu programların gerçek kaynak kodu 71 kullanıcılar tarafından kullanılamaz, bu yüzden kullanıcılar bunu anlayamaz; 72 bu nedenle programlar özgür değildir.</p> 73 74 <p>Özgür olmamaya ek olarak bu programların birçoğu <em>kötücül yazılımdır</em> 75 çünkü <a 76 href="https://github.com/w3c/fingerprinting-guidance/issues/8">kullanıcıyı 77 gizlice gözetlerler</a>. Daha da kötüsü, bazı siteler, <a 78 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">sayfaya 79 bakan kullanıcının eylemlerini</a> kaydeden hizmetleri 80 kullanırlar. Hizmetler, söylendiğine göre, web sitesinin almaması gereken 81 bazı hassas verileri hariç tutmak için kayıtları “yeniden 82 düzenliyor”. Ancak bu güvenilir bir şekilde çalışsa bile bu 83 hizmetlerin tüm amacı web sitesine aslında erişmemesi gereken kişisel 84 veriler vermektir.</p> 85 86 <p>Tarayıcılar normalde JavaScript programlarını ne zaman yüklediklerini size 87 söylemez. Bazı tarayıcılarda JavaScript'i tamamen devre dışı bırakmanın bir 88 yolu vardır ancak bu sorunun farkında olsanız bile anlaşılması zor olan 89 özgür olmayan programları tanımlamanız ve engellemeniz büyük zorluklar 90 doğuracaktır. Bununla birlikte özgür yazılım topluluğunda bile çoğu 91 kullanıcı bu sorunun farkında değildir; tarayıcıların sessizliği onu gizleme 92 eğilimindedir.</p> 93 94 <p>Açıklığa kavuşturmak gerekir ki, JavaScript dili, başka bir dile göre 95 kendiliğinden kullanıcıların özglürlüğü açısından ne daha iyi ne de daha 96 kötüdür. Kaynak kodunu özgür bir yazılım lisansı altında dağıtarak bir 97 JavaScript programını özgür yazılım olarak yayımlamak mümkündür. Program 98 kendi kendine yetiyorsa, eğer işleyişi ve amacı içeri girdiği sayfadan 99 bağımsızsa, bu iyi; makinenizdeki bir dosyaya kopyalayabilir, değiştirebilir 100 ve çalıştırmak için bir tarayıcıyla bu dosyayı ziyaret edebilirsiniz. Ancak 101 bu alışılmadık bir durum.</p> 102 103 <p>JavaScript tuzağı konusu, kullanıcıların ziyaret ettiği bir web sayfasıyla 104 JavaScript programı indirildiğinde söz konusudur. Bu JavaScript programları 105 belirli bir sayfa veya siteyle çalışma üzere yazılmıştır ve bu sayfanın veya 106 sitenin çalışması onlara bağımlıdır.</p> 107 108 <p>Varsayalım ki sayfanın JavaScript kodunu kopyaladınız ve değiştirdiniz. Bu 109 durumda başka bir sorun ortaya çıkıyor: Programın kaynağı mevcut olsa bile 110 tarayıcılar bu sayfayı veya siteyi ziyaret ederken değiştirilmiş sürümünüzü, 111 özgün sürüm yerine çalıştırmak için bir yol sunmuyor. Prensipte üstesinden 112 gelmek çok zor olmasa da etkisi tivoizasyon ile karşılaştırılabilir.</p> 113 114 <p>JavaScript, web sitelerinin kullanıcıya gönderilen programlar için 115 kullandığı tek dil değildir. Flash, JavaScript'in genişletilmiş bir varyantı 116 aracılığıyla programlamayı destekler, ama bu artık geçmişte kaldı. Microsoft 117 Silverlight'in Flash'a benzer bir sorun yaratması muhtemel görünüyor, belki 118 de daha da kötüsü, çünkü Microsoft onu özgür olmayan kod çözücüler için bir 119 platform olarak kullanıyor. Silverlight için özgür bir alternatif, normalde 120 özgür alternatif kod çözücüleriyle birlikte gelmediği sürece, özgür dünyanın 121 işine yaramaya yetmez.</p> 122 123 <p>Java uygulamacıkları da tarayıcıda çalışır ve benzer sorunları ortaya 124 çıkarır. Genel olarak herhangi bir uygulamacık sistemi bu tür bir sorun 125 taşır. Bir uygulamacık için özgür bir yürütme ortamına sahip olmanın bize 126 yararı ancak sorunla karşılaştırmak olur.</p> 127 128 <p>Salt HTML ve CSS ile programlama teorik olarak mümkün olsa da, uygulamada bu 129 yetenek sınırlıdır ve sakıncalıdır; sadece bir şeyi yapmak için etkileyici 130 bir hack. Bu tür programlar özgür olmalı, fakat CSS 2019 itibareiyle 131 kullanıcıların özgürlüğü için ciddi bir sorun değil.</p> 132 133 <p>Web sitelerinin yalnızca özgür olan (bazıları “açık” diyor), 134 yani belgelendirmeleri yayınlanan ve gerçekleştirimlerinin özgür olduğu 135 biçimleri ve protokolleri aracılığıyla iletişim kurmasını isteyen güçlü bir 136 hareket gelişti. Ancak web sayfalarındaki JavaScript programlarının varlığı 137 bu ölçütü yetersiz kılmaktadır. JavaScript dilinin kendisi bir biçim olarak 138 özgürdür ve bir web sitesinde JavaScript kullanımı mutlaka kötü olmak 139 zorunda değildir. Ancak, yukarıda gördüğümüz gibi, JavaScript programı özgür 140 değilse, kötü de olabilir. Site kullanıcıya bir program gönderdiğinde 141 programın belgelenmiş ve engelsiz bir dilde yazılması yeterli değildir; 142 yazılan bu program da özgür olmalı. “Kullanıcıya yalnızca özgür 143 programları ileten” etik bir web sitesi için ölçütün bir parçası 144 haline gelmelidir.</p> 145 146 <p>Özgür olmayan programların sessizce yüklenmesi ve çalıştırılması, “web 147 uygulamalarının” ortaya çıkardığı çeşitli sorunlardan sadece 148 biridir. “Web uygulaması” terimi, kullanıcılara sunulan yazılım 149 ile sunucu üzerinde çalışan yazılımlar arasındaki temel ayrımı göz ardı 150 etmek için tasarlanmıştır. Tarayıcıda çalışan özelleşmiş bir istemci 151 programı kastediliyor olabilir; özelleşmiş sunucu yazılımı kastediliyor 152 olabilir; özelleşmiş sunucu yazılımı ile birlikte çalışan özelleşmiş bir 153 istemci programı kastediliyor olabilir. İstemci ve sunucu tarafları; farklı 154 bir etik sorun ortaya çıkarmaktadır, sıkı bir şekilde entegre olmuş olsalar 155 bile tartışmasız tek bir programın bölümlerini oluştururlar. Bu makale 156 yalnızca istemci tarafındaki yazılım sorununu ele almaktadır. Sunucu 157 sorununu ayrıca ele alıyoruz.</p> 158 159 <p>Pratik açıdan web sitelerinde anlaşılması zor olan özgür olmayan JavaScript 160 programları sorununu nasıl çözebiliriz? İlk adım, onu çalıştırmaktan 161 kaçınmaktır.</p> 162 163 <p>“Anlaşılması zor olan“ derken neyi kastediyoruz? Bu bir seviye 164 meselesidir, bu yüzden doğru bir cevap bulmak yerine iyi sonuçlar veren 165 basit bir ölçüt tasarlama meselesidir.</p> 166 <p> 167 Şu anki ölçütümüz, aşağıdaki koşullardan herhangi birini içeren bir 168 JavaScript programını anlaşılması zor bir program olarak değerlendirmektir:</p> 169 170 <ul> 171 <li>harici bir komut dosyası olarak adlandırılır (başka bir sayfadan).</li> 172 173 <li>50'den fazla eleman uzunluğunda bir dizi tanımlar.</li> 174 175 <li>ilkel bir tipten başka bir şey çağıran adlandırılmış bir varlık (fonksiyon 176 veya metot) tanımlar.</li> 177 178 <li>üçten fazla koşullu yapı ve döngü yapısı içeren adlandırılmış bir varlık 179 tanımlar.</li> 180 181 <li>adlandırılmış tanımların dışındaki kod; sayfada daha fazla tanımlanan 182 ilkellerden ve fonksiyonlardan başka bir şey çağırır.</li> 183 184 <li>adlandırılmış tanımların dışındaki kod; toplamda üçten fazla koşullu yapı ve 185 döngü yapısı içerir.</li> 186 187 <li><b>eval</b> kullanır.</li> 188 189 <li>Ajax çağrıları yapar.</li> 190 191 <li><b><em>nesne</em>[<em>özellik</em>]</b> gibi, dinamik nesne özelliği erişimi 192 için köşeli parantez gösterimini kullanır.</li> 193 194 <li>DOM'u değiştirir.</li> 195 196 <li>programı yorumlamadan analiz etmesi zor olan ya da bu tür yapıları kullanan 197 betiklerle yüklü dinamik JavaScript yapılarını kullanır. Özellikle, bir 198 karakter dizisinden başka bir yapıyı belirli metotlarla kullanma 199 (<b>Obj.write</b>, <b>Obj.createElement</b> ve diğerleri).</li> 200 </ul> 201 202 <p>JavaScript kodunun özgür olup olmadığını nasıl anlarız? <a 203 href="/licenses/javascript-labels.html">Ayrı bir makalede</a> bir web 204 sayfasındaki anlaşılması zor olan bir JavaScript programının kaynak kodunun 205 bulunduğu URL'yi ve biçimlendirilmiş yorumları kullanarak lisansını 206 belirtebileceği bir yöntem öneriyoruz.</p> 207 208 <p>Son olarak web sayfalarındaki anlaşılması zor olan özgür olmayan 209 JavaScript'i tespit etmek ve engellemek için özgür tarayıcıları 210 değiştirmemiz gerekiyor. <a href="/software/librejs/">LibreJS</a> programı; 211 ziyaret ettiğiniz sayfalarda özgür olmayan, anlaşılması zor olan bir 212 JavaScript'i tespit eder ve engeller. LibreJS, IceCat'a dâhil edilmiştir ve 213 Firefox için bir eklenti olarak mevcuttur.</p> 214 215 <p>Tarayıcı kullanıcılarının ayrıca belirli bir sayfada JavaScript 216 <em>yerine</em> kullanılacak JavaScript kodunu belirtmek için uygun bir 217 vasıtaya ihtiyacı vardır. (Belirtilen kod, bu sayfadaki özgür JavaScript 218 programının tamamen değiştirilmesi veya değiştirilmiş bir sürümü olabilir.) 219 Greasemonkey, bunu yapmaya en yakın eklentidir, ancak tam olarak bunu 220 yapamaz, çünkü bu program çalıştırılmadan önce bir sayfadaki JavaScript 221 kodunu değiştirmeyi garanti etmez. Yerel bir vekil sunucu kullanmak işe 222 yarar ancak bu da gerçek bir çözüm olmak için çok zahmetli. Güvenilir ve 223 uygun bir çözüm ve değişiklikleri paylaşmak için siteler oluşturmak 224 gerekir. GNU Projesi sadece özgür değişikliklere adanmış siteleri önermek 225 ister.</p> 226 227 <p>Bu özellikler, bir web sayfasına dâhil olan bir JavaScript programının 228 gerçek ve pratik anlamda özgür olmasını mümkün kılacaktır. JavaScript artık 229 özgürlüğümüz için belirgin bir engel teşkil etmeyecek, şimdi C ve Java'nın 230 olduğundan daha fazla değil en azından. Kurulum için teklif edilen özgür 231 olmayan paketleri reddettiğimiz gibi, özgür olmayan, anlaşılması zor olan 232 JavaScript programlarını reddebilecek ve hatta değiştirebileceğiz. Böylece 233 web sitelerinin Javascript'lerini özgürleştirme kampanyamız da başlayabilir.</p> 234 235 <p>Bu arada özgür olmayan bir JavaScript programını çalıştırmanın kabul 236 edilebilir olduğu bir durum var: Web sitesi operatörlerine sitedeki 237 JavaScript kodunu özgürleştirmeleri veya kaldırmaları gerektiğini söyleyen 238 bir şikayet göndermek. Lütfen bunu yapmak için geçici olarak JavaScript'i 239 etkinleştirmekten çekinmeyin, ancak elbette daha sonra tekrar devre dışı 240 bırakmayı unutmayın.</p> 241 242 <!-- any links that used to point to the appendices should point to 243 free-your-javascript.html instead. --> 244 <div class="announcement"> 245 <hr class="no-display" /> 246 <p>Web yöneticileri: Bir web sitesindeki JavaScript programlarının lisansını 247 belirtmenin <a href="/software/librejs/free-your-javascript.html">birkaç 248 yolu</a> vardır.</p> 249 <hr class="no-display" /> 250 </div> 251 252 <p><strong>Teşekkürler:</strong> <a href="/people/people.html#mattlee">Matt 253 Lee</a> ve <a href="https://johnresig.org">John Resig</a>'e önerdiğimiz 254 ölçütleri tanımlamamıza yardım ettikleri için ve hususu dikkatime sunduğu 255 için David Parunakian'a teşekkür ediyorum.</p> 256 </div> 257 258 <div class="translators-notes"> 259 260 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 261 </div> 262 </div> 263 264 <!-- for id="content", starts in the include above --> 265 <!--#include virtual="/server/footer.tr.html" --> 266 <div id="footer" role="contentinfo"> 267 <div class="unprintable"> 268 269 <p>Lütfen FSF ve GNU ile ilgili sorularınızı <a 270 href="mailto:gnu@gnu.org"><gnu@gnu.org></a> adresine iletin. FSF ile 271 iletişim kurmanın <a href="/contact/">başka yolları</a> da vardır. Lütfen 272 çalışmayan bağlantıları ve başka düzeltmeleri veya önerilerinizi <a 273 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a> adresine 274 gönderin.</p> 275 276 <p> 277 <!-- TRANSLATORS: Ignore the original text in this paragraph, 278 replace it with the translation of these two: 279 280 We work hard and do our best to provide accurate, good quality 281 translations. However, we are not exempt from imperfection. 282 Please send your comments and general suggestions in this regard 283 to <a href="mailto:web-translators@gnu.org"> 284 285 <web-translators@gnu.org></a>.</p> 286 287 <p>For information on coordinating and contributing translations of 288 our web pages, see <a 289 href="/server/standards/README.translations.html">Translations 290 README</a>. --> 291 Çevirilerimizde bulmuş olabileceğiniz hataları, aklınızdaki soru ve 292 önerilerinizi lütfen <a 293 href="mailto:web-translators@gnu.org">bize bildirin</a>.</p><p>Bu 294 yazının çeviri düzenlemesi ve sunuşu ile ilgili bilgi için lütfen <a 295 href="/server/standards/README.translations.html">Çeviriler BENİOKU</a> 296 sayfasına bakın. Bu sayfanın ve diğer tüm sayfaların Türkçe çevirileri 297 gönüllüler tarafından yapılmaktadır; Türkçe niteliği yüksek bir <a 298 href="/home.html">www.gnu.org</a> için bize yardımcı olmak istiyorsanız, <a 299 href="https://savannah.gnu.org/projects/www-tr">çalışma sayfamızı</a> 300 ziyaret edebilirsiniz.</p> 301 </div> 302 303 <!-- Regarding copyright, in general, standalone pages (as opposed to 304 files generated as part of manuals) on the GNU web server should 305 be under CC BY-ND 4.0. Please do NOT change or remove this 306 without talking with the webmasters or licensing team first. 307 Please make sure the copyright date is consistent with the 308 document. For web pages, it is ok to list just the latest year the 309 document was modified, or published. 310 311 If you wish to list earlier years, that is ok too. 312 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 313 years, as long as each year in the range is in fact a copyrightable 314 year, i.e., a year in which the document was published (including 315 being publicly visible on the web or in a revision control system). 316 317 There is more detail about copyright years in the GNU Maintainers 318 Information document, www.gnu.org/prep/maintain. --> 319 <p>Copyright © 2009-2013, 2016-2019, 2021 Richard Stallman</p> 320 321 <p>Bu sayfa <a rel="license" 322 href="http://creativecommons.org/licenses/by-nd/4.0/deed.tr">Creative 323 Commons Alıntı-Türetilemez 4.0 Uluslararası Lisansı</a> altında 324 lisanslanmıştır.</p> 325 326 <!--#include virtual="/server/bottom-notes.tr.html" --> 327 <div class="translators-credits"> 328 329 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 330 <p><strong>Çeviriye katkıda bulunanlar:</strong></p> 331 <ul> 332 <li>The FLOSS Information <a 333 href="mailto:theflossinformation@gmail.com"><theflossinformation@gmail.com></a>, 334 2019, 2020.</li> 335 336 </ul></div> 337 338 <p class="unprintable"><!-- timestamp start --> 339 Son Güncelleme: 340 341 $Date: 2021/10/14 20:02:37 $ 342 343 <!-- timestamp end --> 344 </p> 345 </div> 346 </div> 347 <!-- for class="inner", starts in the banner include --> 348 </body> 349 </html>