gpt4 book ai didi

php - PayPal PHP IPN 示例指的是哪些 POST 序列化问题?

转载 作者:行者123 更新时间:2023-12-02 03:21:45 26 4
gpt4 key购买 nike

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]);
}

有人可以解释一下此评论所指的序列化问题吗?虽然我可以这样做,但如果知道为什么应该这样做,我会感到更舒服。

最佳答案

我无法告诉你 paypals 的动机,但我可以猜测:php 喜欢更改来自 http 请求的传入变量的键。

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

此外,php 会将变量名称中格式良好的匹配括号解析为嵌套数组。例如,arr[a][b] 将显示为 $_POST['arr']['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 设置,有些人喜欢将其设置为 & 而不仅仅是 &。 Paypal 无法知道您更喜欢哪个,并且在制作要请求的 url 和/或帖子正文时显然总是使用 & ,导致您的 php 引擎解析错误的参数。 http://php.net/manual/en/ini.core.php#ini.arg-separator.input

此外,尽管这是不好的做法,但在 php 中,代码/库自动修改请求输入(例如 $_POST)的情况并不少见,例如 xss“清理”它们或其他此类横切的担忧。 $_POST 是一个可写/可修改的变量,而 php://input 是只读的,因此保证它不会被库弄乱。

通过手动解析输入,您可以避免所有这些潜在问题。对于他们来说,这个决定似乎是一项很好的工程。

关于php - PayPal PHP IPN 示例指的是哪些 POST 序列化问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com