日本語

Developer Data Toolkit でできないこと

ここにあるすべてのユーティリティには利点があります。このページには、それぞれの機能がどこで停止するのか、その理由、代わりに何を使用するのかが記載されているため、依存した後ではなく、依存する前にわかります。

すべてに適用される制約

すべての処理は、デバイスのメモリを使用して 1 つのブラウザ タブで行われます。これがプライバシーの主張を真実にするものであり、以下のすべてのサイズ制限の原因でもあります。各ユーティリティは入力を明示的に制限し、ページをフリーズするのではなく明確なメッセージで大規模な作業を拒否します。

SHA ハッシュと UUID 生成という 2 つの機能には、安全なコンテキスト (https:// または localhost) が必要です。これは、ブラウザが Web Crypto API を公開する唯一の場所であるためです。 LAN アドレス上のプレーン HTTP 経由で開くと、どちらも使用できないことが表示されます。どちらも、ブラウザー独自の実装が信頼に値するため、手書きの実装に代わるものではありません。

Service Worker がないため、最初のロードにはネットワーク接続が必要です。その後、ツールキットを実行する際にツールキットは必要なくなります。

JSON

厳密な RFC 8259 のみ。コメント、末尾のカンマ、一重引用符で囲まれた文字列、引用符で囲まれていないキー、NaN または無限大はすべて拒否されます。これらは JSON ではなく、JSON5 または JavaScript オブジェクト リテラル機能です。バリデーターは見つかったものを指定するため、拒否は少なくとも対処可能です。

数値は IEEE-754 の 2 倍として解析されます。これは JSON.parse が行うことです。 2^53 を超える整数は、ラウンドトリップで精度が失われます。大きな識別子を処理する場合、識別子は JSON 自体の文字列である必要があります。この形式で表現できない値を JavaScript ツールで回復する方法はありません。

キーの順序は記述どおりに保持され、オプションの並べ替えはオブジェクト キーにのみ適用されます。配列の順序を変更すると、その表示ではなくデータが変更されるため、配列の順序は変更されません。

約 8 文字を超えるドキュメントは拒否されます。

構文コンバータ

9 つの直接変換 - JSON から YAML、YAML から JSON、JSON から XML、XML から JSON、JSON から TOML、TOML から JSON、YAML から TOML、TOML から YAML、JSON から CSV。そのリストにないものは、存在するルートを示す文とともに拒否されます。完全な規則セットはコンバーターのページにあります。このセクションでは、変換が停止する場所について説明します。

CSV は書き込まれますが、読み取られることはありません。これを読むということは、すべてのセルの区切り文字、引用符の方言、ヘッダー行、および型を推測することを意味します。コンバーターは 4 つの推測を静かに間違えます。

コメントは、コメントが存在するあらゆる形式で、あらゆる方向で失われます。

YAML には、JSON 形式のデータのみを生成できる制限されたスキーマがロードされます。カスタムタグおよび言語固有のタグ (!!js/function、!!python/object/apply、!!binary、!!timestamp、!!set、!!omap) は拒否されます。これは意図的なもので、これらを構築するローダーは任意のオブジェクト コンストラクターです。

デフォルトの JSON スキーマでは、「~」と空の値は null ではなく文字列であり、「yes」は文字列「yes」です。コア スキーマ オプションは、ほとんどの人が期待する方法でこれらを解決します。どちらも安全です。それらはスカラー解釈が異なり、ツールは選択の時点でどちらがどちらであるかを説明します。どちらも NO を false として読み取りません。これは YAML 1.1 の動作であり、これは YAML 1.2 です。

マルチドキュメント YAML ストリームは、他の形式にストリームがないため、ドキュメントの配列になります。アンカーとエイリアスは保持されるのではなく解決され、再帰的なエイリアスは拒否され、エイリアスに従うと 100 万を超えて拡張されるドキュメントは拒否されます。これは YAML の「億笑い」パターンです。マッピング キーを繰り返すと最後の値が保持され、ツールはそのように認識します。

YAML 無限大と NaN は、どのターゲット形式でも表現できません。 JSON.stringify に黙って null を書き込ませるのではなく、ツールは変換して、それが発生したことを警告します。

DOCTYPE を含む XML ドキュメントは完全に拒否され、無害なドキュメントも含まれるため、外部エンティティを解決したり、エンティティ チェーンを拡張したりすることはできません。それを許可するという選択肢はありません。 XML 混合コンテンツでは、子要素に対する相対的なテキストの位置が失われ、単一の繰り返される要素は繰り返されない要素と区別できず、型推論がオンになっていない限り、すべての値は文字列になります。

TOML には、JSON、YAML、XML にはない 4 つの時間型があります。それぞれは、それが書かれたときの RFC 3339 文字列になるため、TOML ラウンドトリップによってこれらの値が文字列に変更されます。ロスのないパスはありません。 TOML には null がないため、null キーは TOML 出力から削除されます。 TOML ドキュメントのルートはテーブルである必要があるため、JSON 配列またはスカラーを TOML にすることはできません。 2^53 を超える整数は、暗黙的に丸められるのではなく、文字列になります。

CSV では空の文字列と null を区別できません。ネストされた値はドット付きの列名にフラット化されるため、すでにドットが含まれているキーは、エスケープされずに警告されるあいまいな名前を生成します。 =、+、-、@、タブ、またはキャリッジ リターンで始まるテキスト セルには、スプレッドシートが数式として実行されるため、先頭にアポストロフィが付けられます。

入力は形式ごとに制限されます: JSON の場合は 8 百万文字、XML の場合は 4 百万文字、YAML および TOML の場合は 2 百万文字。 CSV 出力の上限は 100,000 行と 2,000 列です。

Base64

テキストのみ。ここにはファイルのアップロードはありません。ファイルをエンコードするにはそれを読み取る必要があり、このツールキットはテキスト ボックスを中心に構築されています。そのためには、ファイル指向のツールを使用してください。

デコードでは、バイトが有効な UTF-8 の場合はテキストが生成され、そうでない場合はクリーン エラーが報告されます。その時点で、バイト ビューには代わりに 16 進数が表示されます。任意のバイナリ ペイロードはテキストではないため、そうでないふりをすると破損することになります。

約 4 百万文字を超える入力は拒否されます。

URLエンコード

提供される 3 つのルール (コンポーネント、URL 全体、フォーム) は、プラットフォームが定義する 3 つです。アプリケーション固有のバリアント (AWS SigV4 正規化、OAuth 1.0a パーセントエンコーディング) は若干異なるため、提供されていません。

URL インスペクターには、スキームを含む絶対 URL が必要です。相対パスはホスト、パス、クエリを持たないため、それらに分解できません。

国際化されたドメイン名はブラウザによって正規化されて表示されますが、これは元のスクリプトではなく Punycode である可能性があります。

HTMLエンティティ

名前付きエンティティ テーブルは、実用的なサブセット (マークアップに重要な文字、タイポグラフィ、通貨、矢印、数学、ギリシャ文字、ラテン文字 1) をカバーしますが、すべての 2,231 HTML5 名前付き参照ではありません。文字を創作することは、テキストをそのままにしておくより悪いため、それ以外の名前はリストに表示され、書かれたとおりに残されます。

終了セミコロンが必要です。 HTML5 は、参照がなくてもいくつかのレガシー参照を許容しますが、それらを正しく解決できるかどうかは、スタンドアロンのテキスト ツールにはない周囲のマークアップに依存します。

デコードはシングルパスであるため、「&amp;lt;」 「<」ではなくテキスト「&lt;」にデコードされます。その通りです。二重エンコードはおそらく意図的でした。

これにより、HTML のテキストがエスケープされます。これは HTML サニタイザーではありません。マークアップでいっぱいのドキュメントを取得したり、危険な部分を削除したりすることはありません。それは別の、そしてはるかに難しい仕事です。

タイムスタンプ

単位検出はヒューリスティックです。10^11 以上はミリ秒として読み取られます。これは常に表示され、常にオーバーライド可能ですが、曖昧な入力に対する推測です。

一部のデータベースが発行するマイクロ秒およびナノ秒のタイムスタンプは検出されません。まず 1,000 または 1,000,000 で割ります。

変換では、うるう秒のない POSIX 時刻が使用されます。23:59:60 は、Unix タイムスタンプに存在しないため、ここには存在しません。

ローカルタイムのレンダリングでは、ブラウザーの構成されたゾーンが使用されます。レンダリングする任意の IANA ゾーンを選択することはできません。

エポックからおよそ ±273,790 年を超える値は、JavaScript の日付が表現できる範囲を超えているため、拒否されます。

UUID

バージョン 4 (ランダム) のみが生成されます。バージョン 1 および 6 には、MAC アドレスと安定したクロック シーケンスが必要です。バージョン 7 が何かの価値を持つためには単調カウンターが必要です。バージョン 3 および 5 は名前ベースであり、この目的のためにブラウザーが公開しない名前空間とハッシュが必要です。

バリデーターは正規のテキスト形式を認識し、バージョンとバリアントを報告します。 UUID が適切に生成されたかどうかはわかりません。弱いジェネレーターから生成された version-4 UUID は、適切なジェネレーターと同一に見えます。

バッチは 500 値に制限されます。

Web Crypto がなければ何も生成されません。 Math.random() にフォールバックすると、予測可能な識別子が生成されるため、ツールは代わりに拒否します。

SHAハッシュ

SHA-1、SHA-256、SHA-384、および SHA-512 のみ。これらは SubtleCrypto が実装するものであるためです。 MD5 は必要に応じて、また選択によって存在しません。

SHA-1 は従来の相互運用性のために存在し、出現するすべての場所で暗号的に壊れているというラベルが付けられています。セキュリティが重要なものには使用しないでください。

テキストのみ — ファイルのハッシュはありません。同じ理由で、base64 にはファイル入力がありません。

HMAC、キー導出、パスワードハッシュはありません。パスワードには、Argon2id、scrypt、bcrypt など、低速でソルト機能があり、メモリに負荷がかかる関数が必要です。高速な汎用ハッシュは間違ったツールであり、それを使用することは小さな間違いではなく、重大な間違いです。

テキストの差分

行レベルの比較のみ。変更された行内では、単語レベルまたは文字レベルの強調表示はありません。

変更された行は、削除と追加として表示されます。これは、行ベースの編集スクリプトがそれを表現する方法です。

同一の先頭行と末尾行は比較前にトリミングされるため、1 か所で異なる大きなファイルも高速に処理されます。残っているのは、片側ごとに異なる行数 2,000 に制限されており、それを超えるとツールはタブを強制終了する割り当てを試行せずに拒否します。

3 方向のマージ、パッチの適用、構文の認識はありません。

JWT デコード

デコードのみ。署名は決して検証されず、これは今後も変わりません。その理由はトークン ガイドに記載されています。

暗号化されたトークン (JWE、5 つのセグメント) は、キーがなければ復号できません。ツールはそれらを識別して停止します。

ネストされたトークンは自動的にラップ解除されません。内部トークンを個別にデコードします。

RFC 7519 の登録セット外のクレームは、その意味がアプリケーション固有であるため、解釈せずに表示されます。

200,000 文字を超えるトークンは拒否されます。

HTML WYSIWYG エディター

サニタイザーは、完全な HTML5 パーサーではなく文字列トークナイザーに基づいて構築された、このエディター自身の出力の許可リストです。これは汎用の XSS フィルターではなく、そのまま使用するのは間違いです。ブラウザーは、意図的に不正な形式のペイロードをこのトークナイザーとは別のツリーに解析することができます。信頼できない HTML は、実際のパーサーに対して実行されるサーバー側のサニタイザーに属します。

リストされた要素 (段落、見出し、強調、リスト、リンク、引用符、コード、およびいくつかのインライン タグ) のみが残ります。他のものはすべてアンラップされるため、テキストは残りますが、タグは残りません。画像、表、色、フォント、インライン スタイルはすべて存在せず、追加する方法もありません。

script、style、iframe、object、embed、form、svg、math、およびその他の生のテキストまたは外部コンテンツの要素は、その中にあるすべての要素とともに削除されます。

リンクには、http、https、mailto、tel、ftp、または相対アドレスを使用できます。それ以外のもの (javascript:、data:、blob: を含む) は拒否され、このツールのエンティティ テーブルの外にある文字参照を含むアドレスも拒否されます。

編集面では document.execCommand を使用します。これは非推奨であり、その代替はどのブラウザにも実装されておらず、特にネストされたリストの動作はエンジンごとに異なります。ソース モードは、コマンドが間違った動作をした場合の避難口です。

500,000 文字を超えるドキュメントは拒否されます。

Chmod計算機

12 の許可ビットのみ: 所有者、グループ、その他に対する読み取り、書き込み、実行、および setuid、setgid、および Sticky。アクセス制御リスト、拡張属性、SELinux コンテキスト、機能、および Windows ACL はすべて、モードで表現できる範囲の外にあります。

構築されるコマンドはコピーできるテキストです。何も実行されず、マシン上のファイルも読み取られたり変更されたりしません。パス フィールドはコマンドを入力するためだけに存在します。

Web ページはファイルシステムを認識できないため、umask 算術計算は行わず、指定されたファイルが現在どのようなモードになっているかもわかりません。

Docker を実行して作成する

1 つの docker run コマンドが 1 つのサービスになります。複数のコンテナーのセットアップは、各コマンドを変換し、その結果を自分でマージすることによって組み立てる必要があります。

--mount、--gpus、--device、--link、--volumes-from、--network-alias およびその他の多数のフラグには、このコンバーターが書き込む同等のフラグがありません。それぞれ、フラグが消えるのではなく、フラグに名前を付ける警告が生成されます。

コンバーターが認識しないフラグは値をとらないものとして扱われ、警告でその旨が示されます。フラグが 1 つ取られた場合、その値は誤って読み取られます。フラグを削除し、その効果を手動で追加します。

何も実行、評価されず、シェルに渡されることもありません。コマンドは、引用符のみを理解するトークナイザーによって分割されます。したがって、コンバーターは、$VARIABLES の展開、$(subshel​​ls) の解決、または --env-file の読み取りを行うことができません。これら 3 つはすべて、何かを実行するかファイルを開くことを意味するためです。

出力は YAML 引用が正しいかどうかチェックされますが、Compose 仕様に照らして検証されず、存在を確認するためのイメージへのアクセスも行われません。

100,000 文字を超えるコマンドは拒否されます。

クロンタブジェネレーター

5 フィールドの crontab 構文のみ。 6 フィールドの Quartz および systemd 式は、非標準演算子 L、W、#、? およびプレビューのスケジュールがない @reboot と同様に、説明付きで拒否されます。

月日フィールドと曜日フィールドが両方とも制限されている場合は、OR で結合され、Vixie cron と一致します。これは cron 行の最も一般的な誤読であるため、ツールはこれに該当するたびに警告を出します。

次回の実行時間は、ブラウザーの国際タイムゾーン データから取得されます。これらはプレビューであり、約束ではありません。cron を実行しているマシンは、別のゾーンや別の tzdata バージョンを使用しているか、単にその時点で実行されていない可能性があります。

プレビューでは 5 年先を検索します。それよりも珍しいスケジュール (たとえば 29 2 月) では、実行数は 5 回未満になります。

貼り付けたものはどうなりますか

  • すべての変換、ハッシュ、デコード、差分はブラウザーのタブで実行されます。ページが読み込まれるとサーバーは関与しないため、入力はサーバーにアップロード、記録、または保存されません。
  • ハッシュはブラウザー独自の Web Crypto 実装から取得され、UUID は暗号的に安全なランダム ジェネレーターから取得されます。どちらもネットワーク通話を必要としません。
  • 入力した内容はローカル ストレージや Cookie に書き込まれません。ページをリロードするとページは破棄されます。タブを閉じると破棄されます。
  • サイト全体の分析は、構成された正規実稼働ホスト上でのみ実行され、プライバシー ポリシーで開示されます。ローカルホストとプレビューホストはそれを拒否します。貼り付けられた値、トークン、URL、およびファイルの内容は、ToolAcre 独自の分析イベントから除外されます。現在の構成では広告は無効になっています。
  • つまり、JWT または API キーはライブ認証情報です。安全な習慣は、この主張を含め、その主張がどれほど信頼できるものであっても、自分が書いていない Web ページに貼り付けることは決してしないことです。

質問

ハッシュまたはbase64用のファイルアップロードを追加しますか?

おそらくですが、これはテキスト ボックスへの小さな追加ではなく、ファイルの読み取り、進行状況レポート、大きなファイルのメモリ ガードなど、別の種類のツールです。今日の答えはノーです。

JWT デコーダーに署名検証を追加しますか?

いいえ、検証には発行者のキーとトークンの外側に固定されたアルゴリズムが必要であり、どちらかを要求する Web ページはトークンを偽造する機能を要求していることになります。制限こそが特徴です。

なぜ遅いだけでなく、大量の入力を拒否するのでしょうか?

ブラウザーのタブの "slow" は応答しないページを意味し、携帯電話の場合はタブが強制終了されて入力が失われることを意味することが多いためです。制限を明示した明確な拒否は、終わりのないスピナーよりも有益です。

これはオフラインでも使用できますか?

ページが読み込まれたら、はい、ツールキットの実行にはネットワークが必要ありません。 Service Worker がないため、最初のロードには接続が必要です。

制限事項

  • このページ自体が制限事項のリストです。上記の各セクションでは、1 つのユーティリティで実行できないことについて説明します。
  • 制限はコード内で適用され、ここに文書化されるだけでなく、インターフェース内で報告されます。