【问题标题】:Is php://input secure? If not, how to secure it?php://input 安全吗?如果没有,如何保护它?
【发布时间】:2017-11-18 05:36:53
【问题描述】:

我最近观看了有关 Facebook Messenger Bot 的视频教程。要从使用我的 messenger 机器人的用户那里获取消息,facebook 使用 php://input 将原始 json 发送到我的服务器,然后我的服务器将它们作为回复消息发送回 facebook。 Facebook 没有使用任何参数将用户消息转发到我的服务器。我只是害怕有人使用我的 Messenger bot 攻击或收集有关我服务器的信息。

Mr.Tutorial 使用的示例代码:

file_put_contents("fb.txt", file_get_contents("php://input"));

这是视频:https://www.youtube.com/watch?v=E2KOqRceipM

【问题讨论】:

  • 为什么不经过任何清理就将用户输入作为文件保存在服务器上?
  • 哦,看看 json 对象。顺便说一句,那不是我的代码
  • 如果它只是一个文本文件,当用户访问它的 url 时会下载它,它会相对更安全,但如果你的服务器以某种方式执行该文件中的任何可能的代码怎么办?如果没有任何检查,我永远不会在服务器上保存用户输入
  • 文本文件没有做任何事情,它只是保存 facebook 发送的内容。文本文件不能执行代码吗?恐怕当用户使用我的机器人发送 RCE 时,服务器会从 facebook 获取 json,并且服务器会读取 json 对象中的代码,该代码可以远程访问我的服务器。如何预防?
  • 所有你需要做的就是阅读文档。 developers.facebook.com/docs/messenger-platform/…

标签: php facebook facebook-messenger-bot


【解决方案1】:

php://input 并不比您的电话安全。如果你拿起电话,有人告诉你烧掉你的房子,你会烧掉你的房子吗?应该不会吧。

如果您执行exec(php://input)(伪代码)之类的操作,您将度过糟糕的一天。相反,如果您只是读取输入流并正确处理您获取的数据,那就没问题了。

输入流本身并没有什么安全或不安全的地方。重要的是你用它做什么。

【讨论】:

  • 如果输入是“exec(code())”怎么办?是否还在执行代码?
  • @KevinBradley exec exec 会怎样?不,当然不是,这不会自行发生。这将是 PHP 中的一个主要安全问题,使其对 Web 应用程序完全无用。
  • 不,不是 exec(exec(system('id'))) ,这太荒谬了。那么,离开纯php://input 是否安全?
  • @KevinBradley php://input 本身并没有什么特别不安全的地方......重要的是你用它做什么。
  • @KevinBradley 这实际上是一回事......在命令上下文中使用的数据。如果数据没有被转义/转换/转换或以其他方式保存在其数据上下文中,那么您就有问题了。但同样,这与php://input 本身无关。
猜你喜欢
  • 2011-06-12
  • 2018-07-26
  • 1970-01-01
  • 2016-09-22
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多