summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/nl/javascript-trap.html
blob: 34d6db752b1dc7c1808a8f1e53a3832ddfea50c0 (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
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/javascript-trap.nl.po">
 https://www.gnu.org/philosophy/po/javascript-trap.nl.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html"
 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.nl-diff.html"
 --><!--#set var="OUTDATED_SINCE" value="2017-12-11" -->

<!--#include virtual="/server/header.nl.html" -->
<!-- Parent-Version: 1.79 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>De JavaScript-valstrik</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.nl.html" -->
<!--#include virtual="/server/outdated.nl.html" -->
<h2>De JavaScript-valstrik</h2>

<p>door <a href="http://www.stallman.org/">Richard Stallman</a></p>

<p><strong>Waarschijnlijk voer je elke dag niet-vrije programma's uit op je
computer zonder dat je het door hebt&mdash;via je webbrowser.</strong></p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Websitebeheerders: er zijn <a
href="/software/librejs/free-your-javascript.html">diverse methoden</a> om
de licentie van JavaScript-programma's op een website aan te geven.</p>
</blockquote>

<p>In de vrijesoftwaregemeenschap is het bekend dat niet-vrije programma's hun
gebruikers misbruiken. Sommigen onder ons  verdedigen onze vrijheid weigeren
door alle private software op onze computers af te wijzen. Vele anderen
beschouwen onvrijheid als een zeer slechte eigenschap van het programma.</p>

<p>Veel gebruikers zijn zich ervan bewust dat deze kwestie ook van toepassing
is op add-ons die in de webbrowser ge&iuml;nstalleerd kunnen worden, omdat
ook deze vrij of niet-vrij kunnen zijn. Maar browsers gebruiken andere
niet-vrije programma's zonder jou daar eerst toestemming voor te vragen of
zelfs over te informeren&mdash;programma's die zich in webpagina's
bevinden. Deze programma's worden meestal geschreven in JavaScript, maar
andere programmeertalen worden ook gebruikt.</p>

<p>JavaScript (officieel ECMAScript genoemd, maar weinigen gebruiken die naam)
werd eerst gebruikt voor kleine details in webpagina's, zoals schattige maar
niet-essenti&euml;le functies om te bladeren door webpagina's. Het was
acceptabel om deze te beschouwen als uitbreidingen van de HTML-opmaak, in
plaats van echte software; het was geen belangrijke kwestie.</p>

<p>Veel websites gebruiken JavaScript nog steeds op die manier, maar andere
websites gebruiken het voor veelomvattende programma's die grote taken
uitvoeren. Neem bijvoorbeeld Google Docs; het probeert een
JavaScript-programma naar je machine te downloaden dat een halve megabyte
groot is, in een compacte vorm die we Obfuscript noemen, omdat het geen
commentaar bevat en nauwelijks spaties, en de namen van methoden zijn
&eacute;&eacute;n letter lang. De broncode van een programma is de vorm die
het liefst gebruikt wordt om het te bewerken; de compacte code is niet de
broncode, en de echte broncode van dit programma is niet beschikbaar voor de
gebruiker.</p>

<p>Veel van deze programma's zijn niet alleen niet-vrij, maar ook malware,
omdat ze <a href="http://github.com/w3c/fingerprinting-guidance/issues/8">de
gebruiker bespioneren</a>.</p>

<p>Browsers vertellen je normaal gesproken niet wanneer zij
JavaScript-programma's laden. Sommige browsers hebben de mogelijkheid om
JavaScript geheel uit te schakelen, maar zelfs als je je bewust bent van
deze kwestie, zou het grote moeite kosten om de niet-triviale, niet-vrije
programma's te identificeren en deze te blokkeren. Echter, zelfs in de
vrije-softwaregemeenschap zijn de meeste gebruikers zich niet bewust van
deze kwestie; het zwijgen van de browser verhult het.</p>

<p>Het is mogelijk om JavaScript-programma's als vrije software uit te brengen,
door het verspreiden van de broncode onder een vrije-software licentie. Als
het programma zelf-bevattend is&mdash;zijn functioneren en doel zijn
onafhankelijk van de pagina waarin het geleverd werd&mdash;is dat prima; je
kunt het programma kopi&euml;ren naar je eigen computer, het wijzigen, en
dat bestand openen met een browser om het uit te voeren. Maar dat is een
ongebruikelijk geval.</p>

<p>In het gebruikelijke geval zijn JavaScript-programma's bedoeld om te werken
met een bepaalde pagina of website, en de pagina of website hangt voor zijn
functioneren van deze programma's af. Dan speelt een ander probleem: zelfs
als de broncode van het programma beschikbaar is, bieden browsers je geen
manier aan om jouw aangepaste versie uit te voeren in plaats van de
originele versie bij het bezoeken van die pagina of website. Het effect
lijkt op tivoisatie (waarbij je de software niet kunt vervangen), hoewel het
in principe niet zo moeilijk is op te lossen.</p>

<p>JavaScript is niet de enige programmeertaal die websites gebruiken om
programma's naar de gebruiker te sturen. Flash ondersteunt programmeren door
middel van een uitgebreide variant van JavaScript; als we ooit een compleet
vrije Flash-speler hebben, moeten we omgaan met de kwestie van niet-vrije
Flash-programma's. Silverlight heeft een vergelijkbaar probleem, maar dan
erger, omdat Microsoft het gebruikt als een platform voor niet-vrije
codecs. Een vrije vervanging van Silverlight is niet genoeg voor de vrije
wereld totdat het normaal gesproken geleverd wordt met vrije vervangingen
voor codecs.</p>

<p>Java-applets worden ook in de browser uitgevoerd en hebben vergelijkbare
problemen. Over het algemeen zal elke vorm van applet dit soort problemen
hebben. Wanneer we een vrije uitvoeringsomgeving hebben voor een applet
brengt dat ons alleen ver genoeg om het probleem te ervaren.</p>

<p>Het is theoretisch mogelijk om te programmeren in HTML en CSS, maar in de
praktijk is deze mogelijkheid gelimiteerd en niet gemakkelijk; het zou een
ware prestatie zijn om iets te programmeren in deze talen. Dergelijke
programma's zouden vrij moeten zijn, maar CSS is anno 2016 geen serieus
probleem voor de vrijheid van gebruikers.</p>

<p>Er heeft zich een sterke beweging ontwikkeld die oproept dat websites alleen
communiceren door middel van formaten en protocollen die vrij zijn (sommigen
zeggen &quot;open&quot;); wat betekent dat de documentatie gepubliceerd is
en iedereen vrij is het te implementeren. Met de aanwezigheid van
programma's in webpagina's is die eis noodzakelijk, maar niet
voldoende. JavaScript zelf, als formaat, is vrij, en het gebruiken van
JavaScript in een webpagina is niet noodzakelijkerwijs slecht. Echter, zoals
we hierboven hebben gezien, hoeft het ook niet goed te zijn. Wanneer de
website een programma naar de gebruiker verzendt, is het niet niet genoeg
als het programma is geschreven in een gedocumenteerde en onbelemmerde taal;
het programma moet zelf ook vrij zijn. &ldquo;Alleen vrije programma's die
naar de gebruiker verzonden worden&rdquo; moet onderdeel worden van de eisen
voor behoorlijk gedrag voor websites. </p>

<p>Het stilletjes laden en uitvoeren van niet-vrije programma's is
&eacute;&eacute;n van de problemen die zich voordoen bij
&quot;web-applicaties&quot;. De term &quot;webapplicatie&quot; is bedacht om
het fundamentele verschil, tussen software die geleverd wordt aan de
gebruikers en software die uitgevoerd wordt op een server, te
verzwijgen. Het kan verwijzen naar een gespecialiseerd clientprogramma dat
wordt uitgevoerd in een browser; het kan verwijzen naar gespecialiseerde
serversoftware; het kan verwijzen naar een gespecialiseerd clientprogramma
dat hand in hand samenwerkt met gespecialiseerde serversoftware. De client-
en server-kant brengen verschillende ethische kwesties aan het licht, zelfs
als ze zo hecht samenwerken dat ze mogelijkerwijs gedeeltes van een enkel
programma zijn. Dit artikel spreekt slechts over de kwestie van de software
aan de client-kant. We benoemen de serverkwestie apart.</p>

<p>Hoe kunnen we, in praktisch opzicht, omgaan met het probleem van niet-vrije
JavaScript-programma's in webpagina's? De eerste stap is vermijden het uit
te voeren.</p>

<p>Wat bedoelen we met &quot;niet-triviaal&quot;? Hier is geen vaste grens
voor, dus gaat het om het ontwerpen van een simpele eis die goede resultaten
geeft, in plaats van het juiste antwoord te vinden.</p>
<p>
Ons voorlopige beleid is om een JavaScript-programma niet-triviaal te
beschouwen als:</p>

<ul>
  <li>het een AJAX-verzoek doet of samen wordt geladen met scripts die een
AJAX-verzoek doen,</li>

  <li>het externe scripts dynamisch laadt of tezamen wordt geladen met scripts die
dit doen,</li>

  <li>het functies of methoden definieert en een extern script laadt (uit html) of
als zo'n script wordt geladen,</li>
  
  <li>het dynamische JavaScript-constructies gebruikt die moeilijk te analyseren
zijn zonder het programma te interpreteren, of als het wordt geladen tezamen
met scripts die dergelijke constructies gebruiken. Deze constructies zijn:
    <ul>
      <li>het gebruikmaken van de eval-functie,</li>
      <li>methoden aanroepen met de rechte-haken-notatie,</li>
      <li>het gebruiken van enige andere constructie dan een tekstreeks met bepaalde
methoden (Obj.write, Obj.createElement, ...).</li>
    </ul>
  </li>
</ul>

<p>Hoe kunnen we uitvinden of JavaScript-code vrij is? In een <a
href="/licenses/javascript-labels.html">apart artikel</a> stellen we een
conventie voor waarmee niet-triviale JavaScript-programma's in een webpagina
de URL kunnen aangeven waar de broncode staat, alsmede zijn licentie, door
middel van gestilleerd commentaar.</p>

<p>Tenslotte moeten we vrije browsers wijzigen zodat zij niet-triviale,
niet-vrije JavaScript detecteren en blokkeren. Het programma <a
href="/software/librejs/">LibreJS</a> detecteert niet-vrije, niet-triviale
JavaScript in de pagina's die je bezoekt, en blokkeert deze. LibreJS wordt
meegeleverd met IceCat, en is beschikbaar als add-on voor Firefox.</p>

<p>Gebruikers van browsers hebben ook een gebruikersvriendelijke methode nodig
om JavaScript-code te gebruiken <em>in plaats van</em> de JavaScript in een
bepaalde pagina. (De gespecificeerde code kan een volledige vervanging zijn,
of een gewijzigde versie van het vrije JavaScript-programma in die pagina.)
Greasemonkey komt hier dicht in de buurt, maar niet helemaal, want het
garandeert niet dat de aangepaste JavaScript-code op de pagina wordt
gebruikt voordat het programma begint met uitvoeren. Het gebruiken van een
lokale proxy werkt, maar is momenteel te moeilijk om een echte oplossing te
zijn. We moeten een oplossing cre&euml;ren die betrouwbaar en gemakkelijk
is, alsmede websites om gewijzigde programma's te delen. Het GNU-project
raadt graag websites aan die toegewijd zijn aan vrije wijzigingen.</p>

<p>Deze functies zullen het mogelijk maken dat een JavaScript-programma dat
wordt meegeleverd met een webpagina in een praktisch opzicht vrij
is. JavaScript zal geen bijzonder obstakel zijn voor onze
vrijheid&mdash;niet meer dan C en Java nu zijn. We zullen in staat zijn om
de niet-vrije, niet-triviale JavaScript-programma's te verwerpen en zelfs te
vervangen, net zoals we niet-vrije programma's verwerpen en vervangen die
ons op de reguliere manier ter installatie aangeboden worden.</p>

<p>In de tussentijd is er &eacute;&eacute;n moment waarop het acceptabel is om
een niet-vrij JavaScript-programma uit te voeren: om een klacht naar de
websitebeheerders te sturen, waarin je aangeeft dat ze de JavaScript-code op
de website zouden moeten bevrijden of verwijderen. Aarzel niet om JavaScript
tijdelijk aan te zetten om dat te doen&mdash;maar vergeet niet om het na
afloop weer uit te zetten.</p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Websitebeheerders: er zijn <a
href="/software/librejs/free-your-javascript.html">diverse methoden</a> om
de licentie van JavaScript-programma's op een website aan te geven.</p>
</blockquote>

<p><strong>Dankbetuiging:</strong>Ik dank <a
href="/people/people.html#mattlee">Matt Lee</a> en <a
href="http://ejohn.org">John Resig</a> voor hun hulp bij het bepalen van de
voorgestelde criteria, en aan David Parunakian, die mij geholpen heeft me
bewust te maken van het probleem.</p>

<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.nl.html" -->
<div id="footer">
<div class="unprintable">

<p>Gelieve algemene vragen over FSF &amp; GNU te sturen naar <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Er zijn ook nog <a
href="/contact/">andere manieren om in contact te komen</a> met de
FSF. Foute links en andere correcties graag sturen aan <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</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 submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
We doen ons best om goede vertalingen te maken maar staan altijd open voor
verbeteringen. Suggesties, op- en aanmerkingen sturen aan: <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.</p>
<p>Zie <a href="/server/standards/README.translations.html"> Translations
README</a> voor informatie over het onderhoud van vertalingen op deze
website.</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, 2017 Richard Stallman</p>

<p>Deze pagina is uitgebracht onder een <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/">Creative Commons
Naamsvermelding-GeenAfgeleideWerken 4.0 Internationaal licentie</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<strong>Vertaling:</strong> <a
href="//savannah.gnu.org/projects/www-nl">www-nl</a></div>

<p class="unprintable"><!-- timestamp start -->
Bijgewerkt:

$Date: 2018/03/31 02:00:46 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>