使用parseJSON代替eval
有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题。
正确的做法是分割出json里包含的特殊字符,然后再解析为对象
 parseJSON: function( data ) {
   if ( typeof data !== "string" || !data ) {
    return null;
   }
   // Make sure leading/trailing whitespace is removed (IE can't handle it)
   data = jQuery.trim( data );
   // Make sure the incoming data is actual JSON
   // Logic borrowed from http://json.org/json2.js
   if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
    .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
    .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
    // Try to use the native JSON parser first
    return window.JSON && window.JSON.parse ?
     window.JSON.parse( data ) :
     (new Function("return " + data))();
   } else {
    jQuery.error( "Invalid JSON: " + data );
   }
  }
所以,以后请使用parseJSON代替eval。
使用parseJSON代替eval的更多相关文章
- 【原】ajaxupload.js上传报错处理方法
		相信大家在工作中经常用到文件上传的操作,因为我是搞前端的,所以这里主要是介绍ajax在前端中的操作.代码我省略的比较多,直接拿js那里的 $.ajaxFileUpload({ url:'www.cod ... 
- 动态修改attr里的多个属性
		要点: 1.js将字符串转化为object方法,通过新建函数. 2.通过ajax返回的数据是object类型. 3.jquery.attr()里的attr是object类型 例子:主要实现后台返回的a ... 
- C# jquery webservices  跨域调用的问题解决方案
		前台代码: <script src="js/jquery-1.9.1.min.js" type="text/javascript"></scr ... 
- 如何将后台传来的json反序列化为前端具体对象
		//jQuery方式 var obj = $.parseJSON(json); .... //eval var obj = eval("("+json+")" ... 
- js 中 json对象 与 json字符串 间相互转换
		在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 JSON字符串: var str1 = '{ " ... 
- 解析处理常用json数据总结
		工作中用ajax接收到接口返回的数据需要进行解析后操作,这里总结一下平时的方法,用的jquery,复制下来的页面把引入的路径改一下即可. <!DOCTYPE html> <html ... 
- Javascript中Json对象与Json字符串互相转换方法汇总(4种转换方式)
		1.Json对象转Json字符串 JSON.stringify(obj); 2.Json字符串传Json对象 JSON.parse(str);//第一种 $.parseJSON(str);//第二种, ... 
- JSON.parse()     JSON.stringify()    eval()    jQuery.parseJSON()  的区别
		http://www.jb51.net/article/81880.htm : jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的Java ... 
- eval()和$.parseJSON()注意事项
		在前后端分离大行其道XXX(巴拉巴拉的废话不多讲了).描述实际应用场景:后台组装数据,返回到前台调用. 刚开始没有注意“后台返回字符串_1”的形式,使用eval()处理. 只是返回了字符串,不是严格意 ... 
随机推荐
- 纯css3 transforms 3D文字翻开翻转3D开放式效果
			详细内容请点击 在线预览立即下载 在本教程中,将基于CSS3创建的一个实现一个有趣的3D开放式效果.教程的目的是展示我们如何能带来一些生活上使用CSS3 . html: <ul class=&q ... 
- Android微信支付SDK开发笔记
			一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ... 
- 十、Notepad++正则表达式使用
			推荐个正则表达式在线测试的工具http://ccmpp.com/Regex/ Notepad++正则表达式使用 2011-01-06 10:01:35| 分类: 文档 | 标签:正则表达式 替换 no ... 
- JavaScript之返回顶部
			为了弄这个Hexo,今天又是坐在电脑面前待了一天( ⊙ o ⊙ ),老是出问题,在百度上也试验了很多方法,还是没弄好,诶...身心疲惫甚是乏累啊~~~ 算了,这个Hexo先不弄,还是安分点吧,在Hex ... 
- 零基础Android学习笔记-03 窗口间的数据传递
			1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ... 
- sql 计算两时间或日期 的相差的 年、 月、 日、时、分、秒,年、月、日分别的提取
			--年.月.日.时.分.秒 datediff(yy,date1,date2) datediff(m,date1,date2) datediff(d,date1,date2) datediff(hh,d ... 
- QA在网站建设中的作用
			在网站建设项目中,有一个团队负责产品测试并识别产品中的缺陷是很有意义的.问题在于,不应该只依赖这个团队来发现所有的缺陷,就像航空公司不能只依靠空乘人员确保飞机安全一样.这个观点的核心是一个简单的事实, ... 
- GIT Learning
			一.Why Git 1.1 Git是分布式的,本地的版本管理 chect out代码后会在自己的机器上克隆一个自己的版本库,即使你在没有网络的环境,你仍然能够提交文件,查看历史版本记录,创建项目分支, ... 
- 在Android项目中调用已有.so库
			注意该.so库指的是android平台的,非一般linux.unix平台:1.现有库libcom_ycan_testLib.so2.新建android项目TestLib23.添加新类:类名:testL ... 
- 《如何将windows上的软件包或文件上传到linux服务上》
			昨天晚上朋友让我帮他简单的搭建个环境,他公司让他做款软件测试温度的,他自己搞的是嵌入式,在公司担任的是软件工程师,应届毕业生.也可能他们搞嵌入式的对这个linux系统不太熟,不会把windows上的软 ... 
