使用安全json parser防止json注入
2012-01-29 00:14
204 查看
今天在网上瞎逛又看到了一个不错的东西。
有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题。
正确的做法是分割出json里包含的特殊字符,然后再解析为对象
http://json.org/json2.js 中是通过正则来完成的。
目前不少写的好的框架和js解析函数都取用了这种做法。
所以,以后千万别直接eval了。
有些程序员如果没有很好的在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了。
相关文章推荐
- 使用安全json parser防止json注入
- 使用安全json parser防止json注入
- 防止XSS注入script脚本,简单的方法;在项目中也可以使用的安全转码格式。
- 灵活组装Json的数据使用Gson的JsonParser和JsonReader解析Json详解例子
- 使用LINQ解除SQL注入安全问题
- 使用User-Agent防止HttpClient发送http请求时403 Forbidden和安全拦截
- JSON 序列化与反序列化(一)使用TypeReference 构建 类型安全的异构容器
- 使用puase等待信号要防止信号发生在puase之前。所以为了代码安全,使用sigaction
- 使用LINQ解除SQL注入安全问题
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 通过jdbc使用PreparedStatement,提升性能,防止sql注入
- iOS安全–使用static inline方式编译函数,防止静态分析
- TP 接收post请求使用框架自带函数I()防止注入
- 【PHP】使用参数绑定防止SQL注入
- 如何使用jquery对特殊字符进行转义,防止js注入
- 使用jquery ajax对特殊字符进行转义,防止js注入
- Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入
- AOP实践--ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁
- Gson的JsonParser使用