[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Security fixes and large changes



(1) 表題に,<>& などの予約文字が含まれていた場合に about://db-history/ 
や bookmark / antenna などが危険な動作をしていたので,予約文字を文字参
照で置き換えるようにして対処しました.

従来版では,例えば,

    <title></a><a href="unsafe-site">安全なサイト</title>

というような悪意を持って構成された表題のページを閲覧した後で,history 
などを表示させて,そのページに移動しようとすると,unsafe-site に飛ばさ
れてしまっていました.

安定版に対するパッチは検討中です.


(2) SSL で保護されたページから,保護されていないページに移動する時のた
めに

    You are about to leave secure page. continue?

という警告が組み込まれていたのですが,この警告のタイミングが遅すぎまし
た.従来版では,w3m-retrieve() で相手先サーバーに post-data などを送信
してしまった後で,この質問が行われていたので,警告の意味をなしていませ
んでした.

幹の先端は対処済です.安定版に対するパッチは検討中です.


(3) arrived DB を再編しました.従来,fragment つきの URL にアクセスす
ると,

    http://emacs-w3m.namazu.org/#download
    http://emacs-w3m.namazu.org/

fragment を含む URL と,含まない URL の2つのエントリが作成されて,コン
テンツの最終更新日時や表題は,その両方に記録されていました.しかし,こ
の方法ではコンテンツが更新されて,fragment つきの URL が存在しなくなっ
たときなどに,簡単に矛盾が発生してしまいます.

そのため,

  (3.1) fragment を含まない URL を基本エントリとして,表題(title),最
        終更新日時(last-modified),文字コード(content-charset),文書タ
        イプ(content-type)は,基本エントリのみに記録する.

  (3.2) fragment を含む URL のエントリは,参照日時(arrived-time)の情報
        のみを記録する.

  (3.3) fragment を含む URL のエントリよりも,含まないエントリの方が必
        ず優先されて記録に残るようにした.

という趣旨の改変を行いました.

ただし,この改変は副作用を伴います.改変後の ~/.w3m/.arrived を,変更
前の emacs-w3m で開こうとすると,w3m-keep-arrived-urls 回数だけ 
w3m-last-modified() が呼び出されてしまうので,とてつもない起動時間がか
かります.そういう場合は,~/.w3m/.arrived を消去して対処してください.


(4) w3m-prepare-content() を文書タイプ(content-type)に基づく書き換えを
行う層として,再定義しました.処理の流れの概略は以下の通りです.

  w3m-goto-url
    w3m-retrieve-and-render
      w3m-retrieve
        コンテンツの取得
      w3m-prepare-content
        文書タイプに基づく書き換え
      w3m-filter
        URIに基づく書き換え
      w3m-create-page
        書き換えられたコンテンツを対象として,実際に表示するページを作る

文書タイプに基づく書き換えとしては,以下のような応用があるのではないか
と思っています.

    a) text/*
       視覚障害者向けの書き換えなど
    b) Excel / Word / PowerPoint ファイル
       -> xlhtml, wvHtml, ppthtml など
    c) PostScript / PDF ファイル
       -> ps2text, pdf2text など?
    d) tar/lzh などの書庫ファイル
       -> 変換するか,tar-mode などを起動するか.
    e) 画像
       Emacs20/Mule の場合 = convert による bitmap 形式への変換
       Emacs21/XEmacs の場合 = convert による表示可能形式への変換
       画像の大きさの調節

最後の画像の変換は,w3m-create-image-page() の管轄かも知れませんが.

この変更を実現するため,w3m-content-type-alist の意味を拡張し,
w3m-retrieve-and-render() 周辺を再整理しました.

副産物ですが,文書タイプが分からないコンテンツに対してユーザーの指定を
求めるタイミングが,従来よりも遅くなって,コンテンツ取得後になっていま
す.この変更は,ファイルの magic number に基づく文書タイプの推定を行う
ための基礎となるはずです.というわけで,emacs lisp 版 file コマンドを
作成する人を募集中です.

;; あー疲れた

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )