Fork me on GitHub

2018-07-17のJS: TypeScript 3.0.0 RC、ウイルスとnpmパッケージ、Property based testing

Edit on GitHub 編集履歴を見る

JSer.info #392 - TypeScript 3.0 RCが公開されています。
TypeScriptはSemantic Versioningではないため、いわゆるメジャーアップデートとは違いますが、monorepoなど大きなリポジトリ向けの変更が入っています。

Project Referencesによりmonorepo内の別パッケージの型定義を参照できるようになり、Build modeによって関連するパッケージのインクリメンタルビルドできます。
今までもpathsを使ってmonorepo内の別パッケージのソースコード(.ts)を直接参照できていましたが、module resolutionoutDirに必要ないものまで含まれるなどの問題がありました。

TypeScript 3.0ではこれらの問題を解決するメタIssueがあり、フィードバックを募集しています。

その他にもTuple型の改善、unknown型の追加、Reactのdefault propsの型チェックのサポートなどが行われています。


2018年7月12日の18:00〜22:00(JST)に[email protected]または[email protected]を含むパッケージをインストールすると.npmrcを盗み取られるウイルス入りのパッケージが公開されていたインシデントがありました。

[email protected]に依存していたパッケージにはwebpackeslint@4babel-eslintなどがあり影響範囲が広がりました。

より正確な時間や影響範囲については次の記事を参照してください。

npmによれば4,500のnpmアカウントがこの問題の影響を受けたと推測されており、またこの問題の後にすべてのユーザーのnpmのアクセストークンを無効化しています。そのため、ほとんどのユーザーはもう一度npm loginなどをしてアクセストークンを再発行する必要があります。

問題のパッケージ([email protected][email protected])は既にunpublishされているため、インストールする可能性はほぼありません。しかし、npmのregistryにはArtifactoryなどのミラーを利用しているユーザーもいるため、ミラーのregistryには残っている可能性もあるので確認してください。仮に実行した場合でもeslint-scope attackで解説されているように、実際の攻撃スクリプトがすでに利用できないため影響はほぼありません。

Postmortem for Malicious Packages Published on July 12th, 2018 - ESLint - Pluggable JavaScript linterの記事では、パッケージのメンテナー側の対策として2要素認証をする、パスワードを使い回さないなどの対策などについて書かれています。
またパッケージの利用する側の対策としてpacakge-lock.jsonyarn.lockなどでパッケージのバージョンをロックして今回の問題のようなパッケージを自動的には入らないようにするといったことについて書かれています。

今回の攻撃に使われたパッケージのインストール時にpostinstallのhookで悪意あるコードを実行するという手法は以前も同様の問題が報告されていました。この問題の対策の一環としてread-only tokenや2要素認証が導入されていました。

npmの2要素認証はユーザー単位であるため、メンテナーが複数人いる場合は全員が2要素認証を有効化していないと、パッケージ自体は攻撃の影響を受ける可能性があります。
そのため今回の問題をうけてnpmでは、ユーザーではなくパッケージごとに2要素認証を設定可能にすることやTime-limited tokensについての提案などが行われています。


ヘッドライン


The npm Blog — v6.2.0

blog.npmjs.org/post/175871462900/v620

npm ReleaseNote

npm 6.2.0リリース。
npm auditにawkなどでパースしやすい--parseableオプションの追加、sign-git-commitの設定を追加など


Announcing TypeScript 3.0 RC | TypeScript

blogs.msdn.microsoft.com/typescript/2018/07/12/announcing-typescript-3-0-rc/

TypeScript ReleaseNote

TypeScript 3.0 RCリリース。
monorepo向けのサポートがメイン。
Project Referencesによりmonorepo内の別パッケージの型定義を参照できるようになり、Build modeによって関連するパッケージのビルドをインクリメンタルに行える。
tuples型の改善、unknown型の追加、Reactのdefault propsのサポートなど


Release v1.6.0 · GoogleChrome/puppeteer

github.com/GoogleChrome/puppeteer/releases/tag/v1.6.0

Chrome library ReleaseNote

Puppeteer v1.6.0リリース。
page.waitForRequestpage.waitForResponseのサポート。
要素が現在のviewportに表示されているかを判定するelementHandle.isIntersectingViewportの追加など


Release 9.0 “A Mari Usque Ad Mare” · postcss/autoprefixer

github.com/postcss/autoprefixer/releases/tag/9.0.0

CSS Tools ReleaseNote

Autoprefixer 9.0、Browserslist 4.0、PostCSS 7.0.0リリース。
Node.js 4のサポート終了など


Postmortem for Malicious Packages Published on July 12th, 2018 - ESLint - Pluggable JavaScript linter

eslint.org/blog/2018/07/postmortem-for-malicious-package-publishes

ESLint npm security node.js

.npmrcの内容を盗み取る[email protected][email protected]が公開された問題についてのレポート。
パスワードリスト攻撃で取られてたアカウントのtokenから直接publishされ、その後npm incによって全ユーザーのtokenがリセットされた。
攻撃手法や対策について


アーティクル


Site Isolation for web developers  |  Web  |  Google Developers

developers.google.com/web/updates/2018/07/site-isolation

Chrome browser security

Chrome 67でデフォルト有効化されたSite Isolationについて。
レンダラープロセスを分離することで、サイドチャネル攻撃やオリジン超えの攻撃によって機密情報が盗まれるのを防止する。
CORB、iframeなどにおけるloadとunloadにおける挙動の違いなどについて


スライド、動画関係


The CSS Paint API | CSS-Tricks

css-tricks.com/the-css-paint-api/

CSS JavaScript

CSS Paint APIについての記事。
新しいShapeの追加、カスタムプロパティとの連携方法について


Life of a Pixel 2018 - Google スライド

docs.google.com/presentation/d/1boPxbgNrTU0ddsc144rcXayGA_WF53k96imRH8Mp34Y/mobilepresent#slide=id.p

browser Chrome slide

Chromeのレンダリングの仕組みについてのスライド。
DOM、Style、Layout、Paint、Rasterization。
変更があったときに再レンダリングやCompositingなどの処理の流れなどについて。


サイト、サービス、ドキュメント


Vue.js Cheat Sheet

flaviocopes.com/vue-cheat-sheet/

Vue チートシート

Vueチートシート


Browsh

www.brow.sh/

browser console firefox

Firefoxをバックエンド(WebExtensions)に使ったテキストブラウザ。
CSSやWebGL、画像や動画などの描画結果をテキストベースで閲覧できる。


ソフトウェア、ツール、ライブラリ関係


dubzzz/fast-check: Property based testing framework for JavaScript (like QuickCheck) written in TypeScript

github.com/dubzzz/fast-check

JavaScript testing library TypeScript

Property based testingを行うテストライブラリ。
値のパターンや組み合わせを定義してランダムな値を生成してテストできる。
またテストが失敗した際にはseed値を使って同じ組み合わせを再現してテストできる。


joshwcomeau/guppy

github.com/joshwcomeau/guppy

React GUI Tools software

React向けのアプリケーション管理、タスク実行を行えるGUIアプリ。


teadjs/tead: Lighting the way to simpler testing

github.com/teadjs/tead

JavaScript testing library

シンプルなテストフレームワーク。
[actual, expected]の組み合わせを返すだけでテストできる。


書籍関係


Programming TypeScript: Making Your JavaScript Applications Scale: Boris Cherny: 9781492037651: Amazon.com: Books

www.amazon.com/dp/1492037656/

TypeScript book

2019年4月4日発売
TypeScriptでのアプリケーション開発についての書籍


この記事へ修正リクエストをする
JSer.info Slackに参加する