站内搜索
最近浏览
- WinCE Security...
- xdebug配置说明
- VC++ 获取文件的创建、修...
- ASP进度条
- 简单代理服务器C代码实现(S...
- 程序设计竞赛试题选(02)
- 如何在ASP程序中打印Acc...
- UTF-8和16进制区间
- ASP实用技巧:强制刷新和判...
- 运行中程序删除自己的方法
- asp提高首页性能的一个技巧
- [J2EE]J2EE 应用服务器技术
- VB变量命名规范
- C语言常见错误小结
- (摘自网络)如何在IIS中调...
推荐文章
热文排行
ASP( VBScript ) 解析 JSON
VBScript 是 ASP 服务端程序的常用语言.
VBScript 解析 JSON是个问题. 自己写解析程序,当然不容易.
碰到这问题, 第一个想到的就是 JScript 了.
这是直接在 asp 里混用脚本.
还有一个方法就是 使用 MS 的 脚本控件.
也一样是使用了 JScript
Dim scriptCtrl Function parseJSON(str) If Not IsObject(scriptCtrl) Then Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl") scriptCtrl.Language = "JScript" scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;" End If scriptCtrl.ExecuteStatement "result = " & str & ";" Set parseJSON = scriptCtrl.CodeObject.result End Function Dim json json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}" Set obj = parseJSON(json) Response.Write obj.a & " " Response.Write obj.b.name & " " Response.Write obj.c.length & " " Response.Write obj.c.get(0) & " " Set obj = Nothing Set scriptCtrl = Nothing
之前写这个时,还忽略了一个问题.
上面二个方法都使用了 jscript 把 json 串解析成 js 对象.
不同之处是, 第一个方法, eval 是在当前宿主环境中执行.
第二个方法是, 在另外的宿主环境中执行.
这涉及到了一个安全性问题. json 如果是从客户端提交上来的话, 难以保证没有恶意用户提交非法代码...
这样,第一个方法,就会在当前环境中 eval(...恶意代码...) 后果不堪设想!!!
第二个方法,创建了 ScriptControl 控件, 在里面执行代码则相对安全了, 因为是在一个隔离起来的环境中执行.
但还有两个东东要给先卡掉, 因为代码在 ScriptControl 中执行,也可以在里面使用 ActiveXObject 或 GetObject 与外界打交道..
仍然不安全.
这时候,就有必要再调整一下代码:
Dim scriptCtrl Function parseJSON(str) If Not IsObject(scriptCtrl) Then Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl") scriptCtrl.Language = "JScript" scriptCtrl.AddCode "function ActiveXObject() {}" ' 覆盖 ActiveXObject scriptCtrl.AddCode "function GetObject() {}" ' 覆盖 ActiveXObject scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;" End If On Error Resume Next scriptCtrl.ExecuteStatement "result = " & str & ";" Set parseJSON = scriptCtrl.CodeObject.result If Err Then Err.Clear Set parseJSON = Nothing End If End Function Dim json json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}" Set obj = parseJSON(json) Response.Write obj.a & "<br />" Response.Write obj.b.name & "<br />" Response.Write obj.c.length & "<br />" Response.Write obj.c.get(0) & "<br />" Set obj = Nothing If IsObject(scriptCtrl) Then Set scriptCtrl = Nothing
[ly70041]
添加时间:2016-03-17