27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
JSON本身不存在任何安全问题,但是在web中使用JSON时却常出现两个安全问题:跨站请求伪造和跨站脚本攻击。
跨站请求伪造(CSRF)是一种利用站点对用户浏览器的信任而发起攻击的方式。
这个信任其实就是用户的登录凭证,黑客为了得到用户的凭证,会在用户登录站点的情况下向用户发送大量的伪造“消息提醒”,目的就是为了让用户点击它,访问它带有危险脚本的网站。一旦用户点击这一消息提醒、访问该恶意网站,黑客就可获取用户的敏感信息(登录凭证)实现攻击:
一般安全意识较差的网站使用下列这样的JSON URL存放敏感信息:
[ { "username":"dawei" }, { "phone":"555-555-555" } ]
这里的JSON格式是合法的,但是它十分危险,因为它也是可执行的JS脚本,黑客可以轻易的将其保存到自己站点的脚本中。
如何阻止CSRF攻击?
首先,应该将数组作为一个值存入JSON对象,这样数组将不再是合法的JavaScript,脚本也就无法加载它。
{ "info":[ { "username":"dawei" }, { "phone":"555-555-555" } ] }
其次,站点应该只允许post请求,静止使用get请求。这样黑客就无法使用脚本中的URL了。
注入攻击都是利用系统本身的漏洞向网站注入恶意代码来进行攻击的。
跨站脚本攻击(XSS)是注入攻击的一种。在使用JSON时常见的安全漏洞通常发生在Javascript从服务器获取到一段JSON字符串并将其转化成JavaScript对象的时候。
在JavaScript中,可以使用eval()函数来进行这一操作:
var jsonString = '{"animal":"cat"}'; var myObject = eval("("+ jsonString +")"); alert(myObject.animal);
这好像没什么问题,但是如果服务器或者服务器发来的JSON被攻击,携带了恶意代码,这样的话情况将会很糟糕:
var jsonString = "alert('this is bad code')"; var myObject = eval("("+ jsonString +")"); alert(myObject.animal);
eval()的问题在于它会将传入的字符串无差别的编译执行,这样的话就会给黑客以可乘之机,很可能会给我们带来不可估计的损失。
为了解决这一问题,引入了JSON.parse()方法,这一函数仅解析JSON,不会执行脚本:
var jsonString = '{"animal":"cat"}'; var myObject = JSON.parse("("+ jsonString +")"); alert(myObject.animal);
本站内容均为小米原创,转载请注明出处:小米技术社区>> JSON中的安全问题,如何防止攻击?