JSer.info #392 - TypeScript 3.0 RCが公開されています。
TypeScriptはSemantic Versioningではないため、いわゆるメジャーアップデートとは違いますが、monorepoなど大きなリポジトリ向けの変更が入っています。
- Announcing TypeScript 3.0 RC | TypeScript
- TypeScript 3.0.0-RC 変更点 - Qiita
- Breaking Changes · Microsoft/TypeScript Wiki
Project Referencesによりmonorepo内の別パッケージの型定義を参照できるようになり、Build modeによって関連するパッケージのインクリメンタルビルドできます。
今までもpaths
を使ってmonorepo内の別パッケージのソースコード(.ts
)を直接参照できていましたが、module resolutionやoutDir
に必要ないものまで含まれるなどの問題がありました。
TypeScript 3.0ではこれらの問題を解決するメタIssueがあり、フィードバックを募集しています。
その他にもTuple型の改善、unknown
型の追加、Reactのdefault propsの型チェックのサポートなどが行われています。
2018年7月12日の18:00〜22:00(JST)に[email protected]
または[email protected]
を含むパッケージをインストールすると.npmrc
を盗み取られるウイルス入りのパッケージが公開されていたインシデントがありました。
[email protected]
に依存していたパッケージにはwebpack
、eslint@4
、babel-eslint
などがあり影響範囲が広がりました。
より正確な時間や影響範囲については次の記事を参照してください。
- Postmortem for Malicious Packages Published on July 12th, 2018 - ESLint - Pluggable JavaScript linter
- 2018/07/12 に発生したセキュリティ インシデント ([email protected]) について - Qiita
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.json
やyarn.lock
などでパッケージのバージョンをロックして今回の問題のようなパッケージを自動的には入らないようにするといったことについて書かれています。
今回の攻撃に使われたパッケージのインストール時にpostinstall
のhookで悪意あるコードを実行するという手法は以前も同様の問題が報告されていました。この問題の対策の一環としてread-only tokenや2要素認証が導入されていました。
npmの2要素認証はユーザー単位であるため、メンテナーが複数人いる場合は全員が2要素認証を有効化していないと、パッケージ自体は攻撃の影響を受ける可能性があります。
そのため今回の問題をうけてnpmでは、ユーザーではなくパッケージごとに2要素認証を設定可能にすることやTime-limited tokensについての提案などが行われています。
- The npm Blog — Two-factor authentication protection for packages
- Time-limited tokens - 💡 ideas - npm forum
ヘッドライン
The npm Blog — v6.2.0
blog.npmjs.org/post/175871462900/v620
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 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
Puppeteer v1.6.0リリース。
page.waitForRequest
とpage.waitForResponse
のサポート。
要素が現在のviewportに表示されているかを判定するelementHandle.isIntersectingViewport
の追加など
Release 9.0 “A Mari Usque Ad Mare” · postcss/autoprefixer
github.com/postcss/autoprefixer/releases/tag/9.0.0
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
.npmrc
の内容を盗み取る[email protected]
と[email protected]
が公開された問題についてのレポート。
パスワードリスト攻撃で取られてたアカウントのtokenから直接publishされ、その後npm incによって全ユーザーのtokenがリセットされた。
攻撃手法や対策について
- The npm Blog — Incident report: npm, Inc. operations incident of...
- 2018/07/12 に発生したセキュリティ インシデント ([email protected]) について - Qiita
アーティクル
Site Isolation for web developers | Web | Google Developers
developers.google.com/web/updates/2018/07/site-isolation
Chrome 67でデフォルト有効化されたSite Isolationについて。
レンダラープロセスを分離することで、サイドチャネル攻撃やオリジン超えの攻撃によって機密情報が盗まれるのを防止する。
CORB、iframeなどにおけるloadとunloadにおける挙動の違いなどについて
スライド、動画関係
The CSS Paint API | CSS-Tricks
css-tricks.com/the-css-paint-api/
CSS Paint APIについての記事。
新しいShapeの追加、カスタムプロパティとの連携方法について
Life of a Pixel 2018 - Google スライド
docs.google.com/presentation/d/1boPxbgNrTU0ddsc144rcXayGA_WF53k96imRH8Mp34Y/mobilepresent#slide=id.p
Chromeのレンダリングの仕組みについてのスライド。
DOM、Style、Layout、Paint、Rasterization。
変更があったときに再レンダリングやCompositingなどの処理の流れなどについて。
サイト、サービス、ドキュメント
Vue.js Cheat Sheet
flaviocopes.com/vue-cheat-sheet/
Vueチートシート
Browsh
Firefoxをバックエンド(WebExtensions)に使ったテキストブラウザ。
CSSやWebGL、画像や動画などの描画結果をテキストベースで閲覧できる。
ソフトウェア、ツール、ライブラリ関係
dubzzz/fast-check: Property based testing framework for JavaScript (like QuickCheck) written in TypeScript
Property based testingを行うテストライブラリ。
値のパターンや組み合わせを定義してランダムな値を生成してテストできる。
またテストが失敗した際にはseed
値を使って同じ組み合わせを再現してテストできる。
joshwcomeau/guppy
React向けのアプリケーション管理、タスク実行を行えるGUIアプリ。
teadjs/tead: Lighting the way to simpler testing
シンプルなテストフレームワーク。
[actual, expected]
の組み合わせを返すだけでテストできる。
書籍関係
Programming TypeScript: Making Your JavaScript Applications Scale: Boris Cherny: 9781492037651: Amazon.com: Books
2019年4月4日発売
TypeScriptでのアプリケーション開発についての書籍