2012-08-24 43 views
2

我有一個鏈接指向可下載文件的網頁。例如:如何屏蔽某個類型的文件/響應的URL?

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指向到第一個鏈接中的文件?或者相反,過濾出不適合的網址?

+0

@NewAlexandria接受你的編輯。 –

+0

還有什麼困惑嗎? –

+0

一切都很好。我有一些代碼,可以做下載,並納入建議,以過濾文件:) –

回答

2

與你編輯的問題展望:如果你想篩選出的文件,

屏幕Content-Type頭。

Here is an informal list of common mime-types

您可以檢查響應頭,以確定是否響應將符合,例如到application/pdf但是你不能僅僅從URL/URI本身做出這個決定。

實際上,我可以構建一個web應用程序,它將響應URL http://myapp.com/test.pdf,標題爲Content-Type: image/jpeg和JPG數據。

另外,我真的可以通過發送標頭Content-Type: image/jpeg的數據PDF來解決問題。


假定它沒有故意破裂(就像我上面提到的那樣),那麼你可以依靠這個迴應。

請注意如果內容本身偏離Content-Type標題,那麼您可能會發生漏洞利用。這就是iPhone越獄的原因:通過處理格式不正確的PDF數據。

+0

感謝您的編輯。問題已更新。是的,問題應該是關於下載文件和篩選出網頁。 Content-Type是最好的可能嗎?從你所說的看來,它可以被操縱。 –

+0

另外,如果主機支持它並在下載後運行魔術字節檢查,我可以檢查文件大小。你怎麼看 ? –

+0

漏洞利用實際上與錯誤的內容類型無關,而是與內容類型的處理程序的漏洞有關。 – Bruno

1

尋找一個類似文件名的參數?

任何 URL可能迴應與請求時的文件。

除非您請求,否則您無法知道URL將如何迴應。

+0

它不總是用文件迴應嗎?一個HTML頁面也是一個文件 – Hashmush

+0

我感覺到答案會朝這個方向發展。讓我重新說一下。我怎樣才能下載PDF,TXT,DOC ......並過濾掉PHP,HTML和ASP? –

+0

@Hashmush不,它可以用動態構造的字節流,來自數據庫的數據,任何東西來響應。 –

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();