从_Request、_Post和_Get修剪空格的缺点


Drawbacks of trimming spaces from _Request, _Post, and _Get?

问题

我在一个相当大的平台上遇到了一个问题,用户可以在输入的开头和结尾输入包含空格的数据。这会引发问题。我知道我可以修改JavaScript验证,但这个网站有大量的页面和表单。发现并改变每一个事件都将是一场噩梦。

变通办法

由于所有的表单和页面都共享index.php,所以我想到了在平台处理任何控制器/路由处理之前拦截request/get/post变量的想法。

注意:我知道这是一种非常廉价的方式。但必须立即采取行动,直到我至少能以正确的方式做这件事。这一切都很正常。我只是有几个担心。

$_REQUEST   = array_map('trim',$_REQUEST);
$_GET       = array_map('trim',$_GET);
$_POST  = array_map('trim',$_POST);

Conerns

  1. 是否有任何实际的合法场景中会出现此代码错误?

  2. 是否有重大的表演冲击?

  3. 是否存在任何安全缺陷?

  4. trim()是否存在破坏数据完整性的风险?

  1. 我想不出有什么了。修剪将简单地修剪字符串的前导空格和尾部空格。但是,它在嵌套数组上会失败
  2. 这当然会影响性能,但没什么大不了的。但是,请注意,即使没有发布数据,这也会在每个index.php调用上运行
  3. 修剪不会造成安全缺陷。如果您在格式化数据的后一页中验证和清除用户输入,那么不应该有任何输入
  4. 如果没有进一步的知识,我无法回答这个问题

如果这只是一个临时的解决方法,那么它就能完成任务。但我不会永远这样做,我建议你尽可能一块一块地解决它。

好吧,这是危险,我不建议这样做。

原因如下:

如果任何页面上都有表单,并且这些表单包含密码字段,则用户可能选择了以空格开头或结尾的密码(是的,空格在密码中是绝对可以的,因为无论如何都要加密密码)

所以问题是:

从现在起,当您修剪所有前导和结尾空格时,已经使用该密码登录的用户将无法再登录(因为每次他试图提交有效密码(以空格开头或结尾)时,您的方法都会删除这些空格。尽管他需要这些空间才能登录)。

此外,试图使用以空格开头或结尾的密码创建新帐户的新用户将永远无法登录。因为他甚至不知道自己的密码被修改了。

所以说实话:小心这样的事情