阻止用户输入超大PHP“允许的内存大小”

时间:2013-03-07 01:35:15

标签: php

我正在使用$ _POST获取一些变量,主要由用户在表单上输入。 为了防止在表单中插入巨大的值,我可以检查这些变量并在用户长时间时向用户返回错误。

但是,如果用户输入一个非常长的值,我不能这样做,因为在这种情况下,整个脚本崩溃之前我甚至拒绝处理该变量。这是对我服务器安全性的威胁吗?

如何在不增加默认内存限制的情况下解决此问题?有可能吗?

使用javascript限制用户输入可能是一个选项,但用户可以通过禁用javascript轻松克服该限制。

3 个答案:

答案 0 :(得分:1)

您可以使用ini指令post_max_size限制帖子正文的最大大小。但是默认为8M。如果它没有改变,它应该没问题,因为默认memory_limit是128M。 (php 5.3)

但当然这取决于你将要处理的数据以及PHP将为此消耗多少内存。在极端情况下,甚至可以使用1字节输入创建一个达到内存限制的示例脚本。因此,您必须为您的应用找到合适的值。

来自documentation

  

设置允许的帖子数据的最大大小。此设置也会影响文件上载。要上传大文件,此值必须大于upload_max_filesize。如果配置脚本启用了内存限制,则memory_limit也会影响文件上载。一般来说,memory_limit应该大于post_max_size。使用整数时,该值以字节为单位。也可以使用本FAQ中描述的速记符号。如果发布数据的大小大于post_max_size,则$ _POST和$ _FILES超全局变量为空。这可以以各种方式跟踪,例如,通过将$ _GET变量传递给处理数据的脚本,即检查是否设置了$ _GET ['processed']。

答案 1 :(得分:1)

你有权访问php.ini吗?您可以设置upload_max_filesize / post_max_size

详情请见此处:http://php.net/manual/en/ini.core.php#ini.sect.file-uploads

(p.s。设置HTML表单中的maxlength很容易被恶意用户规避)

答案 2 :(得分:0)

将客户端上的数据划分为多个部分,并通过Ajax部分下载,然后将下载的部分保存在光盘或数据库中。也许这样?