2010-07-24 65 views
1

幾年前,在我瞭解Stack Overflow之前,我在一個辦公室工作,程序員之間有很多競爭。在那裏,我必須用Drupal編寫一個PHP網頁,這需要通過RSS從另一個站點獲取數據。發生的事情是沒有辦法事先獲取數據:數據取決於本身是動態頁面的內容,所以頁面停止加載幾秒鐘,而PHP去獲取RSS數據。那很糟糕。該頁面取決於大量列表中的幾個參數。所以拿出所有可能的組合都沒有問題。這是某種搜索頁面,包括一個姊妹網站的結果,我想。AJAX暴露了一個web應用程序的API

我做的第一件事就是建立一個緩存系統。加載頁面後,它啓動了一個Javascript方法,使用AJAX將RSS數據保存到此特定頁面的數據庫中。這意味着如果再次請求同一頁面,舊數據將立即發送。如果需要,AJAX腳本會使用新數據更新緩存。 Javascript幾乎用GET指令在當前頁面的參數上打開了一個隱藏頁面。只是幾天後,我意識到我可以在沒有AJAx的情況下緩存數據。 (相信我,後見之明更容易發現。)但這不是我所問的問題。

但我被告知不要做任何緩存。我被告知我的AJAX頁面「暴露了API」。惡意用戶可能一次又一次地觸擊隱藏頁面以進行拒絕服務攻擊。無論如何,我認爲我的AJAX是一個臨時解決方案,但是需要緩存。但主要是:不是網站上的任何頁面的DoS參數是真的?事實上,我的隱藏頁面沒有出現在菜單中,沒有返回任何內容會使情況變得更糟?

正如我所說過的,程序員之間有很多競爭,所以我周圍的人一致認爲他們可能是對的,或者他們可能試圖阻止我做一些不好的事情,因爲他們不是那些做的。 (它發生了很多。)但我仍然好奇。我完全知道我的AJAX是一個黑客攻擊。我想盡快改變這個系統,但我認爲沒有緩存更糟。這是真的嗎?不是,通過這個邏輯,所有的AJAX都暴露了API?如果我們看看我的AJAX是一個醜陋的黑客事實,那真的很危險嗎?

我會一再承認這是一個醜陋的臨時修復,但我的問題是關於有一個「隱藏」頁面,它返回的內容不會讓服務器執行某些操作。那有多可怕?

回答

0

如果我正確地閱讀你的帖子,好像AJAX請求版本的頁面會知道使緩存無效每一次?

如果是這樣的話,那麼我想你的同事可能會一直在說,隱藏的頁面都可能會受到的方式,完整頁面加載不是DDOS攻擊。 I.E.完整的頁面加載會在第一個頁面加載後獲得一個緩存版本,因爲AJAX版本每次都會得到新鮮的內容。如果是這樣的話,那麼他/他是對的。

通過「暴露API」,您的同事說您正在展示正在做的工作應該在後臺完成的網頁的網址。外部世界不應該知道一個URL,其唯一目的是完成一些繁重的任務。正如你所說,你發現後端解決方案並不需要用戶的瀏覽器知道你的工作進程。

是的,頁面依賴大量內容時根本沒有緩存,比使用頁面的ajax版本進行緩存更糟糕,但我認爲來自同事的警告是沒有頁面,即使是AJAX,應該有能力以你不期望或打算的方式打破緩存。

+0

關於使緩存無效,您提出了一個非常好的觀點。您可能會發送虛擬參數,並且可能會浪費大量資源,要求其他站點提供這些結果並進行存儲。不過,這不是他們提出的觀點。也許這是他們的意思,但我懷疑它。儘管如此,有關覆蓋緩存的言論讓你領先於目前的「正確答案」。 – eje211 2010-07-24 19:09:48

+0

@eje211,提問者提到了這個問題:「我會一再承認這是一個醜陋的臨時修復,但我的問題是關於有一個」隱藏「頁面,它返回的內容不會讓服務器執行某些操作。就是它?」 – 2010-07-24 19:18:18

+0

我很瞭解「提問者」,我試圖說你給了他一個有用的答案。我可能不清楚這一點。抱歉。 ;-)(同事們從來沒有提到關於重寫緩存的部分,你看,所以非常有效的一點令人驚訝......這就是我所說的。) – eje211 2010-07-24 19:48:37

0

這將是一個問題的唯一方法是說「隱藏頁沒有返回的內容,使服務器做一些」有不同的認證方案,或從其他頁面的權限管理,或者如果它作出的後端與發佈內容的網站上的任何其他頁面相比,這樣做會非常沉重。

1

雙方都是對的。是的,它確實暴露了api,但ajax請求首先只能訪問可公開訪問的文檔/腳本,所以,所有ajax請求都以同樣的方式「暴露」其目標腳本。 DoS攻擊不是特定於腳本的,它們是特定於服務器的,所以可以使用指向服務器的任何內容執行DoS,而不僅僅是您的ajax調用的此腳本。我會告訴你的好友他們的論點是微弱的,抓住吸管,不要嫉妒:P