一、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语句的要进行转义,如双引号、花括号等。