summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/tr/javascript-trap.html
blob: 2d9b05e8b80ab1401024df2dfe8130f40fd6f948 (plain)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
<!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->

<!--#include virtual="/server/header.tr.html" -->
<!-- Parent-Version: 1.96 -->
<!-- This page is derived from /server/standards/boilerplate.html -->
<!--#set var="TAGS" value="essays licensing traps" -->
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>JavaScript Tuzağı - GNU Projesi - Özgür Yazılım Vakfı</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.tr.html" -->
<!--#include virtual="/philosophy/ph-breadcrumb.tr.html" -->
<!--GNUN: OUT-OF-DATE NOTICE-->
<!--#include virtual="/server/top-addendum.tr.html" -->
<div class="article reduced-width">
<h2>JavaScript Tuzağı</h2>

<address class="byline">yazan <a href="https://www.stallman.org/">Richard Stallman</a></address>

<p><strong>Bilgisayarınızda web tarayıcınız aracılığıyla her gün farkında
olmadan özgür olmayan programlar çalıştırıyor olabilirsiniz.</strong></p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<div class="announcement">
<hr class="no-display" />
<p>Web yöneticileri: Bir web sitesindeki JavaScript programlarının lisansını
belirtmenin <a href="/software/librejs/free-your-javascript.html">birkaç
yolu</a> vardır.</p>
<hr class="no-display" />
</div>

<p>Özgür yazılım topluluğunda <a
href="/philosophy/free-software-even-more-important.html">özgür olmayan
herhangi bir programın kullanıcısına</a> kötü davrandığı fikri tanıdık
geliyor. Bazılarımız bilgisayarlarımızdaki tüm özel mülk yazılımları
reddederek özgürlüğümüzü savunuyoruz. Diğerleri özgür olmama durumunu
programa karşı bir darbe olarak kabul eder.</p>

<p>Pek çok kullanıcı, bu sorunun tarayıcıların kurmayı önerdiği eklentiler için
geçerli olduğunun farkındadır, çünkü bu eklentiler özgür olabilirler de
olmayabilir de. Ancak tarayıcılar; size sormadıkları, hatta size hiç söz
etmedikleri başka özgür olmayan programları da çalıştırırlar, web
sayfalarının doğrudan veya bağlantı olarak içerdiği programlar. Bu
programlar çoğunlukla JavaScript ile yazılmış olsa da, diğer diller de
kullanılabilir.</p>

<p>JavaScript (resmî olarak ECMAScript olarak adlandırılır ancak bu adı
kullanan azdır); bir zamanlar web sayfalarındaki sevimli ama önemsiz gezinme
ve görüntüleme özellikleri gibi küçük süsler için kullanılırdı. Bunları
gerçek yazılım olarak değil, yalnızca HTML dilinin uzantıları olarak kabul
etmek ve konuyu takmamak makbuldu.</p>

<p>Bazı siteler hâlâ bu şekilde JavaScript kullansa da, çoğunluğu daha büyük
işler yapan büyük programlar için kullanıyor. Örneğin; Google Dokümanlar
tarayıcınıza Obfuscript diyebileceğimiz sıkıştırılmış bir biçimde yarım
megabaytlık bir JavaScript programı kurmaya çalışır. Bu sıkıştırılmış biçim,
kaynak kodundan, kodu okunabilir hâle getiren ek boşlukları ve anlaşılabilir
hâle getiren açıklayıcı yorumları silerek ve koddaki her anlamlı ismi keyfi
bir kısa adla değiştirerek yapılır, böylece sonuçta ne anlama geldiğini
anlayamayız.</p>

<p><a href="/philosophy/free-sw.html">Özgür yazılımın</a> anlamının bir
parçası, kullanıcıların programın kaynak koduna (planına)
erişebilmeleridir. Bir programın kaynak kodu; yardımcı aralıklar, açıklayıcı
yorumlar ve anlamlı adlar dahil olmak üzere programcıların değiştirmesi için
tercih edilen biçim anlamına gelir. Sıkıştırılmış kod; kaynak kodu yerine
sahte, işe yaramaz bir alternatiftir; bu programların gerçek kaynak kodu
kullanıcılar tarafından kullanılamaz, bu yüzden kullanıcılar bunu anlayamaz;
bu nedenle programlar özgür değildir.</p>

<p>Özgür olmamaya ek olarak bu programların birçoğu <em>kötücül yazılımdır</em>
çünkü <a
href="https://github.com/w3c/fingerprinting-guidance/issues/8">kullanıcıyı
gizlice gözetlerler</a>. Daha da kötüsü, bazı siteler, <a
href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">sayfaya
bakan kullanıcının eylemlerini</a> kaydeden hizmetleri
kullanırlar. Hizmetler, söylendiğine göre, web sitesinin almaması gereken
bazı hassas verileri hariç tutmak için kayıtları &ldquo;yeniden
düzenliyor&rdquo;. Ancak bu güvenilir bir şekilde çalışsa bile bu
hizmetlerin tüm amacı web sitesine aslında erişmemesi gereken kişisel
veriler vermektir.</p>

