taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

javascript-trap.html (17356B)


      1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->
      2 
      3 <!--#include virtual="/server/header.it.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>La trappola JavaScript - Progetto GNU - Free Software Foundation</title>
     11 
     12 <!--#include virtual="/philosophy/po/javascript-trap.translist" -->
     13 <!--#include virtual="/server/banner.it.html" -->
     14 <!--#include virtual="/philosophy/ph-breadcrumb.it.html" -->
     15 <!--GNUN: OUT-OF-DATE NOTICE-->
     16 <!--#include virtual="/server/top-addendum.it.html" -->
     17 <div class="article reduced-width">
     18 <h2>La trappola JavaScript</h2>
     19 
     20 <address class="byline">di <a href="https://www.stallman.org/">Richard Stallman</a></address>
     21 
     22 <p><strong>Forse ogni giorno eseguite software non libero senza rendervene
     23 conto, attraverso il vostro browser.</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>Per i webmaster: ci sono <a
     30 href="/software/librejs/free-your-javascript.html">molti modi</a> di
     31 indicare la licenza dei programmi JavaScript in un sito.</p>
     32 <hr class="no-display" />
     33 </div>
     34 
     35 <p>La comunità del software libero è ben consapevole dell'idea che <a
     36 href="/philosophy/free-software-even-more-important.html">i programmi non
     37 liberi maltrattano gli utenti</a>. Alcuni di noi difendono la propria
     38 libertà rifiutandosi categoricamente di installare software
     39 proprietario. Molti altri considerano che la mancanza di libertà costituisce
     40 un duro colpo al programma.</p>
     41 
     42 <p>Molti utenti sono a conoscenza del fatto che questo problema si applica ai
     43 plug-in che i browser offrono di installare, visto che possono essere sia
     44 liberi che non liberi. Ma i browser eseguono altri programmi non liberi per
     45 i quali non vi chiedono il permesso o vi avvisano: i programmi che le pagine
     46 web contengono o includono da altri siti. Questi programmi sono spesso
     47 scritti in JavaScript, anche se a volte sono scritti in altri linguaggi.</p>
     48 
     49 <p>JavaScript (ufficialmente ma raramente chiamato ECMAScript) un tempo veniva
     50 utilizzato per vari fronzoli non essenziali nelle pagine web, come effetti
     51 visuali e di navigazione. Era quindi accettabile considerarli come una mera
     52 estensione del linguaggio HTML più che come software vero e proprio, e così
     53 ignorare il problema.</p>
     54 
     55 <p>Alcuni siti continuano ad usare JavaScript in quella maniera, mentre molti
     56 lo usano per grandi programmi che svolgono operazioni complesse. Per esempio
     57 Google Docs prova a installare nel vostro browser un JavaScript che pesa
     58 mezzo megabyte, in una forma compattata che potremmo chiamare
     59 Obfuscript. Questa versione compattata è ottenuta dal codice sorgente,
     60 togliendo gli spazi aggiuntivi che rendono il codice leggibile, le note
     61 esplicative che lo rendono comprensibile, e sostituendo i nomi significativi
     62 con brevi nomi arbitrari in modo che non si riesca a capire cosa vogliono
     63 dire.</p>
     64 
     65 <p>Una parte del significato di <a href="/philosophy/free-sw.html">software
     66 libero</a> è che gli utenti devono poter aver accesso al codice sorgente del
     67 programma. Il sorgente di un programma è la forma preferita dai
     68 programmatori per modificare un programma: incluse spaziature tra i
     69 caratteri, commenti e uso di nomi significativi. Il codice compattato è un
     70 falso e inutile sostituto del codice sorgente: il vero sorgente di questi
     71 programmi non viene reso disponibile agli utenti, quindi gli utenti non
     72 possono capirlo; pertanto questi programmi non sono liberi.</p>
     73 
     74 <p>Oltre ad essere non liberi, molti di questi programmi sono <em>malware</em>
     75 perché <a
     76 href="https://github.com/w3c/fingerprinting-guidance/issues/8">spiano gli
     77 utenti</a>. Peggio ancora, alcuni siti usano servizi che registrano <a
     78 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">tutte
     79 le azioni dell'utente mentre visita la pagina</a>. Questi servizi in teoria
     80 “eliminano” i dati sensibili che il sito non dovrebbe raccogliere, ma anche
     81 se fosse vero il problema comunque rimarrebbe: questi servizi inviano al
     82 sito informazioni che non dovrebbe ricevere.</p>
     83 
     84 <p>I browser di solito non vi informano di aver caricato dei programmi
     85 JavaScript. Alcuni browser forniscono un'opzione per disabilitare JavaScript
     86 del tutto, ma anche se siete a conoscenza di questo problema, identificare e
     87 bloccare i programmi non banali e non liberi non è facile e persino nella
     88 comunità del software libero la maggior parte degli utenti non ne è a
     89 conoscenza, anche per via del silenzio dei browser.</p>
     90 
     91 <p>Dobbiamo chiarire un possibile equivoco: il linguaggio JavaScript non è
     92 intrinsecamente migliore o peggiore per la libertà degli utenti di qualsiasi
     93 altro linguaggio. È possibile rilasciare un programma JavaScript come
     94 software libero se si distribuisce il suo codice sorgente sotto una licenza
     95 libera. Se il programma è indipendente (nel senso che il suo funzionamento e
     96 scopo non dipendono dalla pagina che lo conteneva) va bene. Lo si può
     97 copiare su un file nel proprio computer, modificarlo ed eseguirlo in un
     98 browser. È anche possibile creare un pacchetto per installarlo, proprio come
     99 altri programmi liberi, e invocarlo da shell. I JavaScript non hanno un
    100 profilo morale diverso da quelle dei programmi C.</p>
    101 
    102 <p>Parliamo di Trappola JavaScript quando un programma JavaScript viene fornito
    103 in una pagina Web visitata dagli utenti. Questi programmi JavaScript sono
    104 scritti per funzionare solamente in una particolare pagina o sito, e la
    105 pagina o sito dipendono da loro per funzionare.</p>
    106 
    107 <p>Supponiamo di copiare e modificare il codice JavaScript della pagina. Allora
    108 sorge un altro problema: anche se il codice sorgente del programma è
    109 disponibile, i browser non offrono un modo per poter eseguire la versione
    110 modificata del programma al posto dell'originale quando viene visitata una
    111 pagina. L'effetto è comparabile alla tivoizzazione anche se, in linea di
    112 principio, meno difficile da superare.</p>
    113 
    114 <p>JavaScript non è l'unico linguaggio che i siti web usano per i programmi
    115 inviati agli utenti. Flash permetteva di programmare attraverso una variante
    116 estesa di JavaScript, ma ormai è una tecnologia che sta
    117 scomparendo. Silverlight è in procinto di porre un problema simile a Flash
    118 ma peggiore, visto che Microsoft lo usa come piattaforma per codec non
    119 liberi. Un sostituto libero per Silverlight non può funzionare per il mondo
    120 libero a meno che dei codec liberi non vengano inclusi con esso.</p>
    121 
    122 <p>Anche le applet Java vengono eseguite dal browser e pongono simili
    123 problematiche. In generale, ogni sistema di applet pone simili
    124 problemi. Avere un ambiente di esecuzione libero per un'applet ci porta solo
    125 a scontrarci con questo problema.</p>
    126 
    127 <p>Teoricamente è possibile programmare in HTML e CSS, ma in pratica questa
    128 possibilità è limitata e poco pratica; anche solo riuscire a realizzarci
    129 qualcosa richiede complessi smanettamenti. Questi programmi dovrebbero
    130 essere liberi, ma il CSS non è comunque un problema per la libertà degli
    131 utenti (nel 2019).</p>
    132 
    133 <p>C'è un movimento forte che chiede ai siti web di comunicare solo tramite
    134 formati e protocolli liberi (alcuni dicono “aperti”), ovvero la cui
    135 documentazione viene pubblicata e ognuno può liberamente
    136 implementare. Tuttavia la presenza di programmi JavaScript nelle pagine Web
    137 rende insufficiente questo criterio. Lo stesso linguaggio JavaScript, come
    138 formato, è libero, e l'uso di JavaScript in un sito web non è
    139 necessariamente negativo. Ma come abbiamo già visto, può essere negativo se
    140 il programma non è libero. Quando il sito trasmette il programma all'utente,
    141 non basta che il linguaggio in cui questo è scritto sia documentato e
    142 libero, anche il programma deve essere documentato e libero. “Trasmettere
    143 all'utente solo programmi liberi” deve diventare uno dei criteri di un sito
    144 web etico.</p>
    145 
    146 <p>Caricare ed eseguire programmi non liberi silenziosamente è uno degli
    147 svariati problemi posti dalle “applicazioni web”. Il termine “applicazioni
    148 web” è stato concepito per ignorare la distinzione fondamentale tra software
    149 trasmesso all'utente e software in esecuzione su un server. Può fare
    150 riferimento ad un programma client specializzato che si esegue nel browser;
    151 può fare riferimento a software specializzato del server; può fare
    152 riferimento ad un programma client specializzato che lavora a stretto
    153 contatto con un programma server specializzato. I lati client e server
    154 sollevano questioni etiche differenti, anche quando siano così strettamente
    155 integrati da poter sostenere che facciano parte di un singolo
    156 programma. Questo articolo fa riferimento solamente a ciò che riguarda il
    157 software lato client. Ci occupiamo del lato server separatamente.</p>
    158 
    159 <p>In termini pratici, come possiamo affrontare il problema del software
    160 JavaScript non libero e non banale nei siti web? Il primo passo è evitare di
    161 eseguirlo.</p>
    162 
    163 <p>Che cosa vuol dire “non banale”? Dipende da caso a caso ed è quindi
    164 preferibile definire un criterio semplice che offre buoni risultati
    165 piuttosto che cercare una risposta esatta.</p>
    166 <p>
    167 Attualmente il nostro criterio è considerare che un programma scritto in
    168 JavaScript non è banale se soddisfa una delle seguenti condizioni:</p>
    169 
    170 <ul>
    171   <li>è caricato come script esterno (da un'altra pagina).</li>
    172 
    173   <li>dichiara un array con più di 50 elementi.</li>
    174 
    175   <li>definisce un'entità (funzione o metodo) che chiama qualcosa di diverso da
    176 una primitiva.</li>
    177 
    178   <li>definisce un'entità utilizzando più di tre costrutti condizionali e cicli.</li>
    179 
    180   <li>il codice che si trova all'esterno di metodi e funzioni chiama qualsiasi
    181 cosa tranne le primitive e le funzioni definite nelle righe precedenti.</li>
    182 
    183   <li>il codice che si trova all'esterno di metodi e funzioni contiene più di tre
    184 cicli o costrutti condizionali, sommati.</li>
    185 
    186   <li>utilizza la funzione <b>eval</b>.</li>
    187 
    188   <li>effettua chiamate Ajax.</li>
    189 
    190   <li>utilizza la notazione a parentesi quadre per accedere alle proprietà di un
    191 oggetto dinamico, in questo modo <b><em>object</em>[<em>property</em>]</b>.</li>
    192 
    193   <li>modifica il DOM.</li>
    194   
    195   <li>usa costrutti dinamici di JavaScript che sono difficili da analizzare senza
    196 interpretare il programma, oppure viene caricato assieme ad altri script che
    197 usano tali costrutti. Nello specifico, riguarda l'utilizzo di qualsiasi
    198 elemento di costruzione diverso da una stringa di caratteri costante con
    199 certi metodi (<b>Obj.write</b>, <b>Obj.createElement</b> e altri).</li>
    200 </ul>
    201 
    202 <p>Come facciamo a determinare se il codice JavaScript è libero? In un <a
    203 href="/licenses/javascript-labels.html">ulteriore articolo</a> proponiamo un
    204 metodo con cui un programma JavaScript non banale in una pagina web può
    205 comunicare l'indirizzo web del suo codice sorgente e la sua licenza tramite
    206 commenti formattati.</p>
    207 
    208 <p>Infine, è necessario modificare i browser liberi per rilevare e bloccare
    209 JavaScript non libero e non banale nelle pagine web. Il programma <a
    210 href="/software/librejs/">LibreJS</a> rileva JavaScript non libero e non
    211 banale nelle pagine visitate e lo blocca. LibreJS è parte di IceCat ed è
    212 disponibile come estensione per Firefox.</p>
    213 
    214 <p>Gli utenti dei browser hanno anche bisogno di un modo facile per
    215 <em>sostituire</em> il codice JavaScript di una pagina con il proprio. Il
    216 codice specificato può essere una modifica parziale o totale del programma
    217 JavaScript libero trovato nella pagina. Greasemonkey si avvicina ad essere
    218 adatto a questo scopo ma non lo è del tutto, visto che non garantisce che il
    219 codice venga modificato prima dell'esecuzione del programma. Usare un proxy
    220 locale funziona, ma è troppo scomodo per poter essere una soluzione
    221 pratica. Abbiamo bisogno di creare sia una soluzione affidabile e facile da
    222 usare che dei siti per poter condividere le modifiche. Il progetto GNU
    223 vorrebbe consigliare dei siti che siano dedicati esclusivamente alle
    224 modifiche libere.</p>
    225 
    226 <p>Queste funzionalità permetteranno di includere programmi JavaScript liberi
    227 all'interno di una pagina web in maniera pratica. JavaScript cesserà di
    228 essere un ostacolo per la libertà più di quanto lo siano oggigiorno C e
    229 Java. Saremo capaci di respingere ed addirittura sostituire i programmi
    230 JavaScript non banali e non liberi proprio come facciamo con i programmi che
    231 vengono convenzionalmente installati. La nostra campagna per spingere i siti
    232 a liberare il proprio JavaScript può avere inizio.</p>
    233 
    234 <p>Comunque c'è un caso in cui è accettabile eseguire del JavaScript non
    235 libero: per inviare una lamentela agli operatori del sito, chiedendo loro di
    236 liberare o altrimenti rimuovere il codice JavaScript dal sito. Vi prego di
    237 non esitare ad abilitare JavaScript temporaneamente per questo scopo – non
    238 dimenticate di disattivarlo una volta finito.</p>
    239 
    240 <!-- any links that used to point to the appendices should point to
    241      free-your-javascript.html instead.  -->
    242 <div class="announcement">
    243 <hr class="no-display" />
    244 <p>Per i webmaster: ci sono <a
    245 href="/software/librejs/free-your-javascript.html">molti modi</a> di
    246 indicare la licenza dei programmi JavaScript in un sito.</p>
    247 <hr class="no-display" />
    248 </div>
    249 
    250 <p><strong>Grazie a:</strong> <a href="/people/people.html#mattlee">Matt
    251 Lee</a> e <a href="https://johnresig.com/">John Resig</a> per il loro aiuto
    252 nel definire il criterio da noi proposto ed a David Parunakian per avermi
    253 messo a conoscenza del problema.</p>
    254 </div>
    255 
    256 <div class="translators-notes">
    257 
    258 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    259  </div>
    260 </div>
    261 
    262 <!-- for id="content", starts in the include above -->
    263 <!--#include virtual="/server/footer.it.html" -->
    264 <div id="footer" role="contentinfo">
    265 <div class="unprintable">
    266 
    267 <p>Per informazioni su FSF e GNU rivolgetevi, possibilmente in inglese, a <a
    268 href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Ci sono anche <a
    269 href="/contact/">altri modi di contattare</a> la FSF. Inviate segnalazioni
    270 di link non funzionanti e altri suggerimenti relativi alle pagine web a <a
    271 href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
    272 
    273 <p>
    274 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    275         replace it with the translation of these two:
    276 
    277         We work hard and do our best to provide accurate, good quality
    278         translations.  However, we are not exempt from imperfection.
    279         Please send your comments and general suggestions in this regard
    280         to <a href="mailto:web-translators@gnu.org">
    281 
    282         &lt;web-translators@gnu.org&gt;</a>.</p>
    283 
    284         <p>For information on coordinating and contributing translations of
    285         our web pages, see <a
    286         href="/server/standards/README.translations.html">Translations
    287         README</a>. -->
    288 Le traduzioni italiane sono effettuate ponendo la massima attenzione ai
    289 dettagli e alla qualità, ma a volte potrebbero contenere imperfezioni. Se ne
    290 riscontrate, inviate i vostri commenti e suggerimenti riguardo le traduzioni
    291 a <a
    292 href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>
    293 oppure contattate direttamente il <a
    294 href="http://savannah.gnu.org/projects/www-it/">gruppo dei traduttori
    295 italiani</a>.<br/>Per informazioni su come gestire e inviare traduzioni
    296 delle nostre pagine web consultate la <a
    297 href="/server/standards/README.translations.html">Guida alle traduzioni</a>.</p>
    298 </div>
    299 
    300 <!-- Regarding copyright, in general, standalone pages (as opposed to
    301      files generated as part of manuals) on the GNU web server should
    302      be under CC BY-ND 4.0.  Please do NOT change or remove this
    303      without talking with the webmasters or licensing team first.
    304      Please make sure the copyright date is consistent with the
    305      document.  For web pages, it is ok to list just the latest year the
    306      document was modified, or published.
    307      
    308      If you wish to list earlier years, that is ok too.
    309      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    310      years, as long as each year in the range is in fact a copyrightable
    311      year, i.e., a year in which the document was published (including
    312      being publicly visible on the web or in a revision control system).
    313      
    314      There is more detail about copyright years in the GNU Maintainers
    315      Information document, www.gnu.org/prep/maintain. -->
    316 <p>Copyright &copy; 2009-2013, 2016-2019, 2021 Richard Stallman</p>
    317 
    318 <p>Questa pagina è distribuita secondo i termini della licenza <a rel="license"
    319 href="http://creativecommons.org/licenses/by-nd/4.0/deed.it">Creative
    320 Commons Attribuzione - Non opere derivate 4.0 Internazionale</a> (CC BY-ND
    321 4.0).</p>
    322 
    323 <!--#include virtual="/server/bottom-notes.it.html" -->
    324 <div class="translators-credits">
    325 
    326 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    327 Tradotto da membri del gruppo dei traduttori italiani GNU. Revisioni di
    328 Andrea Pescetti, Sebastiano Pistore, Dora Scilipoti.</div>
    329 
    330 <p class="unprintable"><!-- timestamp start -->
    331 Ultimo aggiornamento:
    332 
    333 $Date: 2021/11/28 14:01:00 $
    334 
    335 <!-- timestamp end -->
    336 </p>
    337 </div>
    338 </div>
    339 <!-- for class="inner", starts in the banner include -->
    340 </body>
    341 </html>