diff options
Diffstat (limited to 'talermerchantdemos/blog/articles/ru/javascript-trap.html')
-rw-r--r-- | talermerchantdemos/blog/articles/ru/javascript-trap.html | 338 |
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>Не исключено, что вы запускаете несвободные программы на своем +компьютере каждый день, даже не осознавая этого — +из вашего браузера.</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>Многим пользователям известно, что этот вопрос касается модулей, которые +браузеры предлагают установить, поскольку они могут быть свободными или +несвободными. Но существуют другие несвободные программы, которые браузеры +выполняют, не спрашивая вас и даже не говоря вам об этом — это +программы, на которые ссылаются или которые содержат страницы сайта. Эти +программы чаще всего написаны на языке JavaScript, хотя используются и +другие языки.</p> + +<p>JavaScript (официально называемый “ECMAScript”, но мало кто +употребляет это название) когда-то применяли для мелких излишеств на +страницах Интернета, таких как занятные, но несущественные детали +отображения и навигации. Было допустимо рассматривать их просто как +дополнения к разметке HTML, а не как настоящие программы, и не задаваться +этим вопросом.</p> + +<p>Некоторые сайты до сих пор используют JavaScript таким же образом, но многие +применяют его для крупных программ, которые решают серьезные +задачи. Например, “Google Docs” пытается установить в вашем +браузере программу на JavaScript, занимающую полмегабайта, в сжатом виде, +который мы называем “Obfuscript” (запутанный сценарий). Это +программа в сжатом виде, полученная из исходного текста удалением избыточных +пробелов, без которых программу невозможно читать, а также пояснительных +замечаний, которые позволяют понять программу, и заменой всех значащих +идентификаторов в программе на произвольные краткие идентификаторы, так что +невозможно понять, что это должно означать.</p> + +<p>Часть <a href="/philosophy/free-sw.html">представления о свободных +программах</a> заключается в том, что у пользователей есть доступ к +исходному тексту программы (ее плану). Исходный текст программы — +это форма, предпочтительная для внесения программистами +изменений — она содержит полезное форматирование, пояснительные +заметки, а также осмысленные идентификаторы. Сжатая программа в качестве +исходного текста никуда не годится; настоящий исходный текст этих программ +пользователям не доступен, так что пользователи не могут разбираться в них; +таким образом, программы несвободны.</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>. Предположительно +службы “урезают” записи, чтобы исключить какие-то +конфиденциальные данные, которые сайт получать не должен. Но даже если это +работает надежно, само назначение этих служб состоит в том, чтобы дать сайту +персональные данные, которых он получать не должен.</p> + +<p>Браузеры обычно не сообщают вам о том, что они загружают программы на +JavaScript. В некоторых браузерах есть способ полностью выключить +JavaScript, но даже если вы знакомы с этой проблемой, вам было бы достаточно +трудно распознать содержательные несвободные программы и заблокировать +их. Однако даже в сообществе свободного программного обеспечения большинство +пользователей не знает об этой проблеме; молчание браузеров не выставляет ее +напоказ.</p> + +<p>Есть возможность сделать программу на JavaScript свободной, распространяя +исходный текст по лицензии свободных программ. Если программа +самостоятельна — если ее работа и назначение не зависят от +страницы, на которой она используется — прекрасно; вы можете +сохранить ее на своей машине, изменить ее и открыть в браузере, чтобы +работать с ней. Но так обычно не делают.</p> + +<p>Обычно программы на JavaScript предназначены для работы с конкретной +страницей или конкретным сайтом, а работа страницы зависит от этих +программ. Тогда встает другая проблема: даже если исходный текст программы +доступен, браузеры не предлагают способа работать с измененной вами версией +вместо исходной, когда вы посещаете этот сайт. Этот эффект сравним с +тивоизацией, хотя его в принципе не так трудно преодолеть.</p> + +<p>JavaScript — не единственный язык, на котором написаны программы, +передаваемые с сайтов пользователю. Flash поддерживает программирование с +помощью расширенного варианта языка JavaScript; если у нас будет хотя бы +достаточно полный свободный проигрыватель Flash, нам будет необходимо решать +проблему несвободных программ на Flash. Silverlight, кажется, создает +проблемы, сходные с Flash, только еще хуже, поскольку Microsoft применяет +его как базу для несвободных кодеков. Свободная замена Silverlight не решит +проблему для свободного мира, если вместе с ней не будут поставляться +свободные замены кодеков.</p> + +<p>Апплеты на языке Java тоже выполняются в браузере и приводят к +похожим проблемам. Вообще говоря, любая система апплетов +приводит к проблемам этого рода. Наличие свободной среды +для выполнения апплетов приводит нас только к +постановке этого вопроса.</p> + +<p>Теоретически возможно программировать на HTML и CSS, но на практике эти +возможности ограничены, это неудобно; для каждой малости требуется +незаурядное мастерство. Такие программы должны быть свободны, но +на 2019 год CSS не представляет серьезной проблемы для +пользователей.</p> + +<p>Возникло мощное движение, которое призывает применять на сайтах только +форматы и протоколы, которые свободны (некоторые говорят +“открыты”); другими словами, те, документация на которые +опубликована и которые каждый волен реализовать. Однако наличие программ на +JavaScript на страницах сайтов делает это условие недостаточным. Сам по себе +JavaScript свободен как формат, и когда его применяют на сайте, это не +обязательно плохо. Однако, как мы видели выше, это может быть +нехорошо — если программа на JavaScript несвободна. Когда сайт +передает программу пользователю, недостаточно, чтобы программа была написана +на документированном и не вызывающем затруднений языке — эта +программа тоже должна быть свободна. Условие “пользователю передаются +только свободные программы” должно стать частью критерия этичного +поведения сайтов.</p> + +<p>Молчаливая загрузка и выполнение несвободных программ — один из +нескольких вопросов, поднимаемых “веб-приложениями”. Термин +“веб-приложение” был создан, чтобы стереть принципиальное +различие между программами, которые передают пользователям, и программами, +которые работают на сервере. Он может обозначать особую клиентскую +программу, которую выполняет браузер; он может обозначать особую серверную +программу; он может обозначать особую клиентскую программу, которая работает +рука об руку с особой серверной программой. Клиентская и серверная стороны +затрагивают разные этические вопросы, даже если они так тесно связаны, что +можно утверждать, что они представляют собой части одной программы. Эта +статья рассматривает только вопрос программ на клиентской стороне. Вопрос +серверной стороны мы рассматриваем отдельно.</p> + +<p>Как на практике мы можем решать проблему нетривиальных несвободных программ +на языке JavaScript на сайтах? Первый шаг — избегать выполнения +их.</p> + +<p>Что мы подразумеваем под “нетривиальным”? Это понятие +растяжимое, так что это вопрос создания простого критерия, дающего хорошие +результаты, а не поиска единственно верного ответа.</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 больше не будет особенным препятствием на пути к нашей +свободе — не более, чем C и Java сейчас. +Мы сможем отвергать и даже заменять несвободные нетривиальные +программы на языке JavaScript точно так же, как мы отвергаем +и заменяем несвободные пакеты, предлагаемые для установки +обычным образом. Тогда мы сможем начать кампанию по освобождению +JavaScript на сайтах.</p> + +<p>А пока выполнять несвободную программу на JavaScript допустимо в одном +случае: если это нужно, чтобы послать жалобу операторам сайта и сообщить им, +что им следует освободить или удалить программы на JavaScript с этого +сайта. Пожалуйста, смело включайте временно JavaScript, чтобы сделать +это — но не забудьте выключить его после этого.</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"><gnu@gnu.org></a>. Есть также <a +href="/contact/">другие способы связаться</a> с фондом. Отчеты о +неработающих ссылках и другие поправки или предложения можно присылать по +адресу <a href="mailto:webmasters@gnu.org"><webmasters@gnu.org></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"> + + <web-translators@gnu.org></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"><web-translators@gnu.org></a>. +</p><p>Сведения по координации и предложениям переводов наших статей см. в +<a href="/server/standards/README.translations.html">“Руководстве по +переводам”</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 © 2009-2013, 2016, 2017, 2018, 2019 Richard +Stallman</p><p>Copyright © 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>Атрибуция — Без +производных произведений</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> |