文档章节

使用安全json parser防止json注入

有些服务器
 有些服务器
发布于 2015/12/15 20:13
字数 312
阅读 234
收藏 11

有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题。


正确的做法是分割出json里包含的特殊字符,然后再解析为对象


http://json.org/json2.js 中是通过正则来完成的。


// We split the second stage into 4 regexp operations in order to work around

// crippling inefficiencies in IE's and Safari's regexp engines. First we

// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we

// replace all simple value tokens with ']' characters. Third, we delete all

// open brackets that follow a colon or comma or that begin the text. Finally,

// we look to see that the remaining characters are only whitespace or ']' or

// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.


            if (/^[\],:{}\s]*$/.

test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').

replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').

replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {


// In the third stage we use the eval function to compile the text into a

// JavaScript structure. The '{' operator is subject to a syntactic ambiguity

// in JavaScript: it can begin a block or an object literal. We wrap the text

// in parens to eliminate the ambiguity.


                j = eval('(' + text + ')');

目前不少写的好的框架和js解析函数都取用了这种做法。


所以,以后千万别直接eval了。


© 著作权归作者所有

共有 人打赏支持
有些服务器
粉丝 4
博文 49
码字总数 86607
作品 0
南昌
私信 提问
Fastjson1.1.18 发布,解决 hash 碰撞问题

刚从温少手中接手维护,很多事宜还不清楚。 因为之前一直负责安全和故障分析方面的工作,所以接手后第一工作是加固 hash碰撞导致攻击的问题。 从客户端传输的json文本给服务端转换成JSON对象...

iamaxman
2012/04/11
1K
4
【二 HTTP编程】5. Body parsers

何为Body parser? 一个HTTP请求由请求头和请求体组成。header部分通常很小 —— 因此可以在内存中被安全的缓存,在Play中对应着RequestHeader模型。相对而言,body部分可能会非常大,这时它...

Landas
08/16
0
0
Play 2.0 用户指南 - 使用JSON库 -- 针对Scala开发者

概述 使用JSON的推荐方式是使用 Play 的基于类的JSON库,位于play.api.libs.json下. 该库构建于Jerkson之上,它是一个Scala包装者,基于一个超快的基于Java的JSON库,Jackson. 这种方式的好处是,...

大东哥
2012/03/20
0
2
REST API 安全设计指南

REST API 安全设计指南。REST的全称是REpresentational State Transfer,它利用传统Web特点,提出提出一个既适于客户端应用又适于服务端的应用的、统一架构,极大程度上统一及简化了网站架构...

gsying1474
2016/06/30
0
0
RESTFUL API 安全设计

0x01 REST API 简介 REST的全称是REpresentational State Transfer,表示表述性无状态传输,无需session,所以每次请求都得带上身份认证信息。rest是基于http协议的,也是无状态的。只是一种...

Joe小桥
2015/10/23
638
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么只有你每次提交代码,log里面会出现merge

http://www.cnblogs.com/Sinte-Beuve/p/9195018.html

踏破铁鞋无觅处
1分钟前
0
0
如何学习大数据:spark发布程序

一、对于spark程序只是用于默认的spark包的情况 直接点击pcakage 将程序进行在linux当中进行发布 客户端模式:测试 spark-submit --class com.keduox.App \ --master yarn \ --deploy-mode ...

架构师springboot
1分钟前
0
0
oracle job(定时任务)

创建 定时任务 job declare job number;BEGIN DBMS_JOB.SUBMIT( JOB => job, -- job任务的唯一标识(自动生成) WHAT => 'INSERT into TEXTL (id) VALUES(TEXT......

骑羊放狼灬
5分钟前
0
0
Spring声明式事务在抛出异常时不回滚(RollBack)

Spring声明式事务默认只在RuntimeException时Rollback(回滚),不当的try catch会导致事务不回滚。 spring事务默认运行时异常回滚,RuntimeException 配置时添加异常回滚 rollback-for="Th...

叶落花开
5分钟前
0
0
赋能时空云计算 阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云云栖社区
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部