`
awfwxf
  • 浏览: 70416 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

避免发生与安全有关的javascript错误

阅读更多
會產生 JavaScript錯誤:

eval() 函數

setTimeout() 和 setInterval()

Function 建構函式

此外,使用下列類型的 JavaScript 陳述式也會失敗,並且不會產生不安全的 JavaScript 錯誤:

javascript: URL

在 innerHTML 和 outerHTML 陳述式中透過事件之特質指定的事件回呼

載入位於應用程式安裝目錄以外的 JavaScript 檔案

document.write() 和 document.writeln()

在 load 事件傳送之前或在 load 事件處理常式期間初始化的同步 XMLHttpRequest

動態建立的 Script 元素

備註: 在某些受到限制的情況下,可以執行評估字串作業。如需詳細資訊,請參閱不同安全執行程序中內容的程式碼限制。
Adobe 已整理出一份支援應用程式安全執行程序的 Ajax 架構清單,請造訪 http://www.adobe.com/go/airappsandboxframeworks_tw 以取得這份清單。

下列幾節將說明如何重新撰寫 Script 來避免這些不安全的 JavaScript 錯誤和不會產生訊息的錯誤,以便在應用程式安全執行程序中執行程式碼。

將應用程式內容對應至不同的安全執行程序
在大部分情況下,您都可以重新撰寫應用程式或重新建立其架構,避免發生與安全性有關的 JavaScript 錯誤。不過,在無法重新撰寫或重新建立架構的情況下,您可以使用將應用程式內容載入至非應用程式安全執行程序中所述的技巧,將應用程式內容載入至不同的安全執行程序中。如果該項內容也必須存取 AIR API,您可以如設定安全執行程序橋接介面中所述,建立新的安全執行程序橋接。

eval() 函數
在應用程式安全執行程序中,eval() 函數只能在網頁的 load 事件傳送之前,以及在 load 事件處理常式執行期間使用。網頁完成載入之後,呼叫 eval() 將不會執行程式碼。不過,在下列情況中,您可以重新撰寫程式碼以避免使用 eval()。

將屬性指定給物件
請不要透過下列所示方式剖析字串來建置屬性存取子:

eval("obj." + propName + " = " + val);請改以方括號標記法來存取屬性:

obj[propName] = val;使用可以在內容中使用的變數來建立函數
請將下列陳述式:

function compile(var1, var2){
    eval("var fn = function(){ this."+var1+"(var2) }");
    return fn;
}取代成為:

function compile(var1, var2){
    var self = this;
    return function(){ self[var1](var2) };
}使用類別名稱做為字串參數來建立物件
假設使用下列程式碼定義假設性的 JavaScript 類別:

var CustomClass = 
    {
        Utils:
        {
            Parser: function(){ alert('constructor') }
        },
        Data: 
        {
        
        }
    };
var constructorClassName = "CustomClass.Utils.Parser";建立實體的最簡單方式,就是使用 eval():

var myObj;
eval('myObj=new ' + constructorClassName +'()')不過,您可以剖析該類別名稱的其中每一個字元,並使用方括號標記法建置新物件,以避免呼叫 eval():

function getter(str)
{
    var obj = window;
    var names = str.split('.');
    for(var i=0;i<names.length;i++){
        if(typeof obj[names[i]]=='undefined'){
            var undefstring = names[0];
            for(var j=1;j<=i;j++)
                undefstring+="."+names[j];
            throw new Error(undefstring+" is undefined");
        }
        obj = obj[names[i]];
    }
    return obj;
}若要建立實體,請使用:

try{
    var Parser = getter(constructorClassName);
    var a = new Parser();
    }catch(e){
        alert(e);
}setTimeout() 和 setInterval()
請以函數參考或物件取代傳遞做為處理常式函數的字串。例如,將下列陳述式:

setTimeout("alert('Timeout')", 10);取代成為:

setTimeout(alert('Timeout'), 10); 或者,當這個函數需要由呼叫者來設定 this 物件時,將下列陳述式:

this.appTimer = setInterval("obj.customFunction();", 100);取代成為:

var _self = this;
this.appTimer = setInterval(function(){obj.customFunction.apply(_self);}, 100);Function 建構函式
對 new Function(param, body) 的呼叫可以取代為行內函數宣告,或者只在處理 load 事件之前使用這個呼叫。

javascript: URL
在應用程式安全執行程序中,使用 javascript: URL 配置在連結中定義的程式碼會遭忽略,這不會產生不安全的 JavaScript 錯誤。您可以將如下所示使用 javascript: URL 的連結:

<a href="javascript:code()">Click Me</a>取代成為:

<a href="#" onclick="code()">Click Me</a>在 innerHTML 和 outerHTML 陳述式中透過事件之特質指定的事件回呼
當您使用 innerHTML 或 outerHTML 將元素加入至文件的 DOM 時,所有在陳述式中指定的事件回呼 (例如 onclick 或 onmouseover) 都會遭忽略,這不會產生安全性錯誤。您可以改為將 id 特質指定給這些新元素,並使用 addEventListener() 方法設定這些事件處理常式回呼函數。

舉例來說,您可以在文件中指定某個目標元素,如下所示:

<div id="container"></div>將下列陳述式:

document.getElementById('container').innerHTML = 
    '<a href="#" onclick="code()">Click Me.</a>';取代成為:

document.getElementById('container').innerHTML = '<a href="#" id="smith">Click Me.</a>';
document.getElementById('smith').addEventListener("click", function() { code(); });

原文:http://help.adobe.com/zh_TW/AIR/1.1/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7f0e.html
0
0
分享到:
评论

相关推荐

    JavaScript_1x线是冻结的功能和错误修复现在发生.zip

    "JavaScript_1x线是冻结的功能和错误修复现在发生.zip"这个文件名暗示了我们讨论的是JavaScript的一个特定版本,可能是一个稳定版或者维护版,其中“1x线”可能指的是1.x系列的版本,这通常意味着对已有的功能进行...

    esapi for javascript 0.1.3

    总之,ESAPI for JavaScript是提升JavaScript应用程序安全性的重要工具,它通过提供一系列预定义的、经过安全测试的函数,帮助开发者避免常见的Web安全陷阱,创建更健壮的应用程序。在实际项目中,合理运用和配置ES...

    Javascript 容错技术

    #### 二、JavaScript错误类型及影响 JavaScript中的错误大致可以分为两类:**语法错误**与**运行时错误**。 1. **语法错误**通常发生在解析阶段,如拼写错误、缺少分号等。 2. **运行时错误**则是在代码执行过程中...

    JavaScript语言精粹(JavaScript.The.Good.Parts).pdf

    7. **性能优化**: 提供了有关如何优化JavaScript性能的建议,包括减少DOM操作、避免全局作用域污染等技巧。 8. **文档与资源**: 为读者提供了丰富的参考资料,包括在线文档、社区资源等,帮助读者进一步学习和研究。...

    JavaScript错误处理操作实例详解

    JavaScript错误处理是编程中至关重要的一个环节,它确保了程序在遇到问题时能够优雅地运行,而不是突然崩溃。本文将详细介绍JavaScript中常见的错误处理机制、错误类型及其处理方法。 首先,我们关注的是`try-catch...

    javaScript协议

    - **防止XSS攻击**:在处理用户输入的数据时,应对其进行适当的过滤和转义处理,避免XSS攻击的发生。 ##### 6. 性能优化技巧 - 使用变量声明关键字`var`明确变量的作用域,有助于提高代码的可读性和维护性。 - 将...

    javascript;与javascriptvoid(0)使用介绍

    `javascript:void(0)` 是一种更安全且常用的写法,其主要作用是在执行指定的JavaScript代码后返回一个未定义值(`undefined`),从而防止页面发生不必要的刷新或跳转。 **基本用法:** ```html &lt;a href="javascript...

    改善JavaScript程序的188个建议

    - 在可能出现错误的地方进行边界检查,预防错误发生。 10. **性能监控和测试**: - 使用开发者工具进行性能分析,找出性能瓶颈。 - 进行单元测试和集成测试,确保代码质量。 通过遵循以上建议,开发者可以编写...

    JavaScript_社区为查找安全漏洞的核引擎策划的模板列表.zip

    本资源"JavaScript_社区为查找安全漏洞的核引擎策划的模板列表.zip"提供了一套专门针对JavaScript安全的工具和方法,旨在帮助开发者和安全专家识别并修复潜在的安全漏洞。 核引擎(Nuclei)是一种快速、可配置的、...

    android javascript 与本地代码通讯

    这两个类提供了许多回调方法,可以在特定的Web事件发生时被调用,如页面加载完成、加载错误等。通过重写这些方法,我们可以实现JavaScript与Java的双向通信。例如,可以使用`WebViewClient`的`...

    cognos javascript

    通过遵循本指南,用户可以确保其JavaScript应用程序在升级后能够顺利运行,避免潜在的兼容性问题。 #### 适用性 此文档适用于所有计划将基于IBM Cognos ReportNet 1.x或Cognos 8 BI的8.1、8.2版本的JavaScript应用...

    IE 行144 错误 找不到元素

    - 使用现代的JavaScript库或框架(如React, Vue, Angular等),它们通常提供了更安全的DOM操作方式,减少了这类错误的发生。 综上所述,“IE 行144 错误 找不到元素”是JavaScript编程中常见的一个问题,主要与DOM...

    深入理解JavaScript系列

    - **命名冲突**:当多个脚本或模块使用相同的全局变量名称时,容易发生命名冲突,从而导致意外的行为或错误。 - **安全性**:全局变量可能被意外地修改或删除,尤其是在涉及多脚本环境的情况下。 - **性能影响**:...

    javaScript动态添加Li元素的实例

    JavaScript动态添加Li元素是前端开发中常见的一项技术,可以将新的列表项(li元素)动态添加到现有的HTML文档中。...无论是哪种方法,都需要特别注意安全问题,如避免XSS攻击,确保插入的HTML内容是安全的。

    js一句话屏蔽脚本错误

    ### 二、JavaScript错误处理机制 在JavaScript中,`window.onerror` 是一个全局事件处理器,它允许开发者定义一个函数,当浏览器捕获到任何脚本错误时调用这个函数。该函数通常用于记录错误日志或者采取其他补救...

    JAVASCRIPT 教程 经典之经典

    13. **TypeScript**:作为一种强类型的超集,TypeScript为JavaScript提供了类型安全,是大型项目中常见的选择。 14. **测试和调试**:了解如何使用console.log、断点和调试工具来测试和调试JavaScript代码。 15. *...

    Javascript中最常用的经典技巧

    - 在某些特定的表单字段中,避免用户因为输入法切换导致的输入错误。 #### 六、强制显示在框架内 - **知识点**: 通过 JavaScript 检查当前窗口是否为顶级窗口(即是否在框架中),如果不是,则将当前页面重定向到...

Global site tag (gtag.js) - Google Analytics