<p>Tarayıcılar normalde JavaScript programlarını ne zaman yüklediklerini size
söylemez. Bazı tarayıcılarda JavaScript'i tamamen devre dışı bırakmanın bir
yolu vardır ancak bu sorunun farkında olsanız bile anlaşılması zor olan
özgür olmayan programları tanımlamanız ve engellemeniz büyük zorluklar
doğuracaktır. Bununla birlikte özgür yazılım topluluğunda bile çoğu
kullanıcı bu sorunun farkında değildir; tarayıcıların sessizliği onu gizleme
eğilimindedir.</p>

<p>Açıklığa kavuşturmak gerekir ki, JavaScript dili, başka bir dile göre
kendiliğinden kullanıcıların özglürlüğü açısından ne daha iyi ne de daha
kötüdür. Kaynak kodunu özgür bir yazılım lisansı altında dağıtarak bir
JavaScript programını özgür yazılım olarak yayımlamak mümkündür. Program
kendi kendine yetiyorsa, eğer işleyişi ve amacı içeri girdiği sayfadan
bağımsızsa, bu iyi; makinenizdeki bir dosyaya kopyalayabilir, değiştirebilir
ve çalıştırmak için bir tarayıcıyla bu dosyayı ziyaret edebilirsiniz. Ancak
bu alışılmadık bir durum.</p>

<p>JavaScript tuzağı konusu, kullanıcıların ziyaret ettiği bir web sayfasıyla
JavaScript programı indirildiğinde söz konusudur. Bu JavaScript programları
belirli bir sayfa veya siteyle çalışma üzere yazılmıştır ve bu sayfanın veya
sitenin çalışması onlara bağımlıdır.</p>

<p>Varsayalım ki sayfanın JavaScript kodunu kopyaladınız ve değiştirdiniz. Bu
durumda başka bir sorun ortaya çıkıyor: Programın kaynağı mevcut olsa bile
tarayıcılar bu sayfayı veya siteyi ziyaret ederken değiştirilmiş sürümünüzü,
özgün sürüm yerine çalıştırmak için bir yol sunmuyor. Prensipte üstesinden
gelmek çok zor olmasa da etkisi tivoizasyon ile karşılaştırılabilir.</p>

<p>JavaScript, web sitelerinin kullanıcıya gönderilen programlar için
kullandığı tek dil değildir. Flash, JavaScript'in genişletilmiş bir varyantı
aracılığıyla programlamayı destekler, ama bu artık geçmişte kaldı. Microsoft
Silverlight'in Flash'a benzer bir sorun yaratması muhtemel görünüyor, belki
de daha da kötüsü, çünkü Microsoft onu özgür olmayan kod çözücüler için bir
platform olarak kullanıyor. Silverlight için özgür bir alternatif, normalde
özgür alternatif kod çözücüleriyle birlikte gelmediği sürece, özgür dünyanın
işine yaramaya yetmez.</p>

<p>Java uygulamacıkları da tarayıcıda çalışır ve benzer sorunları ortaya
çıkarır. Genel olarak herhangi bir uygulamacık sistemi bu tür bir sorun
taşır. Bir uygulamacık için özgür bir yürütme ortamına sahip olmanın bize
yararı ancak sorunla karşılaştırmak olur.</p>

<p>Salt HTML ve CSS ile programlama teorik olarak mümkün olsa da, uygulamada bu
yetenek sınırlıdır ve sakıncalıdır; sadece bir şeyi yapmak için etkileyici
bir hack. Bu tür programlar özgür olmalı, fakat CSS 2019 itibareiyle
kullanıcıların özgürlüğü için ciddi bir sorun değil.</p>

<p>Web sitelerinin yalnızca özgür olan (bazıları &ldquo;açık&rdquo; diyor),
yani belgelendirmeleri yayınlanan ve gerçekleştirimlerinin özgür olduğu
biçimleri ve protokolleri aracılığıyla iletişim kurmasını isteyen güçlü bir
hareket gelişti. Ancak web sayfalarındaki JavaScript programlarının varlığı
bu ölçütü yetersiz kılmaktadır. JavaScript dilinin kendisi bir biçim olarak
özgürdür ve bir web sitesinde JavaScript kullanımı mutlaka kötü olmak
zorunda değildir. Ancak, yukarıda gördüğümüz gibi, JavaScript programı özgür
değilse, kötü de olabilir. Site kullanıcıya bir program gönderdiğinde
programın belgelenmiş ve engelsiz bir dilde yazılması yeterli değildir;
yazılan bu program da özgür olmalı. &ldquo;Kullanıcıya yalnızca özgür
programları ileten&rdquo; etik bir web sitesi için ölçütün bir parçası
haline gelmelidir.</p>

