文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>2010年12月30号工作小结之代码安全

2010年12月30号工作小结之代码安全

时间:2010-12-30  来源:天行健 自强不息

  一、JS代码安全

  JS做为脚本语言,在客户端执行,如果好好利用能达到减轻服务器压力,带给用户更好的体验。但由于JS是在客户端运行,因此如果不注意也会带来很多安全隐患,下面列举出几个最常见的安全隐患。

  1、最常见的就是很多程序员用JS做用户输入验证,但在服务器端却不再次验证,这是非常危险的,如果用户禁用浏览器的JS就可以使非法信息进入系统。

  2、用JS读写页面元素的信息。如果这些信息直接参与到数据库操作中就要特别注意,因为现在一些浏览器插件功能都很强大,可以对页面元素的信息进行修改,最著名的就是FireBug了,这个插件给开发人员带来了巨大方便的同时也提醒着程序员,用户可以通过这个工具来更改页面上的元素信息,其他的浏览器也都有类似插件,因些,在涉及到与数据库交互时从页面元素上获取的信息一定要在服务器端再次验证,还有就是优先用全局JS变量代替从页面直接获取。

  3、AJAX操作的同步异步问题。当页面用到了AJAX时一定要思考清楚用同步还是异步,一般情况下如果只是读取信息建议采用异步AJAX,这样用户体验会比较好,如果逻辑比较复杂,对AJAX的返回值还要做很多操作,并与其它变量交叉引用比较多时,最好用同步AJAX,当然这些都不是绝对的,具体情况具体对待。

  二、C#代码安全(本处只讨论方法返回值)

   大家先来看段很简单的代码吧,代码只为说明问题,没什么意义:

 

        static void Main(string[] args)
        {
            //测试一
            IList<string> one = GetInfo(3);
            foreach (var o in one)//normal
            {
                Console.WriteLine("方法一:"+o);
            }

            //测试二
            one = GetInfo(0);
            foreach (var o in one)//normal
            {
                Console.WriteLine("方法一:" + o);
            }

            //测试三
            IList<string> two = GetInfo("abcd");
            foreach (var o in two)//normal
            {
                Console.WriteLine("方法二:" + o);
            }

            //测试四
            two = GetInfo("");
            foreach (var o in two)//未将对象引用设置到对象的实例
            {
                Console.WriteLine("方法二:" + o);
            }

            //测试五
            two = GetInfo("");
            if (two != null)
            {
                foreach (var o in two)//没有运行到这里
                {
                    Console.WriteLine("方法二:" + o);
                }
            }

            Console.Read();
        }

        //方法一
        public static IList<string> GetInfo(int no)
        {
            IList<string> strArr = new List<string>();
            if (no > 0)
            {
                for (int i = 0; i < no; i++)
                {
                    strArr.Add(i.ToString());
                }
            }
            return strArr;
        }

        //方法二
        public static IList<string> GetInfo(string no)
        {
            IList<string> strArr = new List<string>();
            if (no.Length>0)
            {
                for (int i = 0; i <no.Length; i++)
                {
                    strArr.Add(i.ToString());
                }
                return strArr;
            }
            return null;
        }

  这段代码非常简单,调用时测试四出现了“未将对象引用设置到对象的实例”错误,这是因为方法二中返回了null。大家请看方法一和方法二的返回值处理,第一种是无论结果如何都返回一个string泛型实体,但方法二却在没有数据时返回了null,这看似是更细心的写法,但在调用过程中却出现了错误。也许有人会说这个错误是可以通过对返回值的判断或捕获异常来避免,但却使调用的方法和被调用的方法都变得复杂了,今天的工作中就因为是第二种写法出现了错误。第一种写法即使没有数据也不会出现致命错误导致程序崩溃,因此个人比较推荐第一种方法,只需对返回值中的数据做判断,而不必担心出现null的情况。

   三、代码上传到服务器的安全问题

  对于web程序,代码写好后要上传到服务器上运行,web项目代码上传即刻生效,因此对准备更新的代码一定要做充分的测试,下面几点非常重要:

  1、本地先要做好充分的测试。测试环境尽可能模拟服务器环境,在本地多次测试没问题后再考虑第二步。

  2、准备好服务器上的测试环境。在第一步完成了后不要急着更新代码,一定要想好上传到服务器后自己如何能对代码进行测试,保证代码的正常运行。如果代码上传了,自己都没有办法确认是否正常是非常危险的。

  3、备份服务器上要更新的代码。前两步做好后千万别忘了对要更新的代码进行备份,这样万一上传的代码出现了问题可以马上回到原有状态。

  4、提交代码到服务器。前面几步完成后就可以提交代码了,代码提交后一定要进行测试,如果出现意外情况要立即还原原有代码,再按前几步的要求进行修改完善。

 

  非常欢迎大家就以上几点提出自己的看法和分享自己的经验。

 

 

作者:天行健,自强不息

出处:http://www.cnblogs.com/durongjian
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载