2

ダウンロード可能なファイルを指すリンクのあるWebページがあります。例えば:

http://www.mysite.com/download.php?FILE=downloads/programming/various/ebook.pdf

ただし、次のようなナビゲーションリンクを含めることもできます。

http://www.mysite.com/index.php

http://www.mysite.com/index.php?category=programming

http://www.mysite.com/index.php?section=programming&category=various

URLが最初のリンクのようにファイルを指しているかどうかを確認するにはどうすればよいですか?または逆に、適合しないURLを除外しますか?

4

3 に答える 3

2

編集した質問に進みます。ファイルを除外する場合は、

Content-Typeヘッダーを スクリーニングします。

一般的なmimeタイプの非公式リストは次のとおりです

応答ヘッダーを調べて、応答が準拠しているかどうかを判断できます。たとえばapplication/pdf 、URL / URI自体だけでは、この判断を行うことはできません。

実際、 JPGの http://myapp.com/test.pdfヘッダーとデータを使用してURLに応答するWebアプリケーションを構築できました。Content-Type: image/jpeg

また、 PDFContent-Type: image/jpeg用のヘッダーとデータを送信することで本当に物事を壊すことができました。


それが意図的に壊れていなかったと仮定すると(私が上で述べたように)、あなたは応答に頼ることができます。

コンテンツ自体がヘッダーから逸脱している場合Content-Typeは、エクスプロイトが発生する可能性があることに注意してください。これがiPhoneが脱獄された方法です:不正な形式のPDFデータに作用することによって。

于 2012-08-24T22:13:27.563 に答える
1

ファイル名のようなパラメータを探しますか?

要求された場合、どのURLもファイルで応答できます。

リクエストするまで、URLがどのように応答するかを知る方法はありません。

于 2012-08-24T22:13:56.800 に答える
1

HTTPでは、URLはファイルを指していません。それらはリソースを識別し、そのURLを「逆参照」する(つまり、GET要求を行う)ときに表現を取得します。

ユーザーエージェントがその表現をファイルとして保存することを選択するかどうかは、それ自身の選択です。表現をどうするかは、コンテンツタイプによって決まります。

HEADリクエストを使用してコンテンツタイプを取得できます。PDFドキュメントを使用する必要application/pdfがありますが、他にもいくつかの種類があります。application/octet-streamほとんどのブラウザは、デフォルトでファイルとして保存する傾向があります。(コンテンツタイプのネゴシエーションについても微妙な点があります。)

Javaでは、次のようなものを使用してHEADリクエストを行うことができます。

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("HEAD");
// Check connection.getContentType();
于 2012-08-24T22:23:56.217 に答える