<p>Özgür olmayan programların sessizce yüklenmesi ve çalıştırılması, &ldquo;web
uygulamalarının&rdquo; ortaya çıkardığı çeşitli sorunlardan sadece
biridir. &ldquo;Web uygulaması&rdquo; terimi, kullanıcılara sunulan yazılım
ile sunucu üzerinde çalışan yazılımlar arasındaki temel ayrımı göz ardı
etmek için tasarlanmıştır. Tarayıcıda çalışan özelleşmiş bir istemci
programı kastediliyor olabilir; özelleşmiş sunucu yazılımı kastediliyor
olabilir; özelleşmiş sunucu yazılımı ile birlikte çalışan özelleşmiş bir
istemci programı kastediliyor olabilir. İstemci ve sunucu tarafları; farklı
bir etik sorun ortaya çıkarmaktadır, sıkı bir şekilde entegre olmuş olsalar
bile tartışmasız tek bir programın bölümlerini oluştururlar. Bu makale
yalnızca istemci tarafındaki yazılım sorununu ele almaktadır. Sunucu
sorununu ayrıca ele alıyoruz.</p>

<p>Pratik açıdan web sitelerinde anlaşılması zor olan özgür olmayan JavaScript
programları sorununu nasıl çözebiliriz? İlk adım, onu çalıştırmaktan
kaçınmaktır.</p>

<p>&ldquo;Anlaşılması zor olan&ldquo; derken neyi kastediyoruz? Bu bir seviye
meselesidir, bu yüzden doğru bir cevap bulmak yerine iyi sonuçlar veren
basit bir ölçüt tasarlama meselesidir.</p>
<p>
Şu anki ölçütümüz, aşağıdaki koşullardan herhangi birini içeren bir
JavaScript programını anlaşılması zor bir program olarak değerlendirmektir:</p>

<ul>
  <li>harici bir komut dosyası olarak adlandırılır (başka bir sayfadan).</li>

  <li>50'den fazla eleman uzunluğunda bir dizi tanımlar.</li>

  <li>ilkel bir tipten başka bir şey çağıran adlandırılmış bir varlık (fonksiyon
veya metot) tanımlar.</li>

  <li>üçten fazla koşullu yapı ve döngü yapısı içeren adlandırılmış bir varlık
tanımlar.</li>

  <li>adlandırılmış tanımların dışındaki kod; sayfada daha fazla tanımlanan
ilkellerden ve fonksiyonlardan başka bir şey çağırır.</li>

  <li>adlandırılmış tanımların dışındaki kod; toplamda üçten fazla koşullu yapı ve
döngü yapısı içerir.</li>

  <li><b>eval</b> kullanır.</li>

  <li>Ajax çağrıları yapar.</li>

  <li><b><em>nesne</em>[<em>özellik</em>]</b> gibi, dinamik nesne özelliği erişimi
için köşeli parantez gösterimini kullanır.</li>

  <li>DOM'u değiştirir.</li>
  
  <li>programı yorumlamadan analiz etmesi zor olan ya da bu tür yapıları kullanan
betiklerle yüklü dinamik JavaScript yapılarını kullanır. Özellikle, bir
karakter dizisinden başka bir yapıyı belirli metotlarla kullanma
(<b>Obj.write</b>, <b>Obj.createElement</b> ve diğerleri).</li>
</ul>

<p>JavaScript kodunun özgür olup olmadığını nasıl anlarız? <a
href="/licenses/javascript-labels.html">Ayrı bir makalede</a> bir web
sayfasındaki anlaşılması zor olan bir JavaScript programının kaynak kodunun
bulunduğu URL'yi ve biçimlendirilmiş yorumları kullanarak lisansını
belirtebileceği bir yöntem öneriyoruz.</p>

<p>Son olarak web sayfalarındaki anlaşılması zor olan özgür olmayan
JavaScript'i tespit etmek ve engellemek için özgür tarayıcıları
değiştirmemiz gerekiyor. <a href="/software/librejs/">LibreJS</a> programı;
ziyaret ettiğiniz sayfalarda özgür olmayan, anlaşılması zor olan bir
JavaScript'i tespit eder ve engeller. LibreJS, IceCat'a dâhil edilmiştir ve
Firefox için bir eklenti olarak mevcuttur.</p>

