2012-03-02 12 views
0

私はabc.xlsファイルを持っており、コマンドプロンプトを使ってabc.docという名前に変更しました。 私の要件は次のとおりです。適切なdocファイルをアップロードしたいが、ファイルのMIMEタイプのみをチェックしてファイルをアップロードすることができますが、これでは十分ではありません。私はdocファイルをアップロードする前に、それがdocであり、abc.docファイルをアップロードすることを許可しないことを確認したい。ウェブページでアップロードする前のワード文書を読む方法

+0

可能な複製http://stackoverflow.com/q/71944/745359 – wintersolutions

+0

なぜクライアント側の検証が必要ですか?入力を信頼しない場合は、サーバー上で再度確認する必要があります。リンクされた質問に記載されている解決策はどうですか? – wintersolutions

+0

実際にはdocファイルではないExcelファイルを開くと何が起きましたか?msファイルで開こうとすると破損したファイルのようなエラーが出ます。だから私はこの未来の問題を避けようとしています。 – baviskarss

答えて

0

アップロードする前に、クライアントシステムのファイルコンテンツにアクセスするには、おそらくActiveXオブジェクトが必要です。

function CheckWordDoc(filepath){ 
    var fso, f, ts, s; 
    var ForReading = 1, ForWriting = 2, ForAppending = 8; 
    var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0; 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
    f = fso.getFile(filepath); 
    ts = f.OpenAsTextStream(ForReading, TristateUseDefault); 
    while (!ts.AtEndOfStream) { 
     s = ts.ReadLine(); 
     if (s.indexOf("Word.Document.8") != -1) { 
      ts.Close(); 
      return true; 
     } 
    }   
    ts.Close(); 
    return false; 
} 

http://www.piclist.com/techref/language/asp/vbs/vbscript/jsmthopenastextstream.htm http://msdn.microsoft.com/en-us/library/:それは本当のdocだかどうかを見つけるために、JavaScriptを使用してバイト配列をチェックする:-) EDITかかわら興味深い証明するかもしれませんhwfw5c59%28V = VS.85%29.aspx

+0

から私達がこれを決めることができないサイズは適切なdocファイル – baviskarss

+0

です。だから、実際のdocファイルであるかどうかバイト配列を調べるのは面白いと言われています...古いdocファイルの最後に "Word.Document.8"のようなものがあります。 docxファイルは圧縮されたxmlであり、ノードを定義する "word /"テキストが時折あります...しかし、今日のほとんどのブラウザではActiveXがデフォルトでブロックされていますので、ファイルをアップロードしてディスクに保存する前にサーバ上のバイトを確認することをおすすめします。 – Elementenfresser

1

OPはコメントでそれを書いたので:あなたは、検証が常にサーバ側で起こるはず、ここで間違って軌道に乗っている

、あなたは追加の検証を追加することができますクライアント側では必要ですが、必須ではありません。単純な理由でこれを行う必要があります。

クライアントは、クライアントが完全に制御できるため、クライアント側の検証メソッドを回避することができます。したがって、たとえあなたの検証方法を実装してドキュメントやExcelドキュメントをチェックしても、悪意のあるユーザーは常に妥当性検査を無効にして投稿要求を送信するだけで、Excelのドキュメントやウイルスなどを入手できます。

これは、Webプログラミングの基本原則です。入力データを信用しないと、クライアントでのみ検証することはできません!

第2に、検証はサーバー上で簡単に実行できます。したがって、ファイルをアップロードして(ファイル拡張子が&であることを確認してください)、サーバーで検証してください。

関連する問題