为什么在Perl中使用JSON对象通过POST传递数据而不是查询字符串?
我希望使用Stripe.pm运行一个脚本,基本上希望进行信用卡处理。信用卡号码根本没有通过。我看到的所有示例都使用POST调用中传递的JSON对象,但我有很多使用查询字符串的经验为什么在Perl中使用JSON对象通过POST传递数据而不是查询字符串?,json,perl,post,cgi-bin,Json,Perl,Post,Cgi Bin,我希望使用Stripe.pm运行一个脚本,基本上希望进行信用卡处理。信用卡号码根本没有通过。我看到的所有示例都使用POST调用中传递的JSON对象,但我有很多使用查询字符串的经验 http://www.example.com/cgi-bin/processingscript.pl?param1=XXXX¶m2=YYYYY¶m3=ZZZZZ 这是安全风险吗?与我习惯使用的查询字符串相比,使用JSON发布有什么优点或缺点 安全 -确保用户/服务器以外的任何人都不知
http://www.example.com/cgi-bin/processingscript.pl?param1=XXXX¶m2=YYYYY¶m3=ZZZZZ
这是安全风险吗?与我习惯使用的查询字符串相比,使用JSON发布有什么优点或缺点 安全
-确保用户/服务器以外的任何人都不知道数据获取/发布没有影响。使用SSL来确保这一点。
-停止用户向脚本传递“有趣”的参数。POST具有一定的隐蔽性,因为大多数用户看不到参数,但它不是真正的安全性。您应该检查应用程序中的参数以涵盖这一点
一般来说,使用漂亮的数据包(如JSON)发布有助于实现更灵活、更可维护的应用程序界面,其优点是您不必像使用GET时那样担心参数的编码和长度。POST:
- 重要数据通常更安全
- url中未显示参数
- 与使用GET相比,您可以传递更长的字符串结构(例如JSON),GET对您发送的参数具有长度限制
GET foo.pl?json={'foo':'bar'}
在这种情况下,对数据进行url编码是有意义的。您也可以使用POST发送相同的请求
如果您根本不想使用查询参数,则需要POST并将JSON放入请求体中。根据您选择的选项,在Perl中如何处理它存在差异。假设您正在使用CGI模块。。。Perl对POST和GET参数没有区别
对于查询字符串GET或POST,需要执行以下操作:
use CGI;
my $cgi = CGI->new;
my $json = $cgi->param('json');
use CGI;
my $cgi = CGI->new;
$cgi->param('POSTDATA');
如果将有效负载直接放入请求主体,则需要执行以下操作:
use CGI;
my $cgi = CGI->new;
my $json = $cgi->param('json');
use CGI;
my $cgi = CGI->new;
$cgi->param('POSTDATA');
这在CGI中记录在下
对于JSON,当然还有解析它所需的时间,但这应该可以忽略不计
与内部没有JSON的查询字符串相比,JSON的优势在于,您可以在JSON内部编码任意复杂的数据结构,而纯文本查询字符串只有一层深度
从安全的角度来看,几乎所有的话都说了。我将重述我自己的想法:
- 使用SSL
- 不要将敏感内容放入日志文件中
- 如果您正在处理CC数据(即使不是数字本身),请格外小心;在传输过程中读取并加密内容
- 永远不要存储cvc李>
- 如果您想了解有关该主题的更多信息,有一个名为的堆栈交换站点
SSL
,然后考虑GET vs POST。