JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(C、C++、C#、Java、JavaScript、Perl、Python等语言都可以使用JSON),这些特性使JSON成为理想的数据交换语言,易于开发人员阅读和编写,同时也易于程序解析和生成。JSON的出现在某些方面可以说是XML的一大对手。关于JSON更多的详细介绍请参照其官方网址:http://www.json.org/。
简单地说,JSON可以将JavaScript中的对象转换为字符串,然后在函数、网络之间传递这个字符串。这个字符串看起来有点儿怪异,但是JavaScript很容易解释它,而且JSON可以表示比"Key / Value"更复杂的结构。
例如,下面一段示例是JSON最简单的Key→Value示例(名称 / 值对,键值对):
{ "UserName": "xxser" }
这么简单的数据可能并不能太多地表现JSON存在的价值,接着看下面一组JSON数据。
{ "UserName": "xxser", "PassWord":"nike", "email": "root@secbug.org" }
从语法方面看,与"Key /Value"相比并没有很大的优势,但是在这种情况下,JSON更容易使用,而且可读性更好。
最重要的是,当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性。例如,假设你希望表示一个管理员列表,在XML中需要许多开始标记和结束标记,较为复杂,而使用JSON却简单明了。
{ "users":[
{ "UserName": "xxser", "PassWord":" xxser ", "email": "xxser@xxser.com" }
{ "UserName": "admin", "PassWord":" admin88 ", "email": "admin@xxser.com" }
{ "UserName": "root", "PassWord":" root 123", "email": "root@xxser.com" }
{ "UserName": "hacker", "PassWord":"nike", "email": "hack@xxser.com" }
{ "UserName": "2cto", "PassWord":"2cto", "email": "xxser@xxser.com" }
] }
在了解了基础的JSON知识后,下面来看JSON中的注入。
在JSON的基础知识中,我们了解到JSON是根据引号(")、冒号(:)、逗号(,)和花括号({})区分各字符的意义的。如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败。例如,输入的PassWord值为:
admin"888
那么组装成的JSON数据位如下:
"PassWord":" admin"888"
在PassWord中的引号将会破坏整个JSON的结构,导致JSON解析失败。JSON注入没有其他几种注入的危害性大,但依然不可小视,笔者一直认为没有低危的漏洞,只是还没碰到可利用的场景,攻击者可能通过这类低危漏洞辅助其他攻击,这时低危漏洞将不再低危。
如何防御JSON注射呢?方法依然很简单,只需要对其关键字符进行转义即可,如:将"admin"888"转换为"admin\"888",这样JSON的值就可以解析了。如果字符串中出现"\",同样需要将其转义为"\\"。
如果你不喜欢自己动手去解决这些问题,可以使用一些第三方组件。以Java为例,如图10-22所示,使用了JSON-lib.jar组建JSON数据,可以有效地避免JSON注入。
public class JsonTest { @Test public static void main(String[] args) { List<User> users=new ArrayList<>(); String str="admin\"888888"; System.out.println(str); users.add(new User(1,"admin",str)); users.add(new User(2,"root","root")); JSONArray jso=JSONArray.fromObject(users); System.out.println(jso.toString()); } 转载自:http://www.51testing.com/html/61/n-2502761.html
[{"yonghu":"admin","jiaose":"admin\"888888","id":1},{"yonghu":"root","jiaose":"root","id":2}]
相关推荐
《Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境,更好地帮助读者深入了解Web应用程序中存在的漏洞,防患于未然。 《Web安全深度剖析...
- **安全性**:讨论常见的Web安全威胁(如SQL注入、XSS攻击等)及其防范措施;介绍HTTPS加密传输、CSRF防护等最佳实践。 - **性能优化**:涵盖服务器端与客户端的优化策略,比如缓存机制、数据库索引设计、代码级...
《Java Web网上购物系统:深度剖析与毕业设计详解》 Java Web网上购物系统是一种基于Java技术构建的电子商务平台,它集成了用户管理、商品展示、购物车、订单处理、支付接口等多种功能,为用户提供便捷的在线购物...
《深入体验Java Web开发内幕》是张孝祥先生的一部深度解析Java Web开发的经典著作,对于想要深入了解这一领域的开发者来说,是一本不可多得的参考资料。本书内容涵盖了Java Web开发的各个方面,旨在帮助读者全面理解...
除此之外,书籍中可能还会涉及AngularJS与其他技术(如RESTful API、JSON、Bootstrap等)的集成,以及如何利用AngularJS进行状态管理、错误处理和安全防护。随着版本迭代,AngularJS 1.x与更新的Angular(2+)之间...
本文将对这一源码进行深度剖析,探讨其中的核心技术和设计模式。 首先,矩阵(MATRIX)网上销售系统源码的实现基于Web开发框架,可能是诸如Spring Boot、Django或Ruby on Rails等。这些框架以其强大的功能和高效的...
《网上餐厅管理系统——Java后端开发的深度剖析》 毕业设计是高等教育中一项重要的实践环节,它要求学生综合运用所学知识,独立完成一个实际项目。本项目——“网上餐厅管理系统”是一个典型的Java后端开发案例,...
对于用户验证,可能运用了OAuth2.0或JWT(JSON Web Tokens)等安全认证机制,确保用户信息的安全。 此外,项目可能还集成了第三方框架,例如Butter Knife用于视图注入,减少样板代码;RxJava和RxAndroid用于处理...
通过对PetClinic和GreenPages的深度剖析,我们可以深入理解Spring服务器端开发的各个方面,从而在自己的项目中更好地应用Spring框架,提升开发效率和代码质量。无论是初学者还是经验丰富的开发者,都能从中受益匪浅...
本篇将深度解析一个基于SpringBoot的线上辅导班系统源码和数据库设计,旨在帮助开发者理解并学习如何构建类似的系统。 首先,SpringBoot是Spring框架的一个简化版,它简化了初始化、配置和运行过程,使得开发人员...
5.2 JWT(JSON Web Tokens):用于身份验证,提供安全的API接口。 5.3 WebSocket:实现实时推送,如购票成功通知、订单状态变更等。 六、最佳实践与优化建议 6.1 代码规范:遵循一定的编码规范,保持代码整洁,...
4. 安全:HTTPS协议、JWT(JSON Web Tokens)进行身份验证,防止数据泄露。 三、考试系统的优化策略 1. 性能优化:通过缓存策略、负载均衡、数据库索引优化等手段提升系统响应速度和并发能力。 2. 用户体验:简洁...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
《jQuery技术深度剖析——以20120620版本为视角》 在Web开发领域,jQuery无疑是一个里程碑式的存在。自2006年发布以来,它以其简洁的API、强大的功能以及对浏览器的良好兼容性,迅速成为了前端开发者们的首选工具。...
防止JSON注入攻击197 防止跨站请求伪造198 74客户端安全198 创建security服务199 显示登录表单200 创建安全的菜单及工具栏201 隐藏菜单项201 创建登录工具栏202 75支持客户端认证203 处理认证失败203 拦截...
《Java项目开发案例全程实录(第二版)》是一本深度剖析Java项目开发实践的书籍,旨在帮助读者从实践中学习并掌握Java编程技术。源码下载包含的是书中各个实例的完整代码,确保读者能够亲手实践,提升编程技能。以下...
作者们深入剖析了如何使用这些组件来构建健壮、高性能的Web应用程序。以下是一些主要的知识点: 1. **MVC模式**:讲解了MVC设计模式的基本原理,即模型(Model)负责处理业务逻辑和数据管理,视图(View)负责显示...
《DoctorFinderApp——Java技术深度剖析》 "DoctorFinderApp"是一个基于Java开发的应用程序,旨在帮助用户方便快捷地寻找并联系医生。该应用的核心功能是提供一个平台,让用户能够根据地理位置、专业领域、医生评价...
1. 用户认证与授权:Weiciyuan使用JWT(JSON Web Tokens)进行用户身份验证,确保数据安全。OAuth 2.0协议处理第三方应用授权,实现社交登录功能。 2. 微博发布与展现:通过富文本编辑器实现内容输入,结合Markdown...