用户可以将HTTP_RAW_POST_DATA发送到我的网站吗?

时间:2010-11-12 12:44:30

标签: php

一个愚蠢的问题,但我有点困惑。 我使用pubsubhubbub并使用if(isset($ _ HTTP_RAW_POST_DATA))检查新信息。 我检查用户是否已登录:

if(isset($_SESSION['user'])) {
 //logged
}

用户可以发送HTTP_RAW_POST_DATA吗?

3 个答案:

答案 0 :(得分:2)

因此,基本上任何向您的回调发送HTTP POST请求的人实际上都会发送$ HTTP_RAW_POST_DATA。许多语言和框架都有库将其解析为HTTP POST参数。 在PubSubHubbub的上下文中,正文不是由params构成的,所以你必须使用较低级别的$ HTTP_RAW_POST_DATA,因为解析XML作为params没有任何意义。

如果您尝试保护回调网址,则有多种方法可以执行此操作:

  • 使您的回调网址独一无二且无法猜测:例如,在您订阅的每个Feed的网址中使用唯一的内部标识符。
  • 使用http * s *订阅,并提供hub.secret。然后,集线器将使用此密钥来计算每个通知的唯一签名。您必须确保此签名与您获得的内容相匹配。 Read more about this here

答案 1 :(得分:1)

原始发布数据是用于提取可由$ _POST访问的POST参数的数据。用户还可以使用post发布未参数化的数据,是的。

答案 2 :(得分:0)

用户将始终将原始POST数据发送到您的脚本。然后PHP将解析它并填充$ _POST。从表单开始POST时,$ _POST等同于:

parse_str($HTTP_RAW_POST_DATA, $data);
var_dump($_POST);
var_dump($data); // yields the same as $_POST

但是,如果您真的想要获取原始POST数据,首选方法是:

$rawPost = file_get_contents('php://input');

...因为$ HTTP_RAW_POST_DATA依赖于always_populate_raw_post_data INI设置,也因为它不适用于 multipart / form-data 内容类型。