Reader's Digest

Digest your Internet

随机得到Access数据库记录

Written By: dch1 - May• 01•08
由于Access数据库记录集缓存的原因,从代码里得到Access数据库随机记录是得不到,需要用随机SQL语句的办法来消除缓存。
   
  下面就是例子:
   
  查看例子http://dotnet.aspx.cc/Exam/GetRandom.aspx
   
  <%@ Page Language=”C#” Debug=”true” %>
  <%@ import Namespace=”System.Data” %>
  <%@ import Namespace=”System.Data.OleDb” %>
  <title>随机得到Access数据库记录</title>
  <script runat=”server”>
  void Page_Load(Object src,EventArgs e)
  {
  if(!IsPostBack)
   {
   string MyConnString = “rovider=Microsoft.Jet.OleDB.4.0;Data Source=”
   + Server.MapPath(“aspxWeb.mdb.ascx”);
   Random R = new Random();
   int intRandomNumber = R.Next(1,1000);
   
   string sql = “select top 10 id As 序号,Title As 标题 from Document Order By Rnd(”
   + (-1 * intRandomNumber).ToString() + “*id)”;
   OleDbConnection MyConnection = new OleDbConnection(MyConnString);
   MyConnection.Open();
   OleDbCommand cmd = new OleDbCommand(sql,MyConnection);
   OleDbDataReader dr = cmd.ExecuteReader();
   
   DataGrid1.DataSource = dr;
   DataGrid1.DataBind();
   cmd.Dispose();
   MyConnection.Close();
   MyConnection.Dispose();
   MyConnection = null;
   }
  }
   
  </script>
  <form runat=server>
  <aspataGrid id=”DataGrid1″ HorizontalAlign=”Center”
   Width=”600px” runat=”server” Font-Size=”9pt”>
   <AlternatingItemStyle BackColor=”#EEEEEE”></AlternatingItemStyle>
   <HeaderStyle BackColor=”#AAAADD” Font-Bold=”True” HorizontalAlign=”Center” />
  </aspadtaGrid>
  </form>

ASP、IIS的安全漏洞

