2013-03-07 84 views
1

我得到一些變量與$ _POST,主要是由用戶在表單上輸入。 爲了防止在表單中插入巨大的值,我可以檢查這些變量,並在用戶需要時將錯誤返回給用戶。防止用戶輸入過大PHP「允許的內存大小」

但是,我不能這樣做,如果用戶輸入一個非常長的值,因爲在這種情況下,整個腳本崩潰之前,我甚至可以拒絕處理該變量。這是對我的服務器安全性的威脅嗎?

如何在不增加默認內存限制的情況下解決此問題?可能嗎?

用javascript限制用戶輸入可能是一個選項,但用戶可以通過禁用javascript來輕鬆克服該限制。

+0

輸入字段的MAXLENGTH參數如何? http://www.w3schools.com/tags/att_input_maxlength.asp – Zak 2013-03-07 01:37:03

+0

它怎麼能成爲一種享受,因爲腳本甚至沒有運行?如果人們在你的網站上這樣做,他們正在嘗試拒絕服務攻擊。 – 2013-03-07 01:40:12

+0

@Saturnix - 假設你可以從用戶那裏得到廢話。 – 2013-03-07 01:41:38

回答

1

您可以使用ini指令post_max_size來限制帖子正文的最大大小。但其默認值爲8M。如果沒有改變,應該可以,因爲默認memory_limit是128M。 (php 5.3)

但是,這當然取決於你將要處理的數據以及PHP將爲此消耗多少內存。在極端情況下,甚至可以創建一個示例腳本,以1字節輸入達到內存限制。所以你必須爲你的應用程序找到合適的價值。

documentation

集POST數據所允許的最大尺寸。該設置也會影響文件上傳。要上傳大文件,該值必須大於upload_max_filesize。如果配置腳本啓用了內存限制,memory_limit也會影響文件上傳。一般來說,memory_limit應該大於post_max_size。當使用整數時,該值以字節爲單位進行測量。如本FAQ中所述,速記符號也可以使用。如果發佈數據的大小大於post_max_size,則$ _POST和$ _FILES超全局變量是空的。這可以通過各種方式進行跟蹤,例如,通過將$ _GET變量傳遞給處理數據的腳本,即,然後檢查是否設置了$ _GET ['processed']。

0

客戶端上的數據分成部分和下載通過Ajax分成部分,然後將下載的部分保存在光盤或數據庫中。也許這樣?