パスワードを忘れた? アカウント作成
168841 story
インターネット

JavaScriptからローカルファイルシステムへのアクセスを可能にするFile API、標準化へ一 66

ストーリー by hylom
夢は広がる 部門より

hmmm 曰く、

JavaScriptからローカルファイルシステムへのアクセスを可能にするFile APIに関する仕様のドラフト文書が、Web標準規格を策定するW3Cに提出されたそうだ(Ars Technicaの記事ドラフト文書)。

File APIを利用することで、たとえばローカルのテキストファイルを読み込んでテキストエリアにその内容を入力する、といった処理がクライアントサイドだけで実装できるようになる。また、セキュリティ的な問題を発生させないよう、フォームの<input type="file">要素でユーザーが指定したファイルのみにアクセスできるような制限が課せられているとのこと。

JavaScriptの可能性が大きく広がるのは歓迎できるが、セキュリティ面が考慮されているといってもちょっと怖い面があるのも否めない。あとはIEの対応ですかね……。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • httpのputだけと違う(けど操作は変らない)とかが気にはなりますがねー。

    1.デフォルト値とかスクリプトでの操作はできないけど、運用まで含めて穴はない?
    2.普通のアップロードのページに悪意あるスクリプトが仕込まれて、XMLHTTPRequestみたいなクロスドメインなデータ転送で漏れたりとかしない?(ページ遷移自体は普通なので、気付かれにくくなるかなとか)
    3.レンダラとECMAScriptVMが密の場合はいいけど、疎な作りの時にファイルデータのやりとりが穴にならない?(ここは特にただの空想でこう思っただけ)
        # 打ち決めのパスを弱めのスタック汚染みたいな方法で埋めこんで、File PATHが指定された状態にできたりとかしたら、悪さできちゃうなとか

    みたいな、素人的には気になる所が色々。
    # まー昨今の状況でそれを許すようなAPIにはしないとは思いますけど。

    --
    M-FalconSky (暑いか寒い)
  • #まず
    s/クライアント再度/クライアントサイド/

    >また、セキュリティ的な問題を発生させないよう、要素で指定したファイルのみにアクセスできるような制限が課せられているとのこと。

    指定ファイル以外アクセスできないのはいいですが,"誰が"指定するでしょうか?
    "要素で指定した"とあるとJavascriptまたはHTMLを書いた人と解釈できるんですが.
    • by Anonymous Coward

      ぜひとも<input type="file">がどういった挙動をするか
      ご自身でHTMLを書いて確認してみてくださいな。

      #shiba氏はinputタグをそのまま張った上に、プレビューを見なかったのですかね。

    • by Anonymous Coward

      inputだから基本的にはユーザーが「参照」のダイアログとかで入力するのでしょうが…
      valueで初期値を指定できないように、またJavaScript等のサイト側のコードが
      自分で設定できないように実装するんでしょうねぇ。

      勝手に指定できる仕様だったら本当に夢がひろがりんぐですがw

      • by Anonymous Coward on 2009年11月27日 16時21分 (#1679313)
        <input type="file" />は仕様上、もともとvalueによって初期値を与えることができませんし、
        valueにJavaScriptからパスを流しこもうとしてもうまくいかないので大丈夫ですよ。
        というか、それができたらこのFile APIが存在しなかったとしても
        JavaScriptを使って簡単に無理やりファイルを送信させることができちゃいます。
        親コメント
  • by .wii (33675) on 2009年11月27日 15時43分 (#1679269)
    「↑のボックスにc:\Windows\ほげほげ~を入力してOKボタンを押してください」って説明があった場合、
    初心者の人にそれが危険かどうか判別できるのでしょうか。

    便利そうだからぜひ実装してほしいが最低限デフォルトOFFを希望。
    • by Anonymous Coward

      <input type="file">のフォームを置いて、現状でも同じことができますけど?
      File APIで何が従来より危険になるのか説明してもらわないと説得力ありませんね。

      • by Anonymous Coward
        アップロードさせるぐらいしかできなかったのが、ローカルファイルの書き換えまで可能になるって点でしょうかね
        • by Anonymous Coward on 2009年11月27日 17時30分 (#1679370)
          FileReader しか無いみたいですから、
          やれたとして、dataスキーマを使って結果を返すことになるでしょうから、
          さほど現状と変わらない気がします。

          あと
          >キュリティ的な問..(略)..指定したファイルのみにアクセスできるような制限が課せられているとのこと
          とあると、今やってないけどこの機能がつくからそういう制限が付くみたいに読めちゃうのもしかた無いかも…
          親コメント
        • by souffle (31211) on 2009年11月27日 17時34分 (#1679377)
          書き換えが可能になるってどこから出た情報でしょうか?
          親コメント
  • by duenmynoth (34577) on 2009年11月27日 16時39分 (#1679328) 日記
    もう嫌な予感というか予測しか出てこないです
    デフォルトでOFF できればUACみたいなの希望です

    #アンチウイルスソフトでブロックするのが常識、とかいう未来は嫌ですね
    • Re:利便性より危険性 (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2009年11月27日 21時58分 (#1679610)
      現状はこうやってサーバを介してファイルの内容を取得しているのを

      <input type="file"> →[POST]→ サーバ →[XHTRなど]→ クライアントサイドスクリプト

      サーバを経由しないで取得できるようになるだけで、出来ることは増えていません。

      <input type="file"> →[FileReader]→ クライアントサイドスクリプト

      むしろサーバにアップロードされずクライアントサイドで完結する分だけセキュアな感じがします。
      それにJSのバグによるセキュリティホールを気にするなら、JSの実行自体をUAC的なものでブロックすべきでしょう。File APIだけではなく。
      親コメント
      • by Anonymous Coward

        ですね。
        「JavaScriptでファイル読み込み=危険」といった脊髄反射的な書き込みが散見されますが、
        よくよく考えれば、必ずしも危険になるわけではないことが分かります。

        アップロードファイルのサイズ制限なんかはよくある要件(現状のJavaScriptでは不可能)ですし、
        ファイル内容の簡易チェックなんかもクライアント側で事前に実施することでユーザの利便性向上も期待できます。

        最近はFlashを使ったファイルアップロードが増えてますが、JavaScriptで同様のことができるようになるかな。

    • by Anonymous Coward

      だから、File APIで何がより危険になるんですか?
      なんだか変な勘違いしている人が多すぎるのですが、今までももしユーザーが<input type="file">にファイルを指定したら、それを勝手にJavaScriptでアップロードすることはできました。
      > もう嫌な予感というか予測しか出てこないです
      ちゃんと理由を説明できないならそういうのは杞憂とか妄想と言います。

      • by U-Chan (6901) on 2009年11月27日 17時29分 (#1679369)
        これまでJacaScriptではローカルファイルにアクセスする方法がなかったのに、
        <input type="file"> に指定したファイルだけとはいえ、ローカルファイルへの
        アクセスをするAPIを追加するのだから、その部分にバグが入り込むと、
        指定していないローカルファイルでもアクセスされてしまうかもしれないって
        ことじゃないのかな。
        親コメント
        • by Anonymous Coward on 2009年11月27日 18時08分 (#1679413)

          > その部分にバグが入り込むと、
          > 指定していないローカルファイルでもアクセスされて
          その後どうするんですか? それが最終的にどこか知らないサーバーに送信されるから危険なんでしょう? 何度も言っている通り、それならFile APIを使わなくてもすでに可能です。<input type="file">に指定していないファイルを突っ込んで送信できてしまうというバグは現に今までにも存在しました。
          で、JavaScriptからアクセスされることの何が問題なのですか? alertを禁止したドコモと同類の発想ですか?

          親コメント
      • 旧来なら取得したファイルをサーバで解析することが必要でしたが、
        File APIの登場によりクライアントでのファイル解析が可能になります。
        これによりサーバリソースを大幅に削減し、コストパフォーマンスを向上させることができます。

        マリオネット詐欺とでも名付けようか

        親コメント
      • by Anonymous Coward

        「このページでは、JavaScriptによってファイルを読み取るので、
        外部に情報が漏洩する事はありません」といった詐欺広告文句で、
        なんらかプライベートなファイルに対してJavaScriptで処理させる。

        その後(当然、なんらかの処理をした後に画面が遷移する)のページで、
        HIDDEN属性でファイルの(さらに言えば、JavaScript処理の中で、暗号化するなど)
        内容を保持したまま、次にだれもが押しそうなボタンが、実はHIDDEN情報を外部サーバに
        送信するフォームボタンになっているとか。

        今までなら、まずJavaScriptでファイルを処理できないので詐欺広告はうてない。
        次に、ファイルストリームを暗号化して、途中経路(IDSやIPS、最近ではクレジットカード番号に似た
        番号の外部送信をみつけるような機器もありますね)で見つかる事無く、送信できる。

        • by Anonymous Coward

          そんなに難しいことをしなくても、サーバに情報を送るだけなら1ピクセルの透明画像貼り付ければOKですよ。
          POST以外でも情報を送る事は可能です。分割すれば大容量にも対応できます。HTTPSならさらに安全です。
          昔から色々な所で使われてる技術です。え?ブロックされている?じゃ、2ピクセルで。

  • by Anonymous Coward on 2009年11月27日 17時16分 (#1679358)

    <input type="file">の挙動を知らない人達が騒いでいるのね。
    この要素のvalueは初期値指定やJavascriptでのセットができないというのに…。

    そんなことよりも<input type="file">属性への
    ファイルのドラッグ&ドロップでパスを入力してくれるのを標準で対応してほしい。
    PC素人にアップロードファイルを選択させるの大変なんだよね。

    • by Anonymous Coward

      それはW3Cではなくブラウザ開発者の仕事じゃあないの?

  • ますますオフになる (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2009年11月27日 17時43分 (#1679389)

    ますますJavaScriptオフでの運用が広がる
    そしてたかがリンクを開くためだけにJavaScriptが使用されていてクリックしても反応がない糞サイトが増える

  • by jordan_beth (10928) on 2009年11月27日 21時26分 (#1679588) 日記
    画像ファイルをブラウザ側で処理したい、と思ったことは多々あり。
    画像ファイルを投稿させるようなページで、サムネールなどを画像から(ユーザ自身で)切り出させたい場合、一度サーバに送ってからじゃないとダメですし。(その後キャンセルされたりしたときのロールバックもめんどい...)
    # ユーザ側からしても、ファイル選択->送信->画像切り出し->送信 ってよりも、ファイル選択->切り出し->送信のほうがわかりやすい

    multipart でなく、他のフォームデータと一括してサーバに POST 送信できれば、そこら辺の処理も簡略化できそう。

    セキュリティとユーザビリティのトレードオフなんだろうけど、「ユーザが送信に同意した」ファイルに関しては(そのファイルをローカルに書き戻したりしない限り)いじらせても大丈夫なんじゃないだろうか。
    --
    ん? 俺、今何か言った?
    • Re:賛成の気持ち (スコア:1, 参考になる)

      by Anonymous Coward on 2009年11月28日 20時03分 (#1680049)

      これはまさに
      > 画像ファイルを投稿させるようなページで
      使うことを想定して作られたAPIです。その種のサイトの一部では、file: URLで投稿前に画像をプレビューする機能を提供しているのですが、Firefoxではhttp:なページからfile: URLの参照が禁止されているとか、input type="file"から読み出してもファイルのフルパスを知ることができなくなる [mozilla.org]とか、バージョンが上がるにつれて制限が強化されていったので、そういうことができません。そのためサーバへ送信する前のプレビューを実現するための機能がほしいと要望されていたのです。
      File APIが実装されれば、canvasと組み合わせることでそういう機能を実現できます。というわけで、Firefoxが3.6で真っ先に実装する予定です。

      親コメント
      • by jordan_beth (10928) on 2009年11月28日 20時26分 (#1680054) 日記
        韓国中国系の ActiveXや拡張バリバリ使っているページを見るにつれ、セキュリティ的に不安がよぎる反面、ユーザ側にとってもページ制作側にとっても「わかりやすくて楽」なんだろうなあと羨ましく思ったり。

        どちらにせよ Firefox だけが実装しても他のブラウザが追随しない限り、制作側としてその機能は使えないんですけどね... よしんば IE が実装することになっても、実際使用できるまでそのバージョンが世間に広まるまで何年かかることやら。
        --
        ん? 俺、今何か言った?
        親コメント
  • by DesKwa (35996) on 2009年11月27日 22時43分 (#1679644)

    したら、当然のことのようにセキュリティホールを実装し、
    PCのファイルを消しまくるサイトが氾濫するに1000M$

    • Re:IE独自拡張 (スコア:1, 参考になる)

      by Anonymous Coward on 2009年11月28日 18時29分 (#1680029)

      あるある
      仕様じゃなくて実装が不安なんだよねー。

      親コメント
      • Re:IE独自拡張 (スコア:1, 参考になる)

        by Anonymous Coward on 2009年11月30日 9時06分 (#1680313)
        実装がダメダメなのは、実はMS以外のやつのほうなんだよね。

        調査では、最もバグが多いブラウザはFirefox、その次がSafari。
        ベンダーではAdobeが最も多い。
        親コメント
  • Firefox 3.6β4 (スコア:1, 参考になる)

    by Anonymous Coward on 2009年11月28日 1時25分 (#1679758)

    Firefox 3.6β4でサポートされている [itmedia.co.jp]そうです。

    # それだけなのでAC。

  • by Anonymous Coward on 2009年11月27日 16時28分 (#1679321)
    × 標準化へ一
    ○ 標準化へ─
  • by Anonymous Coward on 2009年11月27日 17時01分 (#1679344)

    ブラウザで何でもかんでもやろうとするのをやめろと言いたい

    • by Anonymous Coward
      いやほんとそう思います。
      私の気持ちを代弁してくれたのでお礼にCromeOSマシンを送ります。
      • by Anonymous Coward

        おい、誰か座布団もって来い!

  • by Anonymous Coward on 2009年11月27日 17時35分 (#1679378)
    ファイルサイズを限定できないと、大きなファイルを書き込んでOSかブラウザーをクラッシュさせてしまえるかも。 または、OSの未チェックバッファとあわせ技で一本とかw
    • by Anonymous Coward

      読み込みしかないみたいだけど。

      • by Anonymous Coward

        読み込み処理 → バッファオーバーフロー
        なんて余裕でありえる
        W3Cはブラウザがどう実装するかなんて
        関係ないからな

        • by Anonymous Coward

          そんなこといったら画像を大量に開いたり巨大な画像を読んでも同じじゃん。

          そもそも読み込むファイルは操作する人が自分で指定するんだぜ?
          クラッシュするほど巨大なファイルを自分で選んだなら自業自得。

          あまりに知性を疑う言いがかりだと思わないか?

          • by Anonymous Coward

            POSTならまだしもJavascriptで処理すんだろ?
            ただでさえ富豪的処理なのに

        • by Anonymous Coward

          >読み込み処理 → バッファオーバーフロー

          それはローカルファイルに限った話じゃないだろ。何を言ってるんだ?

  • by Anonymous Coward on 2009年11月27日 17時51分 (#1679398)
    XHR2のresponseBodyもこんな中途半端な状態 [w3.org]で放置してないで更新してくれー
  • by Anonymous Coward on 2009年11月27日 22時50分 (#1679650)

    すでにいくつかの手段はあるんですが、操作の容易さではJSが一番でしょうね
    トロイがマクロでアップした重要ファイルをサーバーサイドで書き換えてPC内部に戻せば
    ユーザーには手が出せないレベルまでPCを乗っ取ることも可能になりそうです

    • by Anonymous Coward

      んなことできるわけないだろ。先にドラフトを読めよ。

  • by Anonymous Coward on 2009年11月28日 16時10分 (#1679984)
    Javaアプレットなどのサンドボックスの中からでも、JNLPのFileOpenServiceやFileSaveServiceという クラスを使うと、ファイル選択ダイアログ経由でローカルファイルにアクセスできるんですが、これと似てますね。
    どちらも設計思想としては、ユーザが明示的に指定したファイルのみを読み書き可能とすることで、ユーザが知らないところでファイルが壊されたり、不正プログラムを入れられたり、情報を盗み見られたりすることを防止しようというところですかね。
    それと、ユーザにファイルを選ばせることで、プログラムによってファイルの中身を見られたり書き換えられたりすることを実感させ、警戒感を持たせようという狙いもあるのかな。
    公開鍵証明書の確認ダイアログや署名なしプログラムの警告ダイアログと、どっちがいいのかという観点もあるかもしれませんね。
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...