来源"所需选项" ..."不见了。"错误信息

时间:2015-07-20 20:54:42

标签: php forms symfony

我有一个Symfony2网站,其中有十几个表单字段,访问者可以从中选择一个城市。表单通过表单选项city_src获取可用城市列表。

大约一个星期前,我们上网了,如果一切顺利,我很好奇,所以我tail - 编辑prod.log找到任何异常情况。事实证明我有两个CRITICAL错误:

  

"所需选项" city_src"不见了。" at /var/www/hb/vendor/symfony/symfony/src/Symfony/Component/OptionsResolver/OptionsResolver.php line 764 {" exception":" [object](Symfony \ Component \ OptionsResolver \ Exception \ MissingOptionsException(code:0):缺少必需的选项\" city_src \"在/ var / www / hb / vendor / symfony / symfony / src / Symfony / Component / OptionsResolver / OptionsResolver .php:764)"} []

我已经开始查看使用city_src选项的所有表单,到目前为止它看起来都很不错。

很少注意到:

  • 我的实验窗口有点受限,因为这是一个实时网站。
  • 问题本身是不言自明的,我只是不知道它来自哪里

问题,有没有办法增加此消息的详细程度(以备将来发生)?也许某种程度上包括完整的堆栈跟踪?

1 个答案:

答案 0 :(得分:2)

问题可能不是“真实的”。即使所有表单都没有问题,您的提交仍然缺少city_src,但还有其他一些方法可以实现:

  • 表单通过Javascript填充,一些客户已将其禁用。提交的表单没有一些字段。
  • 连接打嗝而且数据包没有完全通过。我知道,我知道,TCP应该阻止这一点。通常 。我记得在某种程度上看到了几个SO问题(感谢代理,浏览器扩展以及毫无疑问的gremlins)它没有。
  • 表单通过GET(可能通过AJAX)提交,其中a size limitation。不太可能,但可能。
  • 最有可能:有数以万计的机器人会试图强制它们发生任何形式,看看是否有任何有趣的东西掉落 - 一个XSS开放,一些垃圾邮件,可能性发送垃圾邮件,可能是SQL注入漏洞的一些症状。随你。结果是形式的内部结构不会收集所有形式的垃圾和日志。

攻击情景的详细信息:

Joe Q. Bot到达包含表单的给定页面。表格是完整的,当然还有所有领域。在正常的事件过程中,所有字段都将提交给服务器。浏览器会这样做。

但僵尸程序不是浏览器;使用其创建者使用的任何逻辑,它可以尝试按提交形式,或者可以尝试使用它来获取信息或导致错误。

例如,对于用于在数据库中构建INSERT以抛出错误并泄漏有关所述数据库的信息的不完整表单(例如,数据库服务器的地址,例如,可能是在Amazon Elastic上),并非闻所未闻并且没有得到足够的保护 - 谁会猜测我们的IP ?)。

然后,由于机器人通常处于软件工程的蹩脚一面,它可能无法处理超过“足够”的字段,因此只提交长格式的前半部分。或者由于多种原因,它可能无法正确解析表单本身。

结果是应该的字段实际上不存在,并且在分析请求时代码会窒息。

一个简单的解决方法是,只要您确定没有正常和诚实获取损坏表单的方法,请将整个过程包装在try / catch块中并私下发送任何异常收件箱。

===

在这种特定情况下,我会尝试检查网络服务器日志,以便在错误弹出之前查看已拨打的电话(例如 GET / site / customers / app / whatever ) 。然后,您可以尝试重播这些调用,并查看是否再次弹出错误。然后,您将更清楚地了解呼叫所采用的路线。

您可能还希望自己提供不完整的表单以查看这些表单是否引发相同的错误,以及如何将响应路由回有意义的内容(“存在提交错误,请重试”或阻止传入机器人通过将其IP地址发送到DMZ端的iptables脚本或防火墙实用程序Web服务来发送)