В социальных сетях появилась недавняя статья InfoQ с заголовком По оценкам недавнего исследования, 50% веб-сайтов, использующих WebAssembly, применяют его в злонамеренных целях. Статья основана на исследовании, опубликованном в июне этого года под названием Новичок в Интернете: исследование распространенности WebAssembly в дикой природе, которое оставалось относительно незамеченным, пока я не поделился им в конце октября в нескольких социальных сетях.

В статье исследуется распространенность и применение WebAssembly на сайтах, входящих в список Alexa Top 1 000 000. В статье InfoQ приводится достойное резюме, за исключением сенсационного названия, не совсем соответствующего исследованию, что вместо общего исследования использования WebAssembly в Интернете был представлен как исследование безопасности, что, к сожалению, по причинам, которые я собираюсь обсудить.

В исследовании обнаруженные модули классифицируются как принадлежащие к одной из нескольких категорий, две из которых, майнинг и обфускация, дополнительно помечены как «вредоносные». Сама по себе обфускация, безусловно, не является злонамеренной, если только мы не считаем вредоносным все проприетарное программное обеспечение, распространяемое только в скомпилированном виде. Что касается майнинга, я считаю, что есть основания для получения дохода за счет использования аппаратных ресурсов посетителя, а не рекламы, но даже без этого соображения это в худшем случае неэтично, так же, как и реклама. , особенно отвлекающая, вводящая в заблуждение или ресурсоемкая реклама, неэтична.

Однако все реакции, которые я видел, были связаны не столько с фактическими вариантами использования, которые обсуждались выше, сколько с самой технологией, предлагающей такие решения, как запуск модулей WebAssembly только после явного согласия пользователя или прямая блокировка WebAssembly в расширениях фильтрации контента, которые более больше всего свидетельствует о непонимании технологии.

WebAssembly — это не нативный код, это байт-код, работающий на виртуальной машине, аналогичный байт-коду Java, за исключением того, что его набор инструкций максимально приближен к наборам инструкций современных процессоров. Кроме того, в отличие от JVM, WebAssembly не имеет доступа к своей среде, кроме как через явно импортированные и экспортированные объекты. Кроме того, на момент написания этой статьи модули WebAssembly можно создавать только с помощью JavaScript. Все это означает, что WebAssembly не менее безопасен, чем JavaScript, а в большинстве случаев более безопасен.

WebAssembly не может делать ничего такого, чего уже не может JavaScript, но что бы он ни делал, с ним лучше, потому что он делает это быстрее и использует меньше памяти.