3

簡単なHTMLフォームがあります

<form id="uploadForm" method="post" action="/cgi-bin/test.cgi" enctype="multipart/form-data">
   <input type="submit" name="add_something" value="add">
   <input size="50" type="file" name="myFile" accept="application/zip">
</form>

さらに、ユーザーのブラウザーロケールを確認するか、自己設定された言語セッションCookieを検索することにより、サーバー側でWebページのローカリゼーションを行います。

でファイルをアップロードした場合

  • 鉄18.0.1050.0
  • Opera 11.64.1403
  • Firefox 3.6.27
  • Firefox 12.0
  • Google Chrome 19.0.1084.52
  • SeaMonkey 2.9.1

すべて正常に動作します。しかし、私がファイルをアップロードした場合

  • IE 9.0.8112.16421
  • マックストン3.3.8.3000

ローカリゼーションは失敗します。HTTPリクエスト内で問題を検出しました:

Opera 11

Content-Disposition: form-data; name="myFile"; filename="ziptest.zip"
Content-Type: application/zip

およびIE9

Content-Disposition: form-data; name="myFile"; filename="C:\Documents and Settings\m1krsch\Documents\Now Some Spaces\ziptest.zip"
Content-Type: application/x-zip-compressed

パスからスペースを削除すると、IEとMaxtonですべて正常に機能します。

プロジェクトの固定部分であるため、使用済みのcgiccライブラリを交換したり、スペースのないパスをユーザーに使用させたりすることはできません。この問題を回避するにはどうすればよいですか?IE / Maxtonに絶対ファイルパスの代わりにファイル名を使用させる方法はありますか?または、cgi / envに特定のパラメーターを設定して、絶対ファイルパスの送信を防ぐことはできますか?

[編集]これはIEとMaxtonのセキュリティの問題であることがわかりました。IEのセキュリティゾーンモデルでは、デフォルトで「ファイルのアップロード時にローカルディレクトリパスを含める」ことが許可されています。クライアント構成を変更することによってのみこの動作を禁止できますが、それでもアプリケーションベースのソリューションを探しています。[/編集]

4

2 に答える 2

0

ローカリゼーションコードに愚かなエラーが見つかりました。これにはRapidXMLを使用しており、ローカリゼーションコード全体とRapidXMLヘッダーを1つのクラスにカプセル化します。残念ながら、私はドキュメントを注意深く読んでいませんでした。XMLドキュメントデータを保持しているオブジェクト内のデータは、期待どおりにメソッドを使用しvector<char>てXMLドキュメントオブジェクトにコピーされません。これは私には手続き型Cコードのように見え、私の意見では悪いOODです。ドキュメントには次のように書かれています。xml_document<>parse()

3.1ソーステキストの寿命

In-situ解析では、ソーステキストが少なくともドキュメントオブジェクトと同じ長さである必要があります。

vector<char>ローカリゼーションクラス内にグローバルオブジェクトを取得するようにコードを修正すると、問題は解消されました。

それにもかかわらず、他のほとんどすべてのブラウザが私の古いコードに問題がない理由に私は困惑しています。

于 2012-06-05T20:49:06.083 に答える
0

'%20'スペースを:に置き換えてみてください

"C:\Documents%20and%20Settings\m1krsch\Documents\Now%20Some%20Spaces\ziptest.zip"
于 2012-05-31T18:13:50.987 に答える