我有这个代码检查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美元的商品吗?
谢谢
答案 0 :(得分:1)
如果您阅读OWASP top 10,则可以看到此代码容易受到CSRF的攻击。我也会密切关注SQL注入,因为这在PHP中很常见,因为很多应用程序都不使用ORM。
答案 1 :(得分:1)
JSON代码本身是安全的(它只是一个字符串)。但是您需要验证/清理从$ _POST变量中检索到的任何。
如果要将数据保存在mysql数据库中,还应该使用预准备语句(http://php.net/manual/en/pdo.prepared-statements.php)对其进行清理,以防止sql注入。注意:mysql_real_escape_string不提供任何安全性,它只是转义字符串中的字符。
如果您希望在任何时候输出从网站上的$ _POST中检索到的数据,您也应该将其转义(以确保您不会受到跨站点脚本攻击的影响)。
我还建议在应用任何逻辑之前针对JSONschema验证JSON。