您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

ASP.NET与ASP安全性问题

添加时间:2012-5-23  添加: admin 
ASP.NET与ASP安全性问题

   我想写这个文章,告诉一些开始学习写程序的人,怎么让他的代码更安全。

   从我写ASP到现在,大约有12年了,我写ASP的时候,那时用 WIN NT 4.0环境,安全性很不好,在地址后加几个特殊字符

,就可以看到ASP的源代码了, 后来,在多年写ASP的过程中,碰到无数的黑客试图黑我作的网站,花样百出,因此我一直特别

注重程序的安全性。

   现在为止,很久没有写ASP了,改为用c#写 ASP.NET,不可否认,ASP.NET由于结构的关系,确实容易比ASP做得更安全,

但是,在ASP中几乎所有潜在的安全危险,在ASP.NET中几乎都存在,好处是ASP.NET源代码不开放,因此,黑客不太容易琢磨你

这个系统的代码后,作很有针对性的攻击。

  实际上,我认为,不管ASP,ASP.NET,PHP,JSP,甚至是C/S结构的程序,都可能面临两个主要的共同的安全威胁:

   1. 注入SQL。

   2. 上传木马。

而对网站程序,或是所有B/S结构的程序的开发者而言,他们要作的,主要就是防这两项,其它的都是小问题了,这两个搞定,

网站一般就不那么容易被黑了。

  1. 注入SQL,我们先看看什么是SQL注入,就是想办法提交一个特殊的字符串,改变你的SQL语句,让其变成其它的意思,

达到黑客的目的,我举个非常简单例子, 比如,我要验证一个用户的用户名和密码,如果找到了这个用户,就让他登录,很多

入门的人,会写这么一个SQL语句:

      SELECT * FROM USERS WHERE UserName='ADMIN'  and PassWord ='123456'  

这个语句看起来没问题,从用户输入的文本框中,得到用户名和密码,然后用他们来组装SQL语句,如果找到这个记录,说明用户

名和密码正确,让他登录,如果找不到,说明错误,不让他登录,这看起来很完美,但实际上,这个语句完全没有安全性,如果

用户在密码那里, 输入一个 '   or 1=1  ,这样一样,我们看这个语句成了什么呢?

       SELECT * FROM USERS WHERE UserName='ADMIN'  and PassWord ='' or 1=1

  好了, 这样他就能以ADMINA的身份登录了,我们再想一下,如果这个黑客,他多花点心思,就可以写入一些修改数据库,罗

列数据,破坏数据的语句,这就是SQL注入。

   那怎么注入SQL语句呢?

   方法很多,最简单的, 比如我们看很多网站,都有这样的地址,比如:http://www.iisp.com/vhost/g.php?s=macui

样的地址。这里我们要用 menuid 这个参数,往SQL语句中传值,于是这成了一个注入的入口,这是最简单的。

   还有一种,很多网页上,都要填写表单,比如作站内搜索,我们知道这个文本框提交之后,也会用来组装SQL语句,这也

成了注入的切入点。

   第三种,用COOKIES,很多用站点,他会用一些COOKIES来保存一些用户数据,比如让用户不掉线,过了SESSION的有效期

后,用COOKIES中的数据登录一次,用户看起来就不会掉线了。但这个COOKIES是可能被有的软件改写的,于是成了SQL注入的来

源。

  如何防止SQL注入?

  从上面,我们看到,凡是SQL注入,黑客必然会想办法提交一些特殊的字符串给我们的程序,组装出一个异常的SQL字符串,

那么,实际上要仿SQL注入,本质上,就是要对客户端提交的数据小心在意,我们可以用下面的办法让黑客的招数失效。

   第一, 过滤,所以要用来组装SQL语句,并且这数据的来源是是从客户端的来字符串,我们都对它进行过滤,把一些危

险可能用来注入SQL但实际上并不常用字符串过滤掉,比如单引号,大于号,小于号,等于号,空格之类,把这些过滤之后,黑

客就没法组装出正确的SQL语句,程序执行到那里就会出错。 它就不能得逞了。

   第二,严谨规范的语句,这主要是写 Request 时要小心。很多人,不管读COOKIES, GET提交的数据,POST 提交的数

据, 统统用一个 Request 来解决, 这个是很危险的。这是怎么回事呢?有一次,我发现我写的程序,被人注入了,因为每

个语句去写过滤的代码太累了,所以我就在程序的前面,写了一个遍历所有GET,POST提交的数据的程序,只要发现这里面有非法

字符,就过滤掉,按理说应该很安全呀,结果后来,我发现我的程序,所有获取数据时,都是写的Request[“A”],这样的代码

,没有区别,结果黑客就自己假造了一个COOKIES,利用COOKIES比较优先,从而绕过了我的过滤,成功的注入SQL,  从此之后,

我就认真的成: Request.Form;Request.QueryString;Request.Cookies;

   第三,用存储过程,有时,我们会碰到一些不能过滤,但又要用来作查询条件的东西,这时怎么办呢?用存储过程,把这

些本来要用来组装SQL语句的字符串,变成存储过程的参数,在存储过程中查询,这样,就避免了组装SQL语句,不给黑客机会。

但也要注意,有一次,我看到一个程序员作的程序,他说他用了存储过程,还是被黑了,怎么回事呢?我看看, 发现这人,好

家伙,他把参数传进去,在存储过程中过程中组装成一个 SQL字符串,再 EXEC 执行他, 晕呀。

关键词:安全性 asp asp.net
分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站