我的 HTML5/JavaScript 编程规范

HTML5/JavaScript 编程规范 一、文本编辑规则 缩进为2个空格,不使用tab 标签全部采用小写字母,如<input type="checkbox" checked> 函数和变量名称小写开头,中间采用骆驼命名法,如:getElementById(...) 类似宏的函数名称全部小写或大写,以下划线分割单词,如:extend_class__ 类名称大写字母开头,如 function MyObject(...) 类中方法、变量按作用域不同,采用不同的命名规则。 发布的版本一定要注释掉console.log(...) 单行注释总是: /*...*/。多行注释总是:/**...*/。短注释用:// 以//?开头的注释总是属于未完成的临时代码 给属性添加的注释://@attributeName 二、类中方法、变量命名规则 对外暴露的类名称以大写字母开头,如MapPoint 内部使用的类名称以双下划线__开头加大写字母,如__ViewPort 类的公有方法或属性、变量与函数和变量的命名规则相同,如:mapPoint.getDistance 类的私有方法或属性、变量,并且允许被其他内部类访问,以单下划线_加小写字母开头 类的外部不能直接访问的私有方法、变量,以双下划线__加小写字母开头,如:__salaryAmount 类的静态变量以大写字母开头,如:MapPoint.MaxRadius 三、一个JavaScript类模板 /******************************************************************************* * h5.hs * cheungmine ******************************************************************************/ // 包含其他js文件 usingScript("utils.js"); /******************************************************************************* * $MyClassBase * Place comments here ******************************************************************************/ function MyClassBase() { //?TODO: } /******************************************************************************* * $MyClass * Place comments here * 闭包: * 这种公共、私有和特权成员的模式是可行的原因是由于JavaScript有closure闭包。 * 这意味着类中一个内部的函数总是可以访问这个函数外部的变量和参数, * 甚至在外部的函数返回之后。这是这个语言的一个极其强大的特性。 * 私有和特权成员只能在对象构造的时候生成。 * 公共成员可以在任意时刻添加。 ******************************************************************************/ // extend_class__ 声明 MyClass 继承自 MyClassBase extend_class__(MyClass, MyClassBase); function MyClass(/* 可以在此放置构造参数列表 */) { // 另一种继承类的方法,可以提供不同的构造参数 // 不要与extend_class__同时使用 // MyClassBase.call(this); /************* * 私有成员:* ************/ // 可变参数示例,__args是严格私有变量 var __args=Array.prototype.slice.call(arguments); var __salary = 0; // 下面是一个私有方法示例,外部不能访问 function __parseArgs() { self.__salary = 0; if (__args.length>=2) { this._family = __args[0]; this.name = __args[1]; if (__args.length==3) self.__salary = __args[2]; return true; } return false; } /************* * 特权成员:* ************/ // toString 提供类名称 this.toString = function () { return "MyClassClass"; } this.initialize = function (salary) { if (salary!=null) this.salaryAmount = salary; return __parseArgs(); } // 这是一个外部访问的公有方法,输出构造参数内容 this.printArgs = function () { var i = 0; for (i=0; i<__args.length; i++) console.log(__args[i]); } /** * 公共成员,但是因为加了下划线,说明我们本意不想被外部直接访问 * 但允许内部类访问 */ this._family = null; /** * 公共成员,外部直接访问 */ this.name = null; /************* * 特权属性: * ************/ //@valid this.__defineGetter__("valid", function () { return (this._family!=null && this.name!=null); } ); //@salaryAmount this.__defineSetter__("salaryAmount", function (v) { __salary=v*100; } ); /** * 放在最后一行,self被内部方法使用 */ var self = this; } // 下面是类静态变量的例子: MyClass.prototype.DaysOfYear = 365;
/** * utils.js * cheungmine */ if(!getElem){ var getElem=(function(){ return function(id){ return document.getElementById(id); }; })(); } if(!includeScript){ var includeScript=(function(){ return function(js){ document.write('<script type="text/javascript" src="'+js+'"></script>'); }; })(); } if(!importScripts){ var importScripts=(function(globalEval){ var xhr=new XMLHttpRequest; return function importScripts(){ var args=Array.prototype.slice.call(arguments) ,len=args.length ,i=0 ,meta ,data ,content ; for(;i<len;i++){ if(args[i].substr(0,5).toLowerCase()==="data:"){ data=args[i]; content=data.indexOf(","); meta=data.substr(5,content).toLowerCase(); data=decodeURIComponent(data.substr(content+1)); if(/;\s*base64\s*[;,]/.test(meta)){ data=atob(data); } if(/;\s*charset=[uU][tT][fF]-?8\s*[;,]/.test(meta)){ data=decodeURIComponent(escape(data)); }}else{ xhr.open("GET",args[i],false); xhr.send(null); data=xhr.responseText; } globalEval(data); } }; }(eval)); } if(!usingScript){ var usingScript=(function(){ return function(js){ try{ includeScript(js); } catch(e){ importScripts(js); } }; })(); } if(!getBrowserAgent){ var getBrowserAgent=(function(){ return function(){ if ((navigator.userAgent.indexOf('MSIE')>=0)&&(navigator.userAgent.indexOf('Opera')<0)) return "$IE"; else if (navigator.userAgent.indexOf('Firefox')>=0) return "$FIREFOX"; else if (navigator.userAgent.indexOf('Opera')>=0) return "$OPERA"; else if (navigator.userAgent.indexOf('Chrome')>=0) return "$CHROME"; else return navigator.userAgent; }; })(); } if(!extend_class__){ var extend_class__=(function(){ return function(deriveClass, baseClass) { var base=new baseClass(); for (var m in base) { deriveClass.prototype[m]=base[m]; }}; })(); } if(!addEvent){ var addEvent=(function(){ if (document.addEventListener){ return function (el,type,fn){ if (el&&el.nodeName||el===window){ el.addEventListener(type,fn,false); }else if(el&&el.length){ for(var i=0;i<el.length;i++){ addEvent(el[i],type,fn); }}}; }else{ return function(el,type,fn){ if (el&&el.nodeName||el===window){ el.attachEvent('on'+type,function(){return fn.call(el,window.event);}); }else if(el&&el.length){ for(var i=0;i<el.length;i++){ addEvent(el[i],type,fn); }}}; }})(); } HTML5模板:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="cheungmine"> <title>The HTML5 Test Page</title> <!-- <link rel="stylesheet" href="css/styles.css?v=1.0"> --> <script src="utils.js"></script> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <script type="text/javascript"> console.log("run script in head"); var browser = getBrowserAgent(); addEvent(window, 'load', function () { if (browser=="$IE"||browser=="{1}quot;) { if (window.confirm("IE does not support HTML5 currently.\n"+ "please use lastest FireFox, Chrome or Opera!\n"+ "if you havenot any of them installed,\n"+ "please click OK to enter download page.")) { window.location.replace("selbrowser.html"); } else { window.close(); } } init(); } ); function init () { console.log("init after page load"); } </script> </head> <body> <header> <nav>HTML5/JavaScript 编程规范</nav> <p>(open me in Chrome and press F12 to switch debugging)</p> </header> <div id="main"> </div><!-- #main --> <!-- import js at bottom of body --> <script src="h5.js"></script> <script type="text/javascript"> console.log("run script in body"); var myCls = new MyClass("cheung", "mine"); myCls.printArgs(); myCls.initialize(250); console.log(myCls.DaysOfYear); </script> </body> </html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python安全编程规范是指为了提高Python程序的安全性和防御能力,开发人员应该遵循的一系列编程规则和最佳实践。下面是几个重要的Python安全编程规范: 1. 输入验证和过滤:始终对用户输入进行验证和过滤,确保数据的合法性和完整性。不信任任何外部输入数据,并且使用尽可能严格的验证规则。 2. 防止SQL注入:避免直接将用户输入拼接到SQL查询中,而是使用参数化查询或ORM框架,以防止SQL注入攻击。 3. 防止跨站脚本攻击(XSS):对用户的输入进行适当的转义和过滤,以防止恶意脚本注入到网页中。可以使用HTML转义函数或安全模板来处理输出。 4. 密码安全:存储用户密码时,不应该明文存储,而是使用哈希函数和适当的盐进行哈希加密,以确保密码的安全性。 5. 文件路径安全:在处理文件路径时,要避免使用用户输入直接拼接路径,以防止路径遍历攻击。推荐使用安全的文件路径操作函数。 6. 拒绝服务攻击防护:对于可能引起拒绝服务的操作,如文件上传、网络请求等,要设置适当的限制和验证,防止恶意攻击者滥用资源。 7. 慎用eval()和exec():避免使用eval()和exec()等函数,因为它们可以执行任意代码,存在安全风险。如果必须使用,要做好输入验证和过滤。 8. 定期更新依赖库:及时更新Python依赖库以修复可能存在的漏洞,确保代码的安全性和稳定性。 总之,Python安全编程规范强调对用户输入的验证和过滤、防止常见的攻击方式,并注意扩展库的安全性。遵循这些规范可以有效提高Python程序的安全性,减少潜在的漏洞和风险。 ### 回答2: Python安全编程规范主要涉及以下几个方面。 1. 输入验证:Python安全编程规范强调对输入数据进行有效的验证和过滤,以防止恶意用户输入恶意代码或攻击Payload。开发人员应该使用正则表达式、白名单等机制来验证和过滤所有的输入数据,确保输入数据的合法性。 2. 防止SQL注入:在Python开发中,使用参数化查询、ORM框架、存储过程等方式来减少SQL注入漏洞的风险。开发人员应该避免将用户输入直接拼接到SQL查询字符串中,而是通过参数绑定的方式来执行SQL查询。 3. 防止跨站脚本攻击(XSS):Python安全编程规范要求开发人员对所有的用户输入进行适当的转义和过滤,以防止恶意用户注入恶意脚本代码。开发人员可以使用安全框架、模板引擎等工具来自动转义用户输入,同时避免直接拼接用户输入到HTML标签或JavaScript代码中。 4. 防止跨站请求伪造(CSRF):开发人员应该为每个敏感操作和表单提交请求添加CSRF令牌验证。这个令牌必须是动态生成的、与用户相关的,并且在每个请求中都要验证令牌的有效性,以防止攻击者通过伪造请求来执行恶意操作。 5. 密码安全性:开发人员应该采用适当的密码存储和加密方式,如使用哈希函数、加盐等方式来存储用户密码。同时,应该限制用户密码的长度和复杂度,并及时提示用户更新密码。 6. 日志管理:开发人员应该记录和监控应用程序的日志,包括错误日志、访问日志等,以及对敏感操作进行审计。这有助于发现和分析潜在的安全威胁,并及时采取措施进行修复和应对。 总之,Python安全编程规范强调对输入数据的验证,避免常见的安全漏洞,同时加强对用户身份验证、会话管理等安全措施的实施,以确保应用程序的安全性。开发人员应该充分了解并遵守这些规范,以提高Python应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值