asp

知识博客专集

asp 中SQL多表查询语句


asp access数据库环境中,表a是基础信息。表b是业务记录。

表a的结构:item_id,name,price,分辨为产品代码,品名,价格

表b的结构:item_id,date,num,分辨为产品代码,日期,数量

现在在查询表b时,显示item_id,data,num的同时,还要显示表a中相对应的name,price即品名和价格字段。

代码要如何写?

sql =\”select * froma where item_id=\’\”trim(item_id)\”\’ order by item_id asc\”

sql =\”select a.*,b.date,b.num from a inner join b on a.item_id = b.item_id where a.item_id = \’\”trim(item_id)\”\’ order by a.item_id asc\”

显示b表item_id,data,num的同时,在代码里通过b表item_id的字段去查a表item_id=b表item_id的数据,再把查出来的信息显示出来就好了

如何在ASP.NET中下载文件


  这是笔者常被问到的一个问题,如何通过asp.net来下载文件,这个问题可大可小,我们先从小的开始。当我们要让用户下载一个文件,最简单的方式是通过response.redirect指令:

  response.redirect(\”test.doc\”)

  您可以把上面这行指令放在button的click事件当中,当用户点击按钮之后,网页就会被转址到该word档,造成下载的效果。

  但是这样的下载有几个问题:

  1、无法下载不存在的文件:例如,我们若是想把程序动态(临时)产生的文字,当作一个文件下载的时候(也就是该文件其实原先并不是真的存在,而是动态产生的),就无法下载。

  2、无法下载存储于数据库中的文件:这是类似的问题,该文件并没有真的存在,只是被存放在数据库中的某个位置(某笔记录中的某个栏位)的时候,就无法下载。

  3、无法下载不存在于web文件夹中的文件:文件确实存在,但该文件夹并不是可以分享出来的web文件夹,例如,该文件的位置在c:\\winnt,您总不会想要把该文件夹当作web文件夹吧?这时候,由于您无法使用redirect指向该位置,所以无法下载。

  4、下载文件后,原本的页面将会消失。

  典型的状况是,我们要让用户下载一个。txt文件或是。csv格式的excel文件,但是……

  1、这个文件可能是通过asp.net程序动态产生的,而不是确实存在于server端的文件;

  2、或是它虽然存在于伺服器端的某个实体位置,但我们并不想暴露这个位置(如果这个位置公开,很可能没有权限的用户也可以在网址栏上输入url直接取得!!!)

  3、或是这个位置并不在网站虚拟路径所在的文件夹中。(例如c:\\windows\\system32……)

  这时候,我们就得采用不同的方式:

  shared function downloadfile(byval webform as system.web.ui.page,   byval filenamewhenuserdownload as string, byval filebody as string) webform.response.clearheaders() webform.response.clear() webform.response.expires = 0 webform.response.buffer = true webform.response.addheader(\”accept-language\”, \”zh-tw\”) \’文件名称 webform.response.addheader(\”content-disposition\”, \”attachment;   filename=\” & chr(34) & system.web.httputility.urlencode(filenamewhenuserdownload,     system.text.encoding.utf8) & chr(34)) webform.response.contenttype = \”application/octet-stream\” \’文件内容 webform.response.write(filebody) webform.response.end() end function

  上面这段代码是下载一个动态产生的文本文件,若这个文件已经存在于服务器端的实体路径,则可以通过下面的函数:

  shared sub downloadfile(byval webform as system.web.ui.page,   byval filenamewhenuserdownload as string, byval filepath as string) webform.response.clearheaders() webform.response.clear() webform.response.expires = 0 webform.response.buffer = true webform.response.addheader(\”accept-language\”, \”zh-tw\”) \’文件名称 webform.response.addheader(\”content-disposition\”, \”attachment;   filename=\” & chr(34) & system.web.httputility.urlencode(filenamewhenuserdownload,     system.text.encoding.utf8) & chr(34)) webform.response.contenttype = \”application/octet-stream\” \’文件内容 webform.response.write(system.io.file.readallbytes(filepath)) webform.response.end() end sub

  上面这两个下载文件的的函数,应可解决大多数开发人员在asp.net当中的文件下载问题。

ASP错误ASP 0201的解决方法


使用asp开发网站,今天iis突然出现做这种提示:

active server pages 错误 \’asp 0201\’
默认脚本语言无效
为该应用程序指定的默认脚本语言无效。

问题是今天出现的,昨天还好好的,忘了自己具体做了哪些操作。

进一步观察发现只有asp的页面会这样提示,html正常!百思不得其解,google and baidu之!
网上的解决方法都如出一辙。重装iis,删除xxx…,重装系统!
除重装系统外其它都度过,无一可行!

最后找了一个解决方法,但不知道是否有什么副作用!献出来大家看看!
其实很简单:只要将系统用户中的iusr_xxx(xxx示你的系统而定,就是internet 来宾帐号 )加到administrators组中!再重启iis服务就可以了!这种方法适用于本机调试程序,服务器上不建议使用,因为还不知道是否有安全问题!

