1

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

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

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

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

4

3 回答 3

1

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

但这当然取决于您将要对数据做什么以及 PHP 将为此消耗多少内存。极端地说,甚至可以创建一个示例脚本,以 1 字节输入达到内存限制。因此,您必须为您的应用程序找到合适的值。

文档

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

于 2013-03-07T01:39:39.397 回答
1

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

有关详细信息,请参见此处:http: //php.net/manual/en/ini.core.php#ini.sect.file-uploads

(ps 在 HTML 表单中设置 maxlength 很容易被恶意用户绕过)

于 2013-03-07T01:39:46.977 回答
0

将客户端上的数据分割成部分,通过Ajax分块下载,然后将下载的部分保存到磁盘或数据库中。也许这样?

于 2013-03-07T01:41:52.927 回答