这个JSON代码安全吗?

时间:2017-04-09 19:05:19

标签: php json security

我有这个代码检查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美元的商品吗?

谢谢

2 个答案:

答案 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。