[53] データを構成するバイト列を検査してその内容の種別などを決定することを sniffing といいます。
[1] Web では、 MIME sniffing によって MIME型が決定されます。
file(1)[97] 多くのプラットフォームに MIME magic などと称するツールがあります。 これは、ファイルの先頭のバイト列から MIME型を推定するものです。
[50] RDFa 1.1 に基づく RDFa処理器は、 MIME型によってホスト言語を決定しなければなりません。
MIME型を決定できないか未対応の時は、 application/xml としなければなりません。
>>49
[51] >>50 の直後にこれと矛盾する次のような「NOTE」があります。 MIME型が無い時、 DOCTYPE、根要素、拡張子、利用者定義の引数など追加の仕組みを用いても構いません >>49。
One special type is 'application/octet-stream'. If the Printer object supports this value, the Printer object MUST be capable of auto-sensing the format of the document data using an implementation-dependent method that examines some number of octets of the document data, either as part of the create operation and/or at document processing time.
[24] Word で「打」で始まるテキスト ファイルを開くとコンバーターを要求される | Japan Office Client Support Blog, , https://officesupportjp.github.io/blog/cm15ufuis0000f0seec0i7yev/
[23] compact_enc_det/compact_enc_det/compact_enc_det.cc at master · google/compact_enc_det · GitHub, https://github.com/google/compact_enc_det/blob/master/compact_enc_det/compact_enc_det.cc#L2288
[26] >>23 ced は文字コードの判定のライブラリーですが、 文字列ではなくバイナリーであるとの判定をすることもあり、 主要なファイル形式の先頭バイトパターンを知っています。
[10] テキストファイルの文字コードの判定の処理が必要になることがしばしばあります。 いくつかのテキストファイル系ファイル形式はその手法を定めています。
[11] この処理はファイル形式の判定と同時に実装されることもあれば、 別個に実装されることもあります。
[13] ファイル形式中立の記述法については >>3 を参照。
[25] RFC 4627 が JSON の charset sniffing について言及しています。
[14] sniffing は発見的方法によることが多く、相互運用性に乏しいのが問題です。
[15] Webプラットフォームは sniffing の方法も標準化していますが、 各実装は完全にそれに従っているわけではなく、 相互運用性の問題は皆無ではありません。
[16] sniffing の相互運用性の問題は、そのままセキュリティーの問題となります。
[17] とりわけ、安全と考えられているファイル形式が危険なファイル形式と(誤)判定され得る状況は、 しばしば悪用されます。
[18] 故に、
はセキュリティーのために極めて重要と考えられています。
[2] 入力が短すぎるときの処置が正しくない実装がしばしばみられます。 所与のパターンとの比較時にパターンより短い入力を想定し忘れているような類です。 バッファーオーバーフローなど深刻な不具合となることもあり、 特に注意が必要です。
[4] 入力が長すぎる場合にも注意が必要です。例えば数GBのファイルの全体を判定するため全体をメモリー上に載せるのは無駄であり、 適当なところで打ち切るのが妥当です。
[6] 無限の入力を扱い得るプラットフォームでは、処理が終了しなくなることがないよう、 特に注意が必要です。
[7] 行を単位とする処理が必要な場合にも行が長すぎる場合の考慮を忘れがちなので、 注意が必要です。
[9] rouge/lib/rouge/guessers at master · jneen/rouge () https://github.com/jneen/rouge/tree/master/lib/rouge/guessers