summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/ru/javascript-trap.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/ru/javascript-trap.html')
-rw-r--r--talermerchantdemos/blog/articles/ru/javascript-trap.html338
1 files changed, 338 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/ru/javascript-trap.html b/talermerchantdemos/blog/articles/ru/javascript-trap.html
new file mode 100644
index 0000000..a7d6770
--- /dev/null
+++ b/talermerchantdemos/blog/articles/ru/javascript-trap.html
@@ -0,0 +1,338 @@
+<!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->
+
+<!--#include virtual="/server/header.ru.html" -->
+<!-- Parent-Version: 1.90 -->
+
+<!-- This file is automatically generated by GNUnited Nations! -->
+<title>Западня JavaScript</title>
+
+<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
+<!--#include virtual="/server/banner.ru.html" -->
+<h2>Западня JavaScript</h2>
+
+<p><a href="http://www.stallman.org/">Ричард Столмен</a></p>
+
+<p><strong>Не исключено, что вы запускаете несвободные программы на своем
+компьютере каждый день, даже не осознавая этого&nbsp;&mdash;
+из вашего браузера.</strong></p>
+
+<!-- any links that used to point to the appendices should point to
+ free-your-javascript.html instead. -->
+<blockquote>
+<p>Вебмастеры: есть <a
+href="/software/librejs/free-your-javascript.html">несколько способов
+указать лицензию программ на JavaScript</a> на сайте.</p>
+</blockquote>
+
+<p>Сообщество свободного программного обеспечения хорошо знакомо с идеей, что
+<a href="/philosophy/free-software-even-more-important.html">любая
+несвободная программа несправедлива по отношению к
+пользователям</a>. Некоторые из нас защищают нашу свободу, отвергая всякие
+несвободные программы на наших компьютерах. Многие другие считают
+несвободность программы серьезным недостатком.</p>
+
+<p>Многим пользователям известно, что этот вопрос касается модулей, которые
+браузеры предлагают установить, поскольку они могут быть свободными или
+несвободными. Но существуют другие несвободные программы, которые браузеры
+выполняют, не спрашивая вас и даже не говоря вам об этом&nbsp;&mdash; это
+программы, на которые ссылаются или которые содержат страницы сайта. Эти
+программы чаще всего написаны на языке JavaScript, хотя используются и
+другие языки.</p>
+
+<p>JavaScript (официально называемый &ldquo;ECMAScript&rdquo;, но мало кто
+употребляет это название) когда-то применяли для мелких излишеств на
+страницах Интернета, таких как занятные, но несущественные детали
+отображения и навигации. Было допустимо рассматривать их просто как
+дополнения к разметке HTML, а не как настоящие программы, и не задаваться
+этим вопросом.</p>
+
+<p>Некоторые сайты до сих пор используют JavaScript таким же образом, но многие
+применяют его для крупных программ, которые решают серьезные
+задачи. Например, &ldquo;Google Docs&rdquo; пытается установить в вашем
+браузере программу на JavaScript, занимающую полмегабайта, в сжатом виде,
+который мы называем &ldquo;Obfuscript&rdquo; (запутанный сценарий). Это
+программа в сжатом виде, полученная из исходного текста удалением избыточных
+пробелов, без которых программу невозможно читать, а также пояснительных
+замечаний, которые позволяют понять программу, и заменой всех значащих
+идентификаторов в программе на произвольные краткие идентификаторы, так что
+невозможно понять, что это должно означать.</p>
+
+<p>Часть <a href="/philosophy/free-sw.html">представления о свободных
+программах</a> заключается в том, что у пользователей есть доступ к
+исходному тексту программы (ее плану). Исходный текст программы&nbsp;&mdash;
+это форма, предпочтительная для внесения программистами
+изменений&nbsp;&mdash; она содержит полезное форматирование, пояснительные
+заметки, а также осмысленные идентификаторы. Сжатая программа в качестве
+исходного текста никуда не годится; настоящий исходный текст этих программ
+пользователям не доступен, так что пользователи не могут разбираться в них;
+таким образом, программы несвободны.</p>
+
+<p>Кроме того, что они несвободны, многие из этих программ <em>вредоносны</em>,
+потому что они <a
+href="http://github.com/w3c/fingerprinting-guidance/issues/8">шпионят за
+пользователем</a>. Что еще более гадко, некоторые сайты пользуются
+службами, которые <a
+href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">записывают
+все действия пользователя при просмотре страницы</a>. Предположительно
+службы &ldquo;урезают&rdquo; записи, чтобы исключить какие-то
+конфиденциальные данные, которые сайт получать не должен. Но даже если это
+работает надежно, само назначение этих служб состоит в том, чтобы дать сайту
+персональные данные, которых он получать не должен.</p>
+
+<p>Браузеры обычно не сообщают вам о том, что они загружают программы на
+JavaScript. В некоторых браузерах есть способ полностью выключить
+JavaScript, но даже если вы знакомы с этой проблемой, вам было бы достаточно
+трудно распознать содержательные несвободные программы и заблокировать
+их. Однако даже в сообществе свободного программного обеспечения большинство
+пользователей не знает об этой проблеме; молчание браузеров не выставляет ее
+напоказ.</p>
+
+<p>Есть возможность сделать программу на JavaScript свободной, распространяя
+исходный текст по лицензии свободных программ. Если программа
+самостоятельна&nbsp;&mdash; если ее работа и назначение не зависят от
+страницы, на которой она используется&nbsp;&mdash; прекрасно; вы можете
+сохранить ее на своей машине, изменить ее и открыть в браузере, чтобы
+работать с ней. Но так обычно не делают.</p>
+
+<p>Обычно программы на JavaScript предназначены для работы с конкретной
+страницей или конкретным сайтом, а работа страницы зависит от этих
+программ. Тогда встает другая проблема: даже если исходный текст программы
+доступен, браузеры не предлагают способа работать с измененной вами версией
+вместо исходной, когда вы посещаете этот сайт. Этот эффект сравним с
+тивоизацией, хотя его в принципе не так трудно преодолеть.</p>
+
+<p>JavaScript&nbsp;&mdash; не единственный язык, на котором написаны программы,
+передаваемые с сайтов пользователю. Flash поддерживает программирование с
+помощью расширенного варианта языка JavaScript; если у нас будет хотя бы
+достаточно полный свободный проигрыватель Flash, нам будет необходимо решать
+проблему несвободных программ на Flash. Silverlight, кажется, создает
+проблемы, сходные с Flash, только еще хуже, поскольку Microsoft применяет
+его как базу для несвободных кодеков. Свободная замена Silverlight не решит
+проблему для свободного мира, если вместе с ней не будут поставляться
+свободные замены кодеков.</p>
+
+<p>Апплеты на языке Java тоже выполняются в браузере и приводят к
+похожим проблемам. Вообще говоря, любая система апплетов
+приводит к проблемам этого рода. Наличие свободной среды
+для выполнения апплетов приводит нас только к
+постановке этого вопроса.</p>
+
+<p>Теоретически возможно программировать на HTML и CSS, но на практике эти
+возможности ограничены, это неудобно; для каждой малости требуется
+незаурядное мастерство. Такие программы должны быть свободны, но
+на&nbsp;2019&nbsp;год CSS не представляет серьезной проблемы для
+пользователей.</p>
+
+<p>Возникло мощное движение, которое призывает применять на сайтах только
+форматы и протоколы, которые свободны (некоторые говорят
+&ldquo;открыты&rdquo;); другими словами, те, документация на которые
+опубликована и которые каждый волен реализовать. Однако наличие программ на
+JavaScript на страницах сайтов делает это условие недостаточным. Сам по себе
+JavaScript свободен как формат, и когда его применяют на сайте, это не
+обязательно плохо. Однако, как мы видели выше, это может быть
+нехорошо&nbsp;&mdash; если программа на JavaScript несвободна. Когда сайт
+передает программу пользователю, недостаточно, чтобы программа была написана
+на документированном и не вызывающем затруднений языке&nbsp;&mdash; эта
+программа тоже должна быть свободна. Условие &ldquo;пользователю передаются
+только свободные программы&rdquo; должно стать частью критерия этичного
+поведения сайтов.</p>
+
+<p>Молчаливая загрузка и выполнение несвободных программ&nbsp;&mdash; один из
+нескольких вопросов, поднимаемых &ldquo;веб-приложениями&rdquo;. Термин
+&ldquo;веб-приложение&rdquo; был создан, чтобы стереть принципиальное
+различие между программами, которые передают пользователям, и программами,
+которые работают на сервере. Он может обозначать особую клиентскую
+программу, которую выполняет браузер; он может обозначать особую серверную
+программу; он может обозначать особую клиентскую программу, которая работает
+рука об руку с особой серверной программой. Клиентская и серверная стороны
+затрагивают разные этические вопросы, даже если они так тесно связаны, что
+можно утверждать, что они представляют собой части одной программы. Эта
+статья рассматривает только вопрос программ на клиентской стороне. Вопрос
+серверной стороны мы рассматриваем отдельно.</p>
+
+<p>Как на практике мы можем решать проблему нетривиальных несвободных программ
+на языке JavaScript на сайтах? Первый шаг&nbsp;&mdash; избегать выполнения
+их.</p>
+
+<p>Что мы подразумеваем под &ldquo;нетривиальным&rdquo;? Это понятие
+растяжимое, так что это вопрос создания простого критерия, дающего хорошие
+результаты, а не поиска единственно верного ответа.</p>
+<p>
+В настоящее время мы пользуемся правилом, согласно которому программа на
+JavaScript нетривиальна, если выполняется любое из условий:</p>
+
+<ul>
+ <li>на нее ссылаются как на внешний сценарий (с другой страницы);</li>
+
+ <li>в ней объявляется массив длиной более 50 элементов;</li>
+
+ <li>в ней определяется именованный объект (функция или метод), который вызывает
+что-либо кроме примитива;</li>
+
+ <li>в ней определяется именованный объект с более чем тремя условными
+конструкциями или циклами;</li>
+
+ <li>программы вне именованных определений вызывают что-либо кроме примитивов и
+функций, определенных далее на этой странице;</li>
+
+ <li>программы вне именованных определений содержат более чем три условных
+конструкции и цикла (всего);</li>
+
+ <li>в ней вызывается <b>eval</b>;</li>
+
+ <li>в ней делаются вызовы Ajax;</li>
+
+ <li>в ней применяется нотация квадратных скобок для доступа к свойствам
+динамического объекта, что выглядит как
+<b><em>объект</em>[<em>свойство</em>]</b>.</li>
+
+ <li>в ней изменяется DOM;</li>
+
+ <li>она применяет динамические конструкции, которые трудно анализировать без
+интерпретации программы или загружается с программами, которые применяют
+такие конструкции. А именно, применение любых конструкций, кроме литерала
+строки с определенными методами (<b>Obj.write</b>, <b>Obj.createElement</b>
+и другие).</li>
+</ul>
+
+<p>Как мы узнаем, свободны ли программы на JavaScript? <a
+href="/licenses/javascript-labels.html">В отдельной статье мы предлагаем
+метод</a>, которым нетривиальная программа на языке JavaScript на странице
+сайта может указать адрес, по которому находится ее исходный текст, а также
+может указать и лицензию с помощью стилизованных комментариев.</p>
+
+<p>Наконец, нам нужно изменить свободные браузеры так, чтобы они обнаруживали и
+блокировали несвободные нетривиальные программы на языке JavaScript на
+страницах сайтов. Программа <a href="/software/librejs/">LibreJS</a>
+обнаруживает несвободные нетривиальные программы на JavaScript на страницах,
+которые вы посещаете, и блокирует их. LibreJS входит в состав IceCat и
+доступен в качестве дополнения для Firefox.</p>
+
+<p>Пользователям браузера нужен также удобный механизм для указания
+программ, которые нужно использовать <em>вместо</em> программ
+на определенной странице. (Указанные программы могут быть
+полной заменой или только измененной версией свободных программ
+с той страницы.) Greasemonkey приближается к этому,
+но не совсем, потому что не гарантирует, что
+программа со страницы будет изменена перед тем, как эта программа
+начинает выполняться. Можно использовать локальный прокси-сервер,
+но это слишком непрактично для реального решения.
+Нам нужно построить решение, которое будет
+надежным и удобным, так же как и сайты для обмена модификациями.
+Проект GNU хотел бы рекомендовать сайты, выделенные только для
+свободных изменений.</p>
+
+<p>Эти особенности будут позволять программе на JavaScript
+со страницы сайта быть по-настоящему свободной в практическом смысле.
+JavaScript больше не будет особенным препятствием на пути к нашей
+свободе&nbsp;&mdash; не более, чем C и Java сейчас.
+Мы сможем отвергать и даже заменять несвободные нетривиальные
+программы на языке JavaScript точно так же, как мы отвергаем
+и заменяем несвободные пакеты, предлагаемые для установки
+обычным образом. Тогда мы сможем начать кампанию по освобождению
+JavaScript на сайтах.</p>
+
+<p>А пока выполнять несвободную программу на JavaScript допустимо в одном
+случае: если это нужно, чтобы послать жалобу операторам сайта и сообщить им,
+что им следует освободить или удалить программы на JavaScript с этого
+сайта. Пожалуйста, смело включайте временно JavaScript, чтобы сделать
+это&nbsp;&mdash; но не забудьте выключить его после этого.</p>
+
+<!-- any links that used to point to the appendices should point to
+ free-your-javascript.html instead. -->
+<blockquote>
+<p>Вебмастеры: есть <a
+href="/software/librejs/free-your-javascript.html">несколько способов
+указать лицензию программ на JavaScript</a> на сайте.</p>
+</blockquote>
+
+<p><strong>Благодарности:</strong> Я благодарю <a
+href="/people/people.html#mattlee">Мэтта Ли</a> и <a
+href="http://ejohn.org">Джона Резига</a> за их помощь в определении
+предлагаемого нами критерия, и Давида Парунакяна за то, что он обратил мое
+внимание на эту проблему.</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.ru.html" -->
+<div id="footer">
+<div class="unprintable">
+
+<p>Пожалуйста, присылайте общие запросы фонду и GNU по адресу <a
+href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Есть также <a
+href="/contact/">другие способы связаться</a> с фондом. Отчеты о
+неработающих ссылках и другие поправки или предложения можно присылать по
+адресу <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>. -->
+Мы старались сделать этот перевод точным и качественным, но исключить
+возможность ошибки мы не можем. Присылайте, пожалуйста, свои замечания и
+предложения по переводу по адресу <a
+href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
+</p><p>Сведения по координации и предложениям переводов наших статей см. в
+<a href="/server/standards/README.translations.html">&ldquo;Руководстве по
+переводам&rdquo;</a>.</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, 2018, 2019 Richard
+Stallman</p><p>Copyright &copy; 2009, 2010, 2011, 2012, 2016, 2017, 2018,
+2019 Free Software Foundation, Inc. (translation)</p>
+
+<p>Это произведение доступно по <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/4.0/deed.ru">лицензии
+Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; Без
+производных произведений</em>) 4.0 Всемирная</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.ru.html" -->
+<div class="translators-credits">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
+ </div>
+
+<p class="unprintable"><!-- timestamp start -->
+Обновлено:
+
+$Date: 2019/12/30 12:08:30 $
+
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+<!-- for class="inner", starts in the banner include -->
+</body>
+</html>