另一种方法是网上找到的:右击站点,权限向导-下一步,s-s完成!这样访问时就要使用账号密码访问了,通过认证后asp也可正常解析,但很不方便,这种方法对服务器来说也解决不了问题!

以下是收集到的几种解决方法,我试过是不行,但也有人说可以的,所以你也可以试试看!

方法一
在运行里面regsvr32 /u scrrun.dll
regsvr32 scrrun.dll
另,如果还是不行,可以试试把iis卸载,然后把wwwroot目录删除,重新安装iis.

方法二
1、删除“internet信息服务”,
2、重启机子,按f8进入“安全模式”,
3、在安全模式下将“c:\\inetpub”、“c:\\windows\\iis6.log”、“c:\\windows\\system32\\inetsrv”这几个东西重命名。
4、重启机子,在正常模式下安装“internet信息服务”,安装完毕删除重命名文件。
5、如果还不能解决问题,打开“internet信息服务”,“重新启动iis”。

方法三
1、单击开始,指向程序,指向管理工具,然后单击 internet 信息服务。
2、在控制台树中,单击默认 web 站点。在显示窗格中,右键单击 默认 web 站点,然后单击属性。
3、在目录安全性选项卡的匿名访问和身份验证控制中,单击编辑。
4、在身份验证方法属性页中,单击去掉匿名访问的勾。
5、确定。

ASP.NET 中的ViewState 视图状态


    视图状态管理是一种简单且方便的技术。通过视图状态管理,控件开发者可以在一个原本无状态的环境下模拟有状态的且看起来是持续执行的运行效果。其具体过程为:每当用户请求某个.aspx页面时,.net框架首先把相关控件的状态序列化成一个字符串,然后将其作为名为__viewstate的隐藏域的 value值发送到客户端。如果页面是第一次被请求,那么服务器控件也将是被第一次执行,名为__viewstate的隐藏域中只包含控件的默认信息,通常为空或者null。在随后的回送事件中,viewstate中就保存了服务器控件在签名回送中可用的属性状态。这样服务器控件就可以监视在当前被处理的回送事件发生之前的状态了。这些过程是由.net框架负责的,对用户来说,执行.aspx页面就有了持续执行的效果。

最常见的视图状态管理的方法是应用服务器控件的viewstate属性。viewstate是syetem.web.ui.statebag类型,即一个键/值对的字典,服务器控件的属性值可以存储在viewstate中。