<p>Tarayıcı kullanıcılarının ayrıca belirli bir sayfada JavaScript
<em>yerine</em> kullanılacak JavaScript kodunu belirtmek için uygun bir
vasıtaya ihtiyacı vardır. (Belirtilen kod, bu sayfadaki özgür JavaScript
programının tamamen değiştirilmesi veya değiştirilmiş bir sürümü olabilir.)
Greasemonkey, bunu yapmaya en yakın eklentidir, ancak tam olarak bunu
yapamaz, çünkü bu program çalıştırılmadan önce bir sayfadaki JavaScript
kodunu değiştirmeyi garanti etmez. Yerel bir vekil sunucu kullanmak işe
yarar ancak bu da gerçek bir çözüm olmak için çok zahmetli. Güvenilir ve
uygun bir çözüm ve değişiklikleri paylaşmak için siteler oluşturmak
gerekir. GNU Projesi sadece özgür değişikliklere adanmış siteleri önermek
ister.</p>

<p>Bu özellikler, bir web sayfasına dâhil olan bir JavaScript programının
gerçek ve pratik anlamda özgür olmasını mümkün kılacaktır. JavaScript artık
özgürlüğümüz için belirgin bir engel teşkil etmeyecek, şimdi C ve Java'nın
olduğundan daha fazla değil en azından. Kurulum için teklif edilen özgür
olmayan paketleri reddettiğimiz gibi, özgür olmayan, anlaşılması zor olan
JavaScript programlarını reddebilecek ve hatta değiştirebileceğiz. Böylece
web sitelerinin Javascript'lerini özgürleştirme kampanyamız da başlayabilir.</p>

<p>Bu arada özgür olmayan bir JavaScript programını çalıştırmanın kabul
edilebilir olduğu bir durum var: Web sitesi operatörlerine sitedeki
JavaScript kodunu özgürleştirmeleri veya kaldırmaları gerektiğini söyleyen
bir şikayet göndermek. Lütfen bunu yapmak için geçici olarak JavaScript'i
etkinleştirmekten çekinmeyin, ancak elbette daha sonra tekrar devre dışı
bırakmayı unutmayın.</p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<div class="announcement">
<hr class="no-display" />
<p>Web yöneticileri: Bir web sitesindeki JavaScript programlarının lisansını
belirtmenin <a href="/software/librejs/free-your-javascript.html">birkaç
yolu</a> vardır.</p>
<hr class="no-display" />
</div>

<p><strong>Teşekkürler:</strong> <a href="/people/people.html#mattlee">Matt
Lee</a> ve <a href="https://johnresig.org">John Resig</a>'e önerdiğimiz
ölçütleri tanımlamamıza yardım ettikleri için ve hususu dikkatime sunduğu
için David Parunakian'a teşekkür ediyorum.</p>
</div>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
 </div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.tr.html" -->
<div id="footer" role="contentinfo">
<div class="unprintable">

<p>Lütfen FSF ve GNU ile ilgili sorularınızı <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a> adresine iletin. FSF ile
iletişim kurmanın <a href="/contact/">başka yolları</a> da vardır. Lütfen
çalışmayan bağlantıları ve başka düzeltmeleri veya önerilerinizi <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a> adresine
gönderin.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and contributing translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Çevirilerimizde bulmuş olabileceğiniz hataları, aklınızdaki soru ve
önerilerinizi lütfen <a
href="mailto:web-translators@gnu.org">bize&nbsp;bildirin</a>.</p><p>Bu
yazının çeviri düzenlemesi ve sunuşu ile ilgili bilgi için lütfen <a
href="/server/standards/README.translations.html">Çeviriler BENİOKU</a>
sayfasına bakın. Bu sayfanın ve diğer tüm sayfaların Türkçe çevirileri
gönüllüler tarafından yapılmaktadır; Türkçe niteliği yüksek bir <a
href="/home.html">www.gnu.org</a> için bize yardımcı olmak istiyorsanız, <a
href="https://savannah.gnu.org/projects/www-tr">çalışma&nbsp;sayfamızı</a>
ziyaret edebilirsiniz.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Copyright &copy; 2009-2013, 2016-2019, 2021 Richard Stallman</p>

<p>Bu sayfa <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.tr">Creative
Commons Alıntı-Türetilemez 4.0 Uluslararası Lisansı</a> altında
lisanslanmıştır.</p>

<!--#include virtual="/server/bottom-notes.tr.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<p><strong>Çeviriye katkıda bulunanlar:</strong></p>
<ul>
<li>The FLOSS Information <a
href="mailto:theflossinformation@gmail.com">&lt;theflossinformation@gmail.com&gt;</a>,
2019, 2020.</li>

</ul></div>

<p class="unprintable"><!-- timestamp start -->
Son Güncelleme:

$Date: 2021/10/14 20:02:37 $

<!-- timestamp end -->
</p>
</div>
</div>
<!-- for class="inner", starts in the banner include -->
</body>
</html>