【32】WEB安全學習----Json注入
阿新 • • 發佈:2018-12-13
一、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:
{ "users": { "user": [ { "id": "1", "username": "admin", "passwd": "admin888" }, { "id": "2", "username": "root", "passwd": "root123" }, { "id": "3", "username": "system", "passwd": "system456" } ] } }
二、JSON注入
和xml注入一樣,只是資料表現形式不同而已。
<?php header('content-type:text/html;charset=utf-8'); if(isset($_POST['json'])){ $json_str=$_POST['json']; $json=json_decode($json_str); if(!$json){ die('JSON文件格式有誤,請檢查'); } $username=$json->username; //$passwd=$json->passwd; $mysqli=new mysqli(); $mysqli->connect('localhost','root','root'); if($mysqli->connect_errno){ die('資料庫連線失敗:'.$mysqli->connect_error); } $mysqli->select_db('user'); if($mysqli->errno){ dir('開啟資料庫失敗:'.$mysqli->error); } $mysqli->set_charset('utf-8'); $sql="SELECT username,paawd FROM users WHERE username='{$username}'"; $result=$mysqli->query($sql); if(!$result){ die('執行SQL語句失敗:'.$mysqli->error); }else if($result->num_rows==0){ die('查詢結果為空'); }else { $array1=$result->fetch_all(MYSQLI_ASSOC); echo "使用者名稱:{$array1[0]['username']},密碼:{$array1[0]['paawd']}"; } $result->free(); $mysqli->close(); } ?>
和SQL注入一樣,插入注入語句。但要注意一點是對影響json語句的要進行轉義,如雙引號、花括號等。