Json注入

一、Json简介

JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、更快,更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 "application/json"。

json语法

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)  {"age":30 }
  • 字符串(在双引号中)  {"uname":"yang"}
  • 逻辑值(true 或 false) {"flag":true }
  • 数组(在中括号中){"sites":[{"name":"yang"},{"name":"ming"}]}
  • 对象(在大括号中)JSON 对象在大括号({})中书写:
  • null    { "runoob":null }

Json-demo:


  
   
   
  1. {
  2. "users": {
  3. "user": [
  4. {
  5. "id": "1",
  6. "username": "admin",
  7. "passwd": "admin888"
  8. },
  9. {
  10. "id": "2",
  11. "username": "root",
  12. "passwd": "root123"
  13. },
  14. {
  15. "id": "3",
  16. "username": "system",
  17. "passwd": "system456"
  18. }
  19. ]
  20. }
  21. }

二、JSON注入

和xml注入一样,只是数据表现形式不同而已。


  
   
   
  1. <?php
  2. header( 'content-type:text/html;charset=utf-8');
  3. if( isset($_POST[ 'json'])){
  4. $json_str=$_POST[ 'json'];
  5. $json=json_decode($json_str);
  6. if(!$json){
  7. die( 'JSON文档格式有误,请检查');
  8. }
  9. $username=$json->username;
  10. //$passwd=$json->passwd;
  11. $mysqli= new mysqli();
  12. $mysqli->connect( 'localhost', 'root', 'root');
  13. if($mysqli->connect_errno){
  14. die( '数据库连接失败:'.$mysqli->connect_error);
  15. }
  16. $mysqli->select_db( 'user');
  17. if($mysqli->errno){
  18. dir( '打开数据库失败:'.$mysqli->error);
  19. }
  20. $mysqli->set_charset( 'utf-8');
  21. $sql= "SELECT username,paawd FROM users WHERE username='{$username}'";
  22. $result=$mysqli->query($sql);
  23. if(!$result){
  24. die( '执行SQL语句失败:'.$mysqli->error);
  25. } else if($result->num_rows== 0){
  26. die( '查询结果为空');
  27. } else {
  28. $array1=$result->fetch_all(MYSQLI_ASSOC);
  29. echo "用户名:{$array1[0]['username']},密码:{$array1[0]['paawd']}";
  30. }
  31. $result->free();
  32. $mysqli->close();
  33. }
  34. ?>

和SQL注入一样,插入注入语句。但要注意一点是对影响json语句的要进行转义,如双引号、花括号等。

猜你喜欢

转载自blog.csdn.net/weixin_44110913/article/details/109513243