Jsonインジェクション

1.Jsonの概要

JSONは、テキスト情報を格納および交換するための文法であり、軽量のテキストデータ交換形式です。xmlに似ていますが、JSONはXMLよりも小さく、高速で、解析が簡単です。そのため、インターフェイスデータの送信はjsonモードで実行されます。JSONテキストのMIMEタイプは「application / json」です。

json構文

  • データは名前と値のペアになっています
  • データはコンマで区切られます
  • 中括弧はオブジェクトを保存します
  • ブラケットは配列を保存します

JSON値

JSON値は次のようになります。

  • 数値(整数または浮動小数点){"年齢":30}
  • 文字列(二重引用符で囲みます){"uname": "yang"}
  • 論理値(trueまたはfalse){"flag":true}
  • 配列(角括弧内){"sites":[{"name": "yang"}、{"name": "ming"}]}
  • オブジェクト(中括弧内)JSONオブジェクトは中括弧({})で記述されます。
  • null {"runoob":null}

Json-デモ:


  
   
   
  1. {{
  2. 「ユーザー」 :{
  3. 「ユーザー」 :[
  4. {{
  5. "id" "1"
  6. "ユーザー名" "管理者"
  7. "passwd" "admin888"
  8. }、
  9. {{
  10. "id" "2"
  11. "ユーザー名" "root"
  12. "passwd" "root123"
  13. }、
  14. {{
  15. "id" "3"
  16. "ユーザー名" "システム"
  17. "passwd" "system456"
  18. }
  19. ]
  20. }
  21. }

2、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インジェクションと同様に、インジェクションステートメントを挿入します。ただし、注意すべき点の1つは、二重引用符、中括弧など、jsonステートメントをエスケープすることです。

 

おすすめ

転載: blog.csdn.net/weixin_44110913/article/details/109513243