Written By: dch1 - May• 01•08
当ASP以其灵活、简单、实用、强大的特性迅速风靡全球网站的时候,其本身的一些缺陷、漏洞也正威胁着所有的网站开发者,继上一篇中介绍了一些IIS的系统漏洞及ASP的安全问题后,本期中将针对最新的ASP、IIS安全漏洞进行详细的探讨,请所有的ASP网站开发者密切关注,提高警惕。

  本月初微软再次被指责对其出品的WEB服务器软件的安全问题不加重视。在微软的流行产品IIS SEVER4.0中被发现存在一种被称为“非法HTR请求”的缺陷。据微软称,此缺陷在特定情况下会导致任意代码都可以在服务器端运行。但用发现这一漏洞的Internet安全公司eEye的CEO Firas Bushnaq的话说:这只是冰山一角而已。Bushnaq说,微软隐瞒了些情况,比如黑客可以利用这一漏洞对IIS服务器进行完全的控制,而恰恰许多电子商务站点是基于这套系统的。
   下面罗列出了该IIS系统漏洞的详细情况:

   IIS的最新安全漏洞

   受影响的系统:

   Internet Information Server 4.0 (IIS4)

   Microsoft Windows NT 4.0 SP3 Option Pack 4

   Microsoft Windows NT 4.0 SP4 Option Pack 4

   Microsoft Windows NT 4.0 SP5 Option Pack 4

   公布日期:6.8.1999

   microsoft已经证实了这个漏洞,但目前还没有提供可用的补丁程序。

   微软安全公告 (MS99-019):

   主题:”非正常的 HTR 请求” 漏洞

   发布时间: 6.15.1999

  摘要:

  微软已经证实在其发布的WEB服务器产品Internet Information Server 4.0中存在一个严重的系统漏洞,该漏洞导致对于IIS服务器的“服务拒绝攻击”,在这种情况下,可能导致任何2进制代码在服务器上运行。有关该漏洞的补丁将在近期发布,请所有IIS用户密切关注。
  漏洞介绍:

  IIS支持多种需要服务器端处理的文件类型,譬如:ASP、ASA、IDC、HTR,当一个WEB用户从客户端请求此类文件时,相应的DLL文件将自动对其进行处理。然而在ISM.DLL这个负责处理HTR文件的文件中被发现存在严重的安全漏洞。(注:HTR文件本身是用来远程管理用户密码的)

  该漏洞包含了一个在ISM.DLL中未经验证的缓冲,它可能对WEB服务器的安全运作造成两方面的威胁。首先,是来自服务拒绝攻击的威胁,一个来自非正常的对.HTR文件请求将导致缓存溢出,从而直接导致IIS崩溃,当这种情况发生时,无须重启服务器,但是IIS WEB 服务器必须重新启动。另一个威胁更令人头痛,通过使用一个精心构建过的文件请求将可以利用标准的缓存溢出手段导致2进制代码在服务器端运行,在这种情况下,什么都可能发生!该漏洞不包括提供用来管理用户密码的功能的.HTR文件。
  原理分析:

  至少在一个IIS的扩展名中(例如:ASP,IDC,HTR)存在溢出。我们推测溢出将在IIS把完整的URL传递给DLL去处理扩展名时发生。如果ISAPI DLL 没有正确的检查限制范围从而导致INETINFO.EXE产生一个溢出,用户就从可以远端执行2进制代码。攻击方法:向IIS发一个如下的HTTP请求:”GET /[overflow].htr HTTP/1.0″,IIS将崩溃。这里的[overflow]可以是3K长的代码。

  大家可能对.HTR文件不是很熟悉,其实IIS具有让NT用户通过WEB目录/iisadmpwd/更改自己的口令的能力。而这个功能正是由一组.HTR文件和ISAPI的一个扩展DLL: ISM.DLL实现的。当一个完整的URL传递到ISM.DLL时,由于没有适当的大小限制的检查,就会导致溢出产生,从而使得服务器崩溃。HTR/ISM.DLL ISAPI 是IIS4缺省安装。
  解决途径:

  由于目前微软尚未发布可供使用的补丁程序,因此我们只能做一些应急的防范。

  1、将.HTR扩展名从ISAPI DLL 的列表中删除

  在你的NT桌面上,点击“开始”—>“程序”—>“Windows NT 4.0 Option Pack”—>“Microsoft Internet Information Server”—>“Internet 服务管理器”;双击“Internet Information Server”;鼠标右键单击计算机名称并选择“属性”;在“主属性”下拉式菜单中选择“WWW服务”并点击“编辑”按钮;选择“主目录”文件夹,并点击“配置”按钮,在“应用程序映射”列表框中选中.HTR的相关映射,选择“删除”,并确定。
   2、安装微软提供的补丁程序,请密切关注以下网址

   http://www.microsoft.com/security

   http://www.microsoft.com/security/products/iis/CheckList.asp

  可能一些朋友会感到不解,为什么我在ASP篇17、18期连续利用两大篇幅着重讨论IIS、ASP的安全性问题,如果你是一个WEB开发者、ASP程序员,我想你就应该能够体会我的用意。我们进行网络编程、开发交互性的网站,当然首先是为了发展、建设自身网站,但是这一些都是建立在安全的基础上,这里的安全包括对自己辛辛苦苦开发的ASP或其他网络应用程序代码的保护、确保网站服务器安全正常的运行、确保用户信息的安全及认证等等,当今后电子商务成为真正广泛运作的一种商务运行手段后,安全性更是关键之关键。我们中的很多朋友在作为ASP程序员的同时又身兼网络管理员的职责,因此熟悉系统的运作、及时了解系统漏洞、第一时间解决安全性问题就显得十分重要和必要,因此在本文的结尾,作者将整理的一些关于NT、IIS系统配置的安全性建议罗列出来,希望能给大家一些帮助。
  1、使用最新版本的Microsoft Internet Information Server4.0,并安装NT最新版本的Service Pack5,服务器的文件系统不要使用FAT,应该使用NTFS。

  2、把IIS中的sample、scripts、iisadmin和msadc等web目录设置为禁止匿名访问并限制IP地址。在微软还没有提供补丁之前,把ism.dll有关的应用程序映射删除。

  3、有条件的话就采用防火墙机制,最简单的如web服务开在前台,目录放在后台,如果能一个服务一台机当然最好。

  4、Web目录,CGI目录,scripts目录和winnt目录等重要目录要用NTFS的特性设置详细的安全权限,包含注册表信息的Winnt目录只允许管理员完全控制,一般的用户只读的权限也不要给。凡是与系统有关的重要文件,除了Administrator,其它帐号都应该设置为只读权限,而不是everyone/完全控制 。

  5、只开你需要的服务,block掉所有不应该打开的端口,如NetBios端口139,这是一个典型的危险端口;怎样禁止这些端口?除了使用防火墙外,NT的Tcp/IP设置里面也提供了这种功能:打开控制面板-网络-协议-TCP/IP-属性-高级-启用安全机制-配置,这里面提供了TCP和UDP端口的限制和IP协议的限制功能。

  6、管理员的帐号要设置得复杂一些,建议加入特殊字符。

  7、把FTP,Telnet的TCP端口改为非标准端口,通常我都是设置到10000~65000的范围

  8、删除可以删除的所有共享,包括打印机共享和隐藏的共享如ICP$,Admin$等,微软说这些特殊共享资源很重要,大多数情况下不能删除,而实际上放在Internet上的机器大多数不需要共享。

  IPC$: 适用于远程管理计算机和查看共享资源,在网上最好不要用

  Admin$: 实际上就是 c:winnt,也没有必要共享

  C$: 登录为Admin和Backup-operator的用户可以用\计算机名C$的方式访问C盘,虽然仅限于局域网,但是远程黑客也有办法伪装成局域网的登录用户,所以都应该关掉。

  Print$: 这是放打印机驱动程序的目录,与上面的一样也是个很危险的入口。

  Netlogon: 这是处理域登录请求的共享。如果你的机器为主域控制器,域内有其它机器要登录进来,就不要删除它,否则照样可以删除。

  如何关闭这些共享?用“服务器管理器”—>“共享目录”—>“停止共享”

  9、将ASP的目录集中管理,ASP的程序目录设置详尽的访问权限,一般建议不要使用“读”权限。

  10、把winnt下的sam._文件改名,实践证明这个可能泄露密码的文件可以删除不要。

  11、对于已知的NT安全漏洞,都应该在自己的机器上做测试检查。并及时安装补丁程序。

  12、有必要的情况下采用IIS4.0提供的SSL安全通信机制来防止数据在网上被截获。

