幾年前,在我瞭解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是一個醜陋的黑客事實,那真的很危險嗎?
我會一再承認這是一個醜陋的臨時修復,但我的問題是關於有一個「隱藏」頁面,它返回的內容不會讓服務器執行某些操作。那有多可怕?
關於使緩存無效,您提出了一個非常好的觀點。您可能會發送虛擬參數,並且可能會浪費大量資源,要求其他站點提供這些結果並進行存儲。不過,這不是他們提出的觀點。也許這是他們的意思,但我懷疑它。儘管如此,有關覆蓋緩存的言論讓你領先於目前的「正確答案」。 – eje211 2010-07-24 19:09:48
@eje211,提問者提到了這個問題:「我會一再承認這是一個醜陋的臨時修復,但我的問題是關於有一個」隱藏「頁面,它返回的內容不會讓服務器執行某些操作。就是它?」 – 2010-07-24 19:18:18
我很瞭解「提問者」,我試圖說你給了他一個有用的答案。我可能不清楚這一點。抱歉。 ;-)(同事們從來沒有提到關於重寫緩存的部分,你看,所以非常有效的一點令人驚訝......這就是我所說的。) – eje211 2010-07-24 19:48:37