我有这个代码来检查json是否有效,如果有效,json中的每个对象都会被计算为1美元(我网站上的货币)。以下是代码
<?php
if(isset($_POST['data'])) {
$testJson = json_decode($_POST['data']);
if($testJson) {
$price = 0;
foreach($testJson as $amount)
// I do something with $amount...
$price++; // Augment the price
}
}
}所以基本上,如果$_POST['data']是[{"item":2,"id":1092,"x":198,"y":-1}],那么价格将是1美元。如果它是[{"item":2,"id":1092,"x":198,"y":-1},{"item":2,"id":1098,"x":198,"y":-1}],价格将是2,等等…
我的问题是,有人可以操纵JSON,这样即使JSON字符串中有多个对象,他们也可以0美元购买一件商品吗?
谢谢
发布于 2017-04-10 03:12:25
如果您阅读OWASP top 10,就会发现此代码容易受到CSRF的攻击。我还将密切关注SQL注入,因为这在PHP中很常见,因为许多应用程序都不使用ORM。
发布于 2017-04-10 03:21:52
JSON代码本身是安全的(它只是一个字符串)。但是您需要验证/清理从$_POST变量中检索到的任何。
如果您希望将数据保存在mysql数据库中,则还应使用准备好的语句(http://php.net/manual/en/pdo.prepared-statements.php)对其进行清理,以防止sql注入。注意: mysql_real_escape_string不提供任何安全性,它只转义字符串中的字符。
如果您希望在任何时候输出从网站中的$_POST检索到的数据,您也应该避开它(以确保您不会被跨站点脚本攻击捕获)。
我还建议在应用任何逻辑之前根据JSONschema验证JSON。
https://stackoverflow.com/questions/43310725
复制相似问题