如何实现Asp与Asp.Net共享Session

Written By: dch1 - May• 01•08

微软.net中,Session的存储机制已经与Asp的存储机制不一样,虽然可以在同一个IIS下同时运行asp与aspx,但是它们之间不能传递Session。
之前大批系统应用到了asp,在升级过程中,如果完全抛弃asp来重写,一来工作量太大,二来以前的成果不能保存下来。
所以微软提出了一个Session共享的解决方案,只是此文档光说明原理,并没有说具体的操作步骤,由此,我撰文描述过程。

简单说明原理,asp与asp.net之间的Session统一存储在数据库中来实现共享

1、创建数据表
打开SQL Server查询分析器,运行以下脚本来创建数据表,数据表名为SessionState
if exists (select * from sysobjects where id = object_id(N'[dbo].[SessionState]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
drop table [dbo].[SessionState]
GO

create TABLE [dbo].[SessionState] (
[ID] uniqueidentifier NOT NULL ,
[Data] [image] NOT NULL ,
[Last_Accessed] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

alter TABLE [dbo].[SessionState] WITH NOCHECK ADD
CONSTRAINT [PK_SessionState] PRIMARY KEY NONCLUSTERED
(
[ID]
) ON [PRIMARY]
GO

2、下载以下文件 Session.rar

将文件解压后,将产生4个文件,分别作如下操作。
复制 global.asa 到系统根目录下,并打开文件,修改Application(“SessionDSN”) 为合适的数据库链接字符串,如果系统本身已经有了global.asa,则在此文件中添加如下Application:
Application(“SessionDSN”) = “initial catalog=SqlServerName;persist security info=False;user id=sa;password=****;packet size=4096″
在系统的 Web.config 文件中,添加此项
<add key=”SessionDSN” value=”data source=SqlServerName;initial catalog=SessionDemoDb;persist security info=False;user id=SessionDemoDbUser;password=****;packet size=4096″ />
并将其值修改为合适的数据库链接。
将另外两个dll文件复制到系统目录下(或其他合适目录)

3、关闭IIS中Asp的Session选项
打开IIS,选择站点,依次选择属性 -> 主目录 -> 配置 -> 应用程序选项,将启用会话状况前的复选勾去除。如下图:
screen.width-350)this.width=screen.width-350″ border=0>

4、安装SessionUtility.dll
首先找到 gacutil.exe 文件,一般情况下在 Microsoft Visual Studio .NET 2003SDKv1.1Bin 目录下
在命令提示符窗口中,执行 gacutil /i SessionUtility.dll,(如果执行失败,请将这两个文件的路径都写全了)

5、注册SessionUtility.dll为Com对象
同样,要找到 regasm.exe 文件,一般情况下在 WINNTMicrosoft.NETFrameworkv1.1.4322 目录下
在命令提示符窗口中,执行 regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb,(如果执行失败,请将这两个文件的路径都写全了)
这样就会产生出一个tlb文件,可当做普通的Com组件来调用。

6、注册SessionManager.dll
这个很简单了,在命令提示符窗口中,执行regsvr32 SessionManager.dll

7、如果是NTFS格式的系统,请找到 SessionMgr.dll,右键点击,属性,将IUSR_<machine_name>权限设置为可读和可执行。

至此,我们已经可以实现了Asp与Asp.net之间Session共享了,那么怎么去用

在Asp中,我们要如下使用:
页面开始端
Dim Session
Set Session = Server.createObject(“SessionMgr.Session2”)
Session(“UserID”) = …



页面结束端
Set Session = Nothing ‘记得一定要释放哦

而在Asp.net中,我们要如下使用:
首先,我们要添加对SessionUtility的引用
然后,编码时,原来是这样的继承 public class WebForm1 : System.Web.UI.Page,修改为public class WebForm1 : MSDN.SessionPage
这样在编码过程中就可以使用Session(“UserID”)这样的形式了。

注意:虽然Session实现了共享,但是Session的使用语法,相对于.net中新增的部分,就没有实现,毕竟要照顾asp
譬如Session.Remove,就不能用了。