我正在編寫一個工具,即在任何URL的情況下,它都會定期獲取其輸出。問題在於輸出可能不是一個簡單輕量級的HTML頁面(大多數情況下預期),而是一些沉重的數據流(即直接來自/ dev/urandom,可能的DoS攻擊)。Java輸入流限制:防範DoS攻擊
我正在使用java.net.URL
+ java.net.URLConnection
,將連接和讀取超時設置爲30秒。當前輸入正在被java.io.BufferedReader
讀取,使用readLine()
。
可能的解決方案:
- 使用
java.io.BufferedReader.read()
逐字節,其中計數和關閉限制後連接已經達到。問題是攻擊者可能每29秒傳輸一個字節,以致讀取/連接超時幾乎不會發生(204800B * 29sec = 68天) - 將線程執行限制爲1-5分鐘並使用
java.io.BufferedReader.readLine()
。這裏有什麼問題?
我覺得想重新發明輪子,解決方案非常簡單,只是不會出現在我的腦海。
在此先感謝。
寫入LimitedInputStream使用overriden read()方法擴展FilterInputStream,當達到限制時返回-1(假輸入流結束)。謝謝! – ljank 2010-09-03 07:07:24