public string text
{
     get
     {
           return (string)viewstate[\"text\"];
     }
     set
     {
           viewstate[\"text\"] = value;
     }
}

通过set访问器,将属性text的值写入viewstate[\"text\"]对象中;通过get访问器,从对象 viewstate[\"text\"]中获取属性值。这就是视图状态处理最简单的方法。在这个过程中的trackviewstate、 saveviewstate、loadviewstate等视图状态管理过程都是由.net框架自动完成的。

默认情况下,viewstate只能保存少数数据类型,它们是string、int、bool、array、arraylist、hashtable等。如果属性存储的是其他数据类型,则必须编写子定义的视图状态管理程序。

另外,使用viewstate时,对象必须先序列化,然后再通过回传进行反序列化。因此,做为一个优秀的控件开发者必须了解有关viewstate 性能的内容。默认情况下,控件的viewstate将被启用,如果不需要使用viewstate,最好还是将它关闭。以下情况将不再需要 viewstate:控件未定义服务器端事件(这时的控件事件均为客户端事件且不参加回送的);控件没有动态的或数据绑定的属性值。其关闭 viewstate的方法是将控件的enableviewstate的值设置为“false”,即enableviewstate=\”false\”。

最后,还需要了解一些有关视图状态安全性方面的内容。当查看__viewstate隐藏域时,看到的只是一些没有意义的字符串。这是.net框架通过base64位编码对相关内容编码的结果,默认情况下它们是通过明文方式在客户端和服务器端之间往返传送。在某些情况下,例如涉及密码、帐号、连接字符串等敏感内容时,使用默认方式是很不安全的,为此,.net框架为viewstate提供了以下两种安全机制。

    * 校验机制:可以通过设置enableviewstatemac=\”true\”属性来指示.net框架向viewstate数据中追加一个散列码(该散列码是一种sha1类型,长度有160位,因此会严重影响执行性能)。在回传事件发生时,将重新建立该散列码,它必须和最初的散列码匹配。通过这种方式,能够有效检验viewstate在传送过程中是否能够被篡改。默认情况下,.net框架使用sha1算法来生成viewstate散列代码。此外,也可以通过在machine.config文件中设置<machinekey>来选择md5算法,例如<machinekey validation=\”md5\”/>。md5算法的性能要比sha1算法好一些,但是同样不够安全。
    * 加密机制:使用加密来保护viewstate字段中的实际数据值。首先,必须如上述设置enableviewstatemac=\”true\”。然后,将machinekey validation类型设置为3des,即<machinekey validationkey=\”autogenerate\” decryptionkey=\”autogenerate\” validation=\”3des\”>,这指示asp.net使用3des加密算法来加密viewstate值。

以上是 视图状态管理概述——《asp.net服务器控件开发技术与实例》摘录。

方案

视图状态由 asp.net 页框架自动用于保存在各个回发之间必须保留的信息。此信息包括控件的任何非默认值。

您还可以使用视图状态来存储特定于页的应用程序数据。

功能

视图状态是 asp.net 页中的存储库,可以存储必须在回发过程中保留的值。页框架使用视图状态在各个回发之间保存控件设置。

可以在您自己的应用程序中使用视图状态完成以下工作:

    *

      在各个回发之间保存值,而不将这些值存储在会话状态或用户配置文件中。
    *

      存储您定义的页或控件属性的值。
    *

      创建一个自定义视图状态提供程序,以便将视图状态信息存储在 sql server 数据库或其他数据存储区中。

例如,您可以将信息存储在视图状态中,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程中访问这些信息。有关推荐的使用方法

背景

web 应用程序是无状态的。每次从服务器请求页时,都会创建网页类的一个新实例。这通常意味着在每次往返过程中会丢失该页及其控件中的所有信息。例如,默认状态下,如果用户将信息输入到 html 网页上的文本框中,

该信息会发送到服务器。但是,该信息不会在响应中返回到浏览器。

为了克服 web 编程的这一固有的局限性,asp.net 页框架包含几种状态管理功能,可以在往返过程之间将页和控件值保存到 web 服务器。其中一种功能便是视图状态。

默认情况下,asp.net 页框架使用视图状态在往返过程之间保存页和控件值。在呈现页的 html 时,必须在回发过程中保留的页和值的当前状态将被序列化为 base64 编码字符串。然后,它们将被放入页中的一个或多个隐藏字段。

您可以在代码中使用页的 viewstate 属性访问视图状态。viewstate 属性是一个包含键/值对(其中包含视图状态数据)的字典。

ASP.NET 学习路线图


如果你已经有较多的面向对象开发经验,跳过以下这两步:pny平坦软件园
pny平坦软件园
第一步 掌握一门.net面向对象语言,c#或vb.net 我强烈反对在没系统学过一门面向对象(oo)语言的前提下去学asp.net。 asp.net是一个全面向对象的技术,不懂oo,那绝对学不下去!pny平坦软件园
pny平坦软件园
第二步 对.net framework类库有一定的了解 可以通过开发windows form应用程序来学习net framework。asp.net是建构在.net framework之上的技术,你对.net framework了解得越深,学习asp.net就越快。 举个例子:下面简单列出几个对掌握asp.net非常重要的概念: 对象的内存模型,委托,事件,多线程,程序集和应用程序域,安全模型 .net framework当然还有许多其它的东西,但不理解与把握清楚上述这些东西,是很难真正把握asp.net的。 出于急迫的心情与现实的考虑,不少人没有扎实的面向对象基础就想直接学习asp.net,其结果只能是欲速则不达。 在具备了oo基础之后,以下是具体的学习asp.net技术步骤。pny平坦软件园
pny平坦软件园
第一步:学习html与csspny平坦软件园
pny平坦软件园
这并不需要去学一大堆的诸如dreamweaver,firework之类的各种网页设计工具,关键是理解html网页嵌套的block结构与css的box模型。许多asp.net控件最后都必须转化为html。而且,div css是当前主流的网页布局模型。 学习这部分时,关键在于理解概念,而不需要将精力花在美化页面的许多技巧上,那是网站美工的工作,不是程序员的工作。pny平坦软件园
pny平坦软件园
第二步:学习javascript.javascript不是javapny平坦软件园
pny平坦软件园
它主要运行于浏览器端。可以完成许多工作,功能也很强大:比如它将客户端网页中的html元素看成一棵树,可以编写代码访问并修改树节点,动态生成新的html代码,从而达到动态修改网页显示特性的目的.javascript在目前的网站开发中用得很多,非常重要。另外,它也是目前非常流行的ajax技术的基础。pny平坦软件园
pny平坦软件园
第三步:学习计算机网络原理pny平坦软件园
pny平坦软件园
找一本大学教材,重点看看它的有关互联网的部分,了解一些域名解析和http协议等知识。这是进行互联网开发的理论基础。pny平坦软件园
pny平坦软件园
第四步:学习asp.net表示层技术pny平坦软件园
pny平坦软件园
会设计web页面需要结合先前打好的面向对象技术的基础,至少掌握以下内容pny平坦软件园
(1) 各种web控件的使用方法pny平坦软件园
(2) 理解信息在网页中的传送方式,比如cookie,viewstate,session等的使用。pny平坦软件园
(3) asp.net应用程序与网页的生命周期,以及相关对象(比如httpcontext,response,request)的用途。pny平坦软件园
(4) asp.net实现事件驱动的内幕pny平坦软件园
(5) 自定义用户控件pny平坦软件园
pny平坦软件园
再次强调一下,没有oo基础,很难掌握上述技术,就只能被这些东东牵着鼻子走了,会很被动。pny平坦软件园
pny平坦软件园
第五步 掌握数据库技术pny平坦软件园
pny平坦软件园
具体地说,要学习以下内容:pny平坦软件园
(1) 学会使用sqlserver2005:不要求精通它的各种工具与管理配置技术,但至少知道如何连接,如何建表,如何创建存储过程pny平坦软件园
(2) 学习ado.net,掌握使用代码人工访问数据库(别用vs2005的向导)的方法pny平坦软件园
(3) 学习数据绑定控件的使用pny平坦软件园
pny平坦软件园
第六步 理解多层架构pny平坦软件园
pny平坦软件园
这时,先前在oo学习阶段涉及到的程序集与应用程序域等就派上用场了,现在,网站架构大多采用多层架构:表示层、业务逻辑层、数据存取层以及数据库本身。可以先上网找一此多层架构的资料看,再找一个现成的比较复杂的开源asp.net项目分析一下其架构就差不多了。基本上都是一个套路,到处应用。有的朋友问:学习架构是不是必须学习设计模式。pny平坦软件园
pny平坦软件园
我的看法是:不必!当然,你如果学习过设计模式,那当然更好。但在实际开发中,如果只想着机械地套用某种模式,反而起不到好的结果。我的观点:在学习设计模式时要多思多悟,其思想就会渐渐地融入你的大脑,在真实的设计实践中,忘掉所有的写在书上的模式,一切从实际出发,相信你的直觉,只要达到设计要求的方案就是可行的方案,事实上,你这样做了之后,回过头来再看,会发现你的设计往往暗合设计模式的理论。pny平坦软件园
pny平坦软件园
第七步 学习xml与webpny平坦软件园
pny平坦软件园
先了解xml的基础知识,找本讲xml的书看一下就差不多了,然后,再学习web service。web service其实可类比为远程方法调用(以xml格式表达的调用信息)。pny平坦软件园
pny平坦软件园
学到了这里,如果你还有兴趣,不妨再去看看soa,不过soa的资料都是理论与概念,看起来比较郁闷,而且离实际开发可能比较远。所以,这是可选项。pny平坦软件园
pny平坦软件园
第八步 学习ajaxpny平坦软件园
pny平坦软件园
学习ajax的主要目的是创建具有更丰富特性的web表示层,而经过前面七步的学习,到此再学习ajax已水到渠成,所有的基础都已具备,不会有太大的问题了。在基础未具备的前提下直接学ajax,就象“浮沙之上筑高台”,所以,将ajax的学习次序安排在这里。pny平坦软件园
pny平坦软件园
第九步 学习ria技术pny平坦软件园
pny平坦软件园
ria:rich internet application,可看成是将c/s与b/s优点合二为一的尝试。就具体技术来说,主要指微软的silverlight(wpf_e),毕竟前头一路行来都是微软路线。不过目前学习它主要是为了技术储备。估计此技术的普及需要2到3年的时间,因为预装vista的机器去年才开始大卖。pny平坦软件园

提高ASP页面执行效率的方法分析


这些大都是与硬件相关。其实在软件上,好的程序设计的方法和正确的参数配置也可以提高程序的性能,有时 在同等情况下只要改变一个参数,程序执行效率就能大大提高。本文就试着在这方面做些探索。
  一.影响性能的因素
asp程序运行的性能主要决定于以下2个大方面:
1.html页面的执行效率
2.反应时间,其中反应时间主要受制于下面要素:
(1).asp页面的执行效率
(2).数据库因素
下面我们就来详细讨论一下。
  二.详细讨论
1.影响html的因素
html页面的执行效率是一个纯客户端的问题。影响这个问题的因素主要是客户端的硬件和他的网络带宽。除此之外,还有些下列因素也可以影响html页面的执行效率。
(1).图象因素。在html的页面尽量避免使用图象。这是因为当浏览器请求一个页面时,如果页面包含n个图象,这将使的浏览器要向web服务器请求n次调用。而这种请求会降低页面的加载进程。进而影响速度。
(2).框架问题。在网页里面使用框架同样也会降低页面的加载进程,和图象因素相似,加载一个n个框架也需要请求n次。
(3).表格问题,尽量避免使用表格,尤其是尽量避免使用多重表格,繁杂的表格会影响html的执行效率。
(4).去除多余的标记符,让我们来看看下面的例子:

webshell及ASP.NET木马安全解决方案


 security fuard solution of asp.net and webshell

文章简介:本文将为大家介绍在microsoft win系列的2003 server iis6.0中如何简单快速解决asp.net中的危险漏洞与隐患对web服务器系统的安全威胁之详细防范设置步骤;读完本文,您将可以使您的网站服务器免去asp.net木马、webshell所面对的提升权限、跨站攻击、甚至危害到系统安全的威胁。

asp木马、webshell之安全防范解决办法正文内容:

引子:大家都知道网上出现过类似介绍asp.net的漏洞以及相应的黑客攻击办法的文章,以及诸如webadmin.aspx类asp.net的webshell,如果您拿去到您的asp.net虚拟主机上测试时您就知道,这东东对c盘有读取权限,以及对整个硬盘都有修改、删除权限。那这样的话,我们的网站、我的服务器还有什么安全可言?在黑客频频攻击的今天,我们不能不为我们的服务器而担忧。

漏洞原因:大家知道asp中常用的标准组件即filesystemobject,这个组件为asp提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录 和文件进行读写、删除、改名等操作。fso对象来自微软提供的脚本运行库scrrun.dll中。而在asp.net中这个问题仍然存在,并且更加难以解决;因为.net中对系统io操作功能更加强大,如:组件不再需要用regsvr32来注册,而是直接在bin目录下就可以直接用了,所以这些功能对开发asp.net程序有很大方便是,但却使安全变得更为复杂了。

解决方案:
大家都知道,asp类木马可以通过对iis中的虚拟主机采用独立匿名用户来控制fso组件的安全,让其只能在站类活动,而不能跨站或者危害到其它硬盘的数据。asp的安全问题与设置这里不再作讨论,下面开始着手asp.net木马/webshell防范方法的讲解:

一、在iis6.0中,web应用程序的工作进程为以进程标识“network service”运行。而在iis5.0中,进程外web应用程序则是以“iwam_服务器名”用户运行行,这个user是普通的本地guests用户。网上有部份人提出针对此问题用microsoft .net framework configration设置system.io的对目录读取的权限,但很遗憾经过测试没有成功,难不成是.net framework1.1机制都改了?

network service 是内置帐户。了解iis5.0上的本地用户帐户(iusr和iwam)与这个内置帐户之间的区别是非常重要的。windows操作系统中的所有帐户都分配了一个sid(安全标识:security id)。服务器是根据 sid,而不是与sid相关的名称来识别服务器上所有帐户的,而我们在与用户界面进行交互时,则是使用名称进行交互的。服务器上创建的绝大部分帐户都是本地帐户,都具有一个唯一的 sid,用于标识此帐户隶属于该服务器用户数据库的成员。由于sid只是相对于服务器是唯一的,因此它在任何其他系统上无效。所以,如果您为本地帐户分配了针对某文件或文件夹的 ntfs 权限,然后将该文件及其权限复制到另一台计算机上时,目标计算机上并没有针对这个迁移sid的用户帐户,即使其上有一个同名帐户也是如此。这使得包含ntfs权限的内容复制可能出现问题。内置帐户是由操作系统创建的、一类较为特别的帐户 或组,例如system帐户、network service和everyone 组。这些对象的重要特征之一就是,它们在所有系统上都拥有一个相同的、众所周知的sid。当将分配了ntfs权限的文件复制到内置帐户时,权限在服务器之间是有效的,因为内置帐户的sid在所有服务器上都是相同的。服务中的 network service 帐户是特别设计的,专用于为应用程序提供访问网络的足够权限,而且在iis 6.0以上版本中,无需提升权限即可运行web 应用程序。这对于iis安全性来说,是一个特大的消息,因为不存在缓冲溢出,怀有恶意的应用程序无法破译进程标识,或是对应用程序的攻击不能进入system用户环境。更为重要的一点是,再也不能形成针对system帐户的“后门”,例如,再也无法通inprocessisapiapps元数据库项利用加载到inetinfo的应用程序。我们已经简单的介绍了一下asp.net中关于文件io系统的漏洞的防治方法,这一方法有些繁琐,但是却可以从根本上杜绝一些漏洞,我们讨论的只是很少的一部分,更多的解决放法需要大家共同来探索、学习。

network service帐户在创建时不仅仅考虑了在iis6.0中的应用。它还具有进程标识w3wp.exe的绝大部分(并不是全部)权限。如同aspnet用户为了运行asp.net应用程序,需要具有iis6.0服务器上某些位置的访问权限,进程标识 w3wp.exe 也需要具有类似位置的访问权限,而且还需要一些默认情况下没有指派给内置组的权限。

二、为了管理的方便,在安装iis6.0时创建了&quot;iis_wpg&quot;组(也称为iis工作进程组,iis worker process group),而且它的成员包括local system (本地系统)、local service(本地服务)、network service(网络服务)和iwam帐户。iis_wpg 的成员具有适当的ntfs的acls权限和必要的用户权限,可以充当iis 6.0中工作进程的进程标识。

三、因此,network service帐户提供了访问上述位置的权限,具有充当 iis 6 工作进程的进程标识的充足权限,以及具有访问网络的权限

msdn上说:用户上下文称为network service。这些用户帐户是在 .net framework安装过程中创建的,它具有唯一的不易破解的密码,并仅被授予有限的权限。aspnet或network service用户只能访问运行web应用程序所需的特定文件夹,如web应用程序存储 已编译文件的\\bin 目录。要将进程标识设置为特定用户名,以取代aspnet或network service用户标识,您提供的用户名和密码都必须存储在machine.config 文件中。但是根据实际情况,asp.net的system.io可以无限制访问不设防的服务器路径。不知道这算不算一个ms的重大漏洞。而且根本不能使iis以machine.config的用户执行asp.net程序。

四、如何解决呢?答案就是—应用程序池。

iis 6.0在被称为应用程序隔离模式(隔离模式)的两种不同操作模式下运行,它们是:工作进程隔离模式和iis 5.0隔离模式。这两种模式都要依赖于http.sys作为超文本传输协议(http)侦听程序;然而,它们内部的工作原理是截然不同的。

工作进程隔离模式利用iis 6.0的重新设计的体系结构并且使用工作进程的核心组件。iis 5.0隔离模式用于依赖iis 5.0的特定功能和行为的应 用程序。该隔离模式由iis5isolation modeenabled配置数据库属性指定。

您所选择的iis应用程序隔离模式对性能、可靠性、安全性和功能可用性都会产生影响。工作进程隔离模式是推荐模式,因为它为应用程序提供了更可靠的平台。工作进程隔离模式也提供了更高级别的安全性,因为运行在工作进程中的应用程序的默认标识为networkservice。 以iis隔离模式运行的应用程序的默认标识为localsystem,该标识允许访问并具有更改计算机上几乎所有资源的能力。

iis 功能 
隔离模式宿主/组件 工作进程隔离模式宿主/组件
工作进程管理 n/a svchost.exe/www 服务
工作进程 n/a w3wp.exe/工作进程
运行进程内isapi 扩展 inetinfo.exe w3wp.exe
运行进程外isapi 扩展 dllhost.exe n/a(所有的 isapi 扩展都在进程内)
运行isapi筛选器 inetinfo.exe w3wp.exe
http.sys 配置 svchost.exe/www 服务 svchost.exe/www 服务
http 协议支持 windows内核/http.sys windows 内核/http.sys
iis配置数据库 inetinfo.exe inetinfo.exe
ftp inetinfo.exe inetinfo.exe
nntp inetinfo.exe inetinfo.exe
smtp inetinfo.exe inetinfo.exe

由此可见,我们只能使用工作进程隔离模式解决.net的安全问题。默认情况下,iis在工作进程隔离模式下运行,在这种模式中,对于每一个web应用,iis都用一个独立的w3wp.exe的实例来运行它。w3wp.exe也称为工作进程(worker process),或w3core。

可靠性和安全性。可靠性的提高是因为一个web应用的故障不会影响到其他web应用,也不会影响http.sys,每一个web应用由w3svc单独地监视 其健康状况。安全性的提高是由于应用程序不再象iis 5.0和iis 4.0的进程内应用那样用system帐户运行,默认情况下,w3wp.exe的所有实例都在一个权限有限的“网络服务”帐户下运行,必要时,还可以将工作进程配置成用其他用户帐户运行。

五、解决办法操作步骤:

1、我们将每一个asp.net虚拟主机站点都分配一个独立的应用程序池,并赋予不同的权限。下面我就针对此来做一个示例:首先,我们为网站创建两个用户(一个是app_31896.net_user、密码为app_31896.net,一个是iusr_31896.net_user、密码为iusr_31896.net)

2、依次打开&quot;计算机管理器&quot;→&quot;系统管理工具&quot;→&quot;本地用户和组&quot;→&quot;用户&quot;,然后新增两个用app_31896.net_user与iusr_31896.net_user密码分别为:app_31896.net与iusr_31896.net。选择“用户不能更改密码”与“密码永不过期”,然后分别把app_31896.net_user添加到iis_wpg组,把iusr_31896.net_user添加到guests组。将用户赶出其它组成员。

3、然后,打开iis管理员器新建相应的应用程序池。依次打开internet 信息服务→本地计算机→应用程序池→新建→应用程序池,新建一个名字为app_31896.net的应用程序池。

4、编辑app_31896.net应用程序池的属性→标示→配置→用户名→浏览→把用户名改为我们刚才建立的app_31896.net_use并输入相应的密码app_31896.net。

5、然后再建立相应的网站。依次打开internet 信息服务→本地计算机→网站→新建→31896.net的网站,目录为e:\\vhost\\31896.net^_^→编辑31896.net网站的属性→主目录→应用程序池→app_31896.net →目录安全性→身份验证和访问控制→编辑,选择我们刚才建立的iusr_31896.net_user,并输入相应的密码iusr_31896.netr→保存并退出。

6、最后设定iis的站点目录权限acls以及整个服务器系统的安全,这里就不再详细讨论。

好了,已经简单的介绍了一下asp.net中关于文件io系统的漏洞的防治方法,这一方法虽然有些繁琐,但是却可以从根本上杜绝一些漏洞,这里我们讨论的只是很少的一部分,更多的解决方法需要大家共同来探索、学习。

后记:这里为大家介绍的仅仅是在处理asp.net木马、webshell上的一些交流。其实服务器、系统的安全是个整体的概念;远远不止这些,可能你其中有一小点的疏忽就可以让你的网站、甚至服务器沦陷。因此安全策略必需走防患未然的道路,任何一个小地方都不能马虎。

ASP.NET刷新页面的六种方法


   asp.net页面刷新有问题,收藏几种方法挺有用的.

第一:
private void button1_click( object sender, system.eventargs e )  
{
     response.redirect( request.url.tostring( ) );
}
第二:
private void button2_click( object sender, system.eventargs e )  
{
     response.write( \”
     <script language=javascript>window.location.href=document.url;
     </script>\” );
}
第三:
private void button3_click( object sender, system.eventargs e )  
{
     response.addheader( \”refresh\”,\”0\” );
}
第四:
private void button6_click( object sender, system.eventargs e )  
{
     //好像有些不对?
     //response.write( \”
     <script language=javascript>window.location.reload( );
     </script>\” );
}
第五:(需替换<>)
<script><!–
var limit=\”3:00\”
if ( document.images )
{
     var parselimit=limit.split( \”:\” )parselimit=parselimit[0]*60 parselimit[1]*1
}
function beginrefresh( )
{
     if ( !document.images )returnif ( parselimit==1 )window.location.reload( )else
     {
         parselimit-=1curmin=math.floor( parselimit/60 )cursec=parselimit`if ( curmin!=0 )curtime=curmin \”分\” cursec \”秒后重刷本页!\”elsecurtime=cursec \”秒后重刷本页!\”window.status=curtimesettimeout( \”beginrefresh( )\”,1000 )
     }
}
window.onload=beginrefresh//–>   </script><div style=\”z-index: 102;
left: 408px;
position: absolute;
top: 232px\” ms_positioning=\”text2d\”>
<p><font size=\”3\”>自动刷新页面</font></p>
</div>第六:
<meta http-equiv=\”refresh\” content=\”300;
url=target.html\”>

浅谈ASP.NET的Padding Oracle攻击


如何进行padding oracle attack

关于padding oracle attack的具体细节,您可以从《automated padding oracle attacks with padbuster》及《padding oracle attacks on cbc-mode encryption with secret and random ivs》两篇文(_liang3 pian1 wen2)章中得到更详细的信息,它们似乎并不像表面那样高深莫测,尤其是前者,有机会我也打算将它翻译一下。

刚才已经提到,如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。这里的一个关键在于,攻击者所需要的提示仅仅是“解密成功与否”这样一个二元信息,例如它在一个web程序中可能只是“200 – ok”及“500 – internal server error”这样的表现形式,而不需要其他任何详细信息。

要谈这个问题,先要了解什么是padding oracle attack。有些文章把padding和oracle,与css样式膘莉是那个收购了sun的甲骨文公司联系起来,这就驴唇不对马嘴了。

padding在这里的含义是“填充”,因为对于加密算法来说,它们是基于等长的“数据块”进行操作的(如对于rc2,des或tripledes算法来说这个长度是8字节,而对于rijndael算法来说则是16、24或32字节)。但是,我们的输入数据长度是不规则的,因此必然需要进行“填充”才能形成完整的“块”。“填充”时比较常用的是pkcs #5规则,简单地说,便是根据最后一个数据块所缺少的长度来选择填充的内容。

例如,现代流行的web框架大都是开源的,因此它的加密方式完全透明(当然这点其实并不是必须的,只是大有帮助而已),对于攻击者来说唯一不知道的便是密钥。于是攻击者便可以根据这个加密方式设计有针对性的密文,最终得到密钥(及iv等信息)。在很多时候,一个网站都会使用同样的密钥和iv,于是只需从一个漏洞,便可以在网站的其他方面进行破坏,或解密信息,或绕开验证。

一些危害是很(yi xie wei hai shi hen)容易理解的,例如解密(或注入)viewstate,或是如视频里那样设置一个管理员的cookie。在scottgu等文章中描述这个漏洞的危害时还提到,这个漏洞可以用来下载web.config等私密文件,这又是如何办到的呢?要知道web.config文件的下载是被iis和asp.net所禁止的,它似乎和加密解密或是machine key无关。不过您是否意识到,在asp.net 3.5 sp1以后,我们可以利用scriptmanager来打包输出本地的脚本文件?例如:

这段内容会在页面上放置一段scriptresource.axd的引用,它的query string便包含了需要输出的文件路径,它是与scriptmanager等组件完全独立的。那么,如果攻击者告诉它输出“~/web.config”的时候……

服务器asp.net权限设置问题及解决方法


本人服务器使用环境:win 2003
asp.net相对于asp,设置权限方面有点不同,有一点儿设置错了都运行不到。在网上搜索到的都是很垃圾的答案,没有一个用得到的,下面是我自己设置并从中遇到的问题摸索后得到的经验,给大家分享。

asp.net需要用到users组的权限,因为我也遇过很多次自己设置了权限之后发现网站运行不了,很郁闷。下面根据出现的问题,一点点解决,让你的asp.net运行起来。。

问题一:

未找到路径“c:\\”的一部分。
说明: 执行当前 web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: system.io.directorynotfoundexception: 未找到路径“c:\\”的一部分。

解决:

在c盘加上users组读取权限即可

本人试过:在c盘加上users读取权限后可以访问了,但出于服务器安全问题,我又把users组去掉了(想到应该c盘下面还要一些文件夹要加入users权限即可)。去掉users组后,相继的问题以不同的错误方式显示出来了,如下面讲到的问题,然后再一一解决。

问题二:

页面弹出登录窗口点取消后出现:http 错误 401.3 – 未经授权:访问由于 acl 对所请求资源的设置被拒绝。
或者出现 http 401.1错误

解决:

一,先要检查你的“身份检证和访问控制”中\”对匿名使用下列windows用户账号”中的用户密码是否正确,还有检查你的网站 右键单击-权限中有没有加入此中用。

第一种方法试过都还是这的话,就看文件夹的权限设置了

在windows上加上users权即可

问题三:

如果浏览到你整个网站出现乱码

解决:

那应该在 c盘 windows 加上users组的 读取权限即可

问题四:

编译错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误信息: cs0016: 未能写入输出文件“c:\\windows\\microsoft.net\\work\\v1.1.4322\\temporary asp.net files\\root\\345513e7\\86f1794a\\fvmzvzp7.dll”–“拒绝访问。 ”

解决:

应该在 c盘 windows下的temp 加上users组的读、写、修改的权限即可

问题五:

编译错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误信息: 编译器失败,错误代码为 128。

解决:

应该在 c盘 windows下的system32 加上users组的读的权限即可

问题六:
运行时错误
说明: 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。

详细信息: 若要使他人能够在远程计算机上查看此特定错误信息的详细信息,请在位于当前 web 应用程序根目录下的“web.config”配置文件中创建一个 <customerrors> 标记。然后应将此 <customerrors> 标记的“mode”属性设置为“off”。

<!– web.config 配置文件 –>

<configuration>
<system.web>
<customerrors mode=\”off\”/>
</system.web>
</configuration>

注释: 通过修改应用程序的 <customerrors> 配置标记的“defaultredirect”属性,使之指向自定义错误页的 url,可以用自定义错误页替换所看到的当前错误页。

<!– web.config 配置文件 –>

<configuration>
<system.web>
<customerrors mode=\”remoteonly\” defaultredirect=\”mycustompage.htm\”/>
</system.web>
</configuration>

解决:
在所在站点右键点击-权限 加上 iis_wpg组的读权限即可

总 结:
windows temp system32 都需要users 的权限
windows读 temp读,写 system32读
站站权限要加上iis_wpg读取权限
所以服务器的安全性也会低了很多,呵呵,,

问题7

在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码

在vs2005编译网站内置环境编译网站的时候出现” 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码 “这个错误,到网上baidu了一下,有下面的解决方案:

修改该目录的权限,加上“network service”,让它对该目录有控制权限。
修改网络/iis/iis服务的缺省账户.htm\”>iis服务的缺省账户为“本地系统”
经验证,方法二可行,方法一失败。但是方法二会导致iis运行不安全,所以这种方法不太合适。

我照着方案试了下,都没有成功,突然想到昨天因为杀毒,装了mcafee,查看mcafee的日志,果然有一下几条:

c:\\program files\\internet explorer\\iexplore.exe \\registry\\machine\\software\\classes\\.torrent\\@ 防病毒最大保护:禁止更改所有文件扩展名的注册
c:\\windows\\system32\\inetsrv\\w3wp.exe c:\\windows\\temp\\wda3zurp.dll 通用最大保护:禁止在 windows 文件夹中创建新的可执行文件

应该就是这里的毛病了,把上两条规则删掉,编译成功:)

问题8

错误 1 “asp.login_aspx.gettypehashcode()”: 没有找到适合的方法来重写 c:\\windows\\microsoft.net\\framework\\v2.0.50727\\temporary asp.net files\\clim\\22c580cf\\181f2416\\app_web_iiv2pnyq.8.cs

错误 2 “asp.login_aspx.processrequest(system.web.httpcontext)”: 没有找到适合的方法来重写 c:\\windows\\microsoft.net\\framework\\v2.0.50727\\temporary asp.net files\\clim\\22c580cf\\181f2416\\app_web_iiv2pnyq.8.cs

错误 3 “asp.login_aspx”不会实现接口成员“system.web.ihttphandler.isreusable” c:\\windows\\microsoft.net\\framework\\v2.0.50727\\temporary asp.net files\\clim\\22c580cf\\181f2416\\app_web_iiv2pnyq.8.cs

解决方法:检查方法名、类名、名称空间前后是否一致。

 



Powered By wordpress Copyright asp © 2009-2012 版权所有