0

私は、ユーザーが友人からファイルを受信できるインスタント メッセージング アプリに取り組んでいます。

受信したファイルの名前はファイルの送信者によって設定され、複数のファイルをサブディレクトリの可能性とともに一緒に送信できます。たとえば、一緒に送信された 2 つのファイルが「1」と「sub/2」である場合、ダウンロード結果は「downloads/1」と「downloads/sub/2」のようになります。

これによるセキュリティへの影響が心配です。私の頭のすぐ上にある 2 つの潜在的に危険なファイル名は、「../../../somethingNasty」または「~/somethingNasty」のような Unix ライクなユーザー向けです。私の頭をよぎる他の潜在的な問題は、ターゲットファイルシステムでサポートされていない文字を含むファイル名ですが、それははるかに難しいようで、無視したほうがよいのでしょうか?

受け取ったファイル名から「..」と「~」を削除することを検討していますが、問題のケースを個別に考えるこの種のブラックリスト アプローチは、優れたセキュリティのレシピとは思えません。ファイル名をサニタイズして不吉なことが起こらないようにするための推奨される方法は何ですか?

違いがある場合、私のアプリは QT フレームワークを使用して C++ で実行されています。

4

1 に答える 1

0

「..」を「XXX」に、〜を「YYY」に置き換える方が賢明です。このようにして、無効なパスを完全に有効なパスに変換します。つまり、ユーザーが「../../../somethingNasty」をアップロードしたい場合は、問題ありません。ファイルをアップロードして、XXX / XXX / XXX/somethingNastyに保存します。

または、さらに良いことに、すべての非英数字(スラッシュを除く)を%XYでエンコードできます。ここで、XYは文字の16進コードです。このようにすると、%2E%2E /%2E%2E /%2E%2E/SomethingNastyになります。

于 2010-10-07T06:54:21.510 に答える