隐藏在程序旮旯中的“安全问题”

简介:
--作为一个真正的程序员,必须有高度的“ 安全意识”,因为我们作出的软件运行在复杂的环境中,不能把不该有异常抛给用户,更不能把漏洞留给“黑客”,当然也不能把“操作失误”作为系统出错的理由。

    那么我们应该如何才能写出一个“安全”的软件呢?其实问题就在我们的程序旮旯中,看你是否用心去看哪些所有可能引起问题的代码。下面列举一例说明,我们的数据同步程序需要在目标数据库执行一点点( 就一点点,你看下面的代码就知道)SQL语句,按照原来的设计,这是不允许的,因为可能引起安全问题,但是现在既然“开了一扇窗”,就要“增加十层网”,我们来看看应该怎么样架起这个防火墙:

 

复制代码
 1  PWMIS.DataProvider.Data .AdoHelper db =   this .GetDbHelper();
 2  if  (tableName  ==   " TB_SYS_SQL " )
 3  {
 4      foreach  (EntityBase entity  in  entitys)
 5     {
 6         object  obj  =  entity.PropertyList( " sqlstr " );
 7         if  (obj  !=   null // @1
 8        {
 9              string  sqlstr  =  obj  as   string  ; // @2
10              if  ( ! string .IsNullOrEmpty(sqlstr))  // @3
11             {
12                    // 目前只执行该条类型的SQL语句
13                    if  (sqlstr.ToLower().StartsWith ( " delete from jjzb " ))   // @4
14                   {
15                        int  count  =  db.ExecuteNonQuery(sqlstr.Split ( ' ; ' )[ 0 ]);
16  // @5,过滤;号后的其它语句,避免SQL注入
17                        this .Talk( string .Format( " 执行SQL语句{0} ,{1}行记录受影响。  " , sqlstr, count));
18                   }
19             }
20       }
21    }
22  }
23 
24 
复制代码

 

 

我们来仔细分析上面的代码是怎么遵循“安全意识”的,
@1,先判断 obj 是否为空,如果不判断,下面的代码就可能出错;
@2,将 变量 obj 转换成一个字符串对象,如果使用下面的方式转换,有可能出现错误:
string sqlstr=(string)obj;

当然还有其它安全的转换方式,大家可以去找找看;
@3,转换可能不成功,需要再此判断字符串对象是否为空引用或者空字符串,否则下面的查询会出错;
@4,sqlstr.ToLower(),确保它可以和后面的字符串比较,避免大小写问题;
@5,sqlstr.Split(';') 这句将输入的SQL字符串进行拆分,为什么要这样做?我们看看加入它的值是下面的 SQL语句会在呢么样:

delete from jjzb where jjdm='KF001' ; drop table tb_user--

如果有人哪天输入了这样的一条语句,那DBA或者系统管理员就该哭死了,sqlstr.Split(';')[0] 确保程序只会执行分号前面的SQL语句(该语句在步骤4已经确保安全了),从而不会有 SQL注入的问题。

    也许有人说了,这些SQL语句是我用后台管理工具输入的,很安全,可以确保没有问题,不用这么麻烦来判断吧?也许你只输入了一个空格,也许你的数据在传输过程中被黑客截获... ...
    也许,你也会说,加一个 try{...}catch{...} 不就好了吗?这只是掩盖了问题当并没有解决问题。

不要相信别人给你的任何输入”,谁知道这是仙女还是魔鬼呢?

安全问题无处不在,仔细检查一下你的程序旮旯,不要放过它,否则,你就可能后悔,“成功近在咫尺”却又“檫肩而过”。

 

 


    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/archive/2010/11/27/1889749.html,如需转载请自行联系原作者


相关文章
|
2月前
|
XML C# 数据格式
绝密档案曝光!Windows平台如何深挖一个dll背后的神秘依赖,揭露隐藏的秘密!
【8月更文挑战第14天】在Windows系统中,动态链接库(DLL)对程序运行至关重要。了解DLL的依赖关系有助于软件的调试与优化。本文以具体案例演示如何查看DLL依赖。首先确保环境已安装Windows及具备基本开发知识。
44 0
|
12月前
|
监控 安全 网络协议
黑客控制肉鸡三大利剑工具一次性全部学会
黑客控制肉鸡三大利剑工具一次性全部学会
263 0
|
监控 安全 API
免杀tips——敏感函数处理过国内主流杀软
免杀tips——敏感函数处理过国内主流杀软
245 0
|
Web App开发 Rust 安全
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
133 0
|
数据安全/隐私保护
分享五款没什么名气却意外好用的软件
噔噔噔噔,作为一个黑科技软件爱好者,电脑里肯定是不会缺少这方面的东西,今天的5款优质软件闪亮登场了。
157 0
分享五款没什么名气却意外好用的软件
抵制360屏蔽了所有用户广告的代码想法
360 7.5版本屏蔽了所有用户广告,这对于举步维艰的个站来说,不吝于雪上加霜。详见:http://edu.codepub.com/2010/0910/25816.php 360应该不应该加入这个功能,咱不讨论,只是从生存的角度考虑,觉得有必要抵制下360
128 0
|
SQL 架构师 数据库
伤害技术人的13项法宝,太残忍了,刀刀见血,请勿轻易尝试
调研: 你被文中多少种法宝伤害过? [A] 7-9种 [B] 9-11种 [C] 12-13种 [D] 13种以上,还见过更过分的?
642 0
|
安全 Windows
蠕虫创建多重替身 利用伪装术迷惑用户
        蠕虫W32.Korron.B可谓“功能”繁多,创建多重替身、善于伪装的特点令用户难以察觉。  病毒名称:W32.Korron.B  病毒类型:蠕虫  受影响的操作系统:Windows 2000/XP/Vista/NT、Windows Server 2003  病毒分析:  修改系统设置、替换特定文件、结束杀毒软件进程—W32.Korron.B蠕虫可谓“功能”繁多;创建多重替身、善于伪装的特点也令用户难以察觉该蠕虫在系统中的存在和危害。
849 0
|
Web App开发 安全 Windows
IE浏览器又曝出新安全漏洞 IE8未能幸免
3月2日消息,据国外媒体报道,微软日前承认,正在调查IE浏览器的一处新漏洞,该漏洞允许黑客在Windows XP计算机中植入恶意软件。 该漏洞是由安全公司“iSEC安全研究中心”分析师Maurycy Prodeus发现的,并公布了攻击代码。
962 0
|
安全 测试技术 区块链
游戏安全资讯精选 2018年第八期:3975款游戏被查处,游戏圈重击;Memcached被利用UDP反射攻击漏洞预警;VentureBeat称区块链或可定位和消除恶意可执行代码的安全问题
3975款游戏被查处,游戏圈重击;Memcached被利用UDP反射攻击漏洞预警;VentureBeat称区块链或可定位和消除恶意可执行代码的安全问题
6031 0
下一篇
无影云桌面