2016-01-27 63 views
1

我有一個textarea在我的一個Rails窗體中接受來自用戶的自由格式輸入。如何處理Rails表單中的惡意大輸入textarea

客戶端,我可以在表單上設置一個maxlength: 500以防止某人惡意粘貼過長的輸入。

服務器端,我該如何實現這個相同的安全措施?有人可以繞過我的形式,禁用該屬性或POST直接到我的終端與一個textarea參數非常長。我假設這樣的攻擊會導致我的服務器嘗試解析大文本。

我總是可以在我的控制器中檢查長度(例如if params[:input].length < 500...),但到那個時候params[]已經設置並且必須解析該輸入。

Rails是否負責這種類型的攻擊?或者有什麼我可以/應該做的?

謝謝!

回答

2

您可以簡單地添加模型驗證,假設您通過活動記錄存儲了您的值。如果長度超過長度

validates_length_of :input, :minimum => 5, :maximum => 500, :allow_blank => true

服務器將拒絕。或者,您可以在發佈檢查textarea長度的表單前應用JavaScript,讓我知道您是否需要進一步的幫助或解釋。

+0

感謝您的迴應!我同意我可以實施模型驗證。然而,控制器甚至在嘗試將其保存到模型/數據庫之前接收並處理該請求。當控制器嘗試處理它時,真的很大的文本字符串可能會超出可用內存,對嗎?這更像是一個邊緣情況,但我只關心Rails如何開始處理這個(潛在的)安全漏洞。 – user2490003

+0

在這種情況下,只需在textarea輸入端添加一個最大長度限制。http://www.w3schools.com/標籤/ att_textarea_maxlength.asp –

+1

爲此簡單添加一個before過濾器並拒絕來自控制器級別的請求。您也可以在請求觸及機架堆棧時訪問,但您需要深入挖掘。 –

1

讓我們先把常識和自然規律放在第一位。我認爲你最好不要擔心這一點,因爲用戶發送ENOGH數據來減慢你的應用服務器,他們將不得不等待很長時間才能上傳這些數據(實際上到達你的服務器)。因此,如果他們設法發送一些500gig,那麼Web服務器可能不會接受它/錯誤輸出/進程將會死亡並重新啓動。所以我更關心1000個用戶同時發送小塊數據,比如說每個連接每秒1兆字節......這將導致Web服務器產生額外的進程並耗盡RAM/CPU,所以它將成爲更有效的攻擊,而不是一次性發送大塊。

但是,如果您覺得您的應用程序有可能會遭受這種惡意用戶/ DoS攻擊,那麼我建議您查看Cloudflare計劃。