PayPal PHP IPN示例是什么POST序列化问题?

前端之家收集整理的这篇文章主要介绍了PayPal PHP IPN示例是什么POST序列化问题?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PayPal的 PHP IPN侦听器的示例代码在顶部有这个注释/代码
// reading posted data from directly from $_POST causes serialization 
// issues with array data in POST
// reading raw POST data from input stream instead. 
$raw_post_data = file_get_contents('PHP://input');
$raw_post_array = explode('&',$raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=',$keyval);
  if (count($keyval) == 2)
     $myPost[$keyval[0]] = urldecode($keyval[1]);
}

有人可以解释这个评论引用的序列化问题吗?虽然我可以这样做,我会觉得更加舒服,知道为什么应该这样做.

我不能告诉你支付宝的动机,但我可以猜测:PHP喜欢从http请求更改输入变量的键.

例如,名称a.b [将显示为$_POST [‘a_b__’]. PHP将用下划线替换空格,圆点和打开括号:
来源:http://php.net/manual/en/language.variables.external.php

此外,PHP将解析出形成匹配的变量名称中的匹配括号到嵌套数组中.例如,arr [a] [b]将显示为$_POST [‘a’] [‘b’].
http://php.net/manual/en/faq.html.php#faq.html.arrays

此外,当括号不正确时,PHP表现为各种疯狂和越野车:
https://bugs.php.net/bug.php?id=48597

此外,magic_quotes_gpc用于将其爪子安装到每个PHP安装中,在某些情况下更改变量的名称. http://php.net/manual/en/security.magicquotes.php

此外,PHP具有arg_seperator.input设置,有些人喜欢将其设置为& amp; amp; amp;而不是只是&贝宝不知道你喜欢什么,显然总是使用&
http://php.net/manual/en/ini.core.php#ini.arg-separator.input

另外,尽管做错了,但在PHP代码/库中自动修改诸如$_POST的请求输入,例如xss“清理”它们或其他这样的交叉问题并不常见.

通过手动解析输入,您可以避免所有潜在的问题.这个决定看起来好像是很好的工程.

猜你在找的PHP相关文章