Archive for the ‘asp’ Category

server 2003上跑asp超时问题

问题是,打开站点静态html文件和不需要连接oracle数据库的asp文件可以打开,有连数据库的文件无法打开。

尝试了各种方法,包括重新建立站点、重新建立应用池、分配权限等无果。

事件查看器报错是应用池超时。

最后

net stop w3svc

net start w3svc

搞定了。

太奇怪了。

 

asp解析json

第一种方法:在服务器上运行jscript (via)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script language="JScript" runat="Server">
function toObject(json) {
    eval("var o=" + json);
    return o;
}
</script>
<%

Dim json
json = "{'uid':'1','username':'abc','email':'123@163.com'}"
Set json = toObject(json)

Response.Write json.uid & "<br/>"
Response.Write json.username & "<br/>"
Response.Write json.email & "<br/>"

Set json = Nothing
%>

第二种方法:使用MSScriptControl.ScriptControl,和第一种方法类似,只是在不同的环境下执行js。这里有一个例子和parser。

第三种方法:另外一个parser

第四种方法:使用aspjson

 

asp中的option explicit

字面理解,option就是设置,explicit的意思:详述的,明确的;毫不隐瞒的,露骨的。

option explicit 表示所有的变量要先声明,再使用

如果使用,Option Explicit 语句必须写在模块的所有过程之前。

如果模块中使用了 Option Explicit,则必须使用 Dim、Private、Public、ReDim 或 Static 语句来显式声明所有的变量。如果使用了未声明的变量名在编译时间会出现错误。

使用 Option Explicit 可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。

一个简单的例子:

1
2
3
4
option explicit
dim dimedvar
myvar=10 '报错:变量未定义: 'myvar'
dimedvar="dimed" '没有报错
 

最近花了一周搞定报表模块

report_list

报表列表

报表编辑

报表编辑

报表显示

报表显示

当任务布置下来的时候,我完全不知道报表是个啥东东。开始做的那个单表的完全就是自己yy出来的结果,最后不满意,只有重新做过。

思路简单也造成了这个报表模块功能的局限性。在写代码的过程中碰到了很多的问题,并一一解决掉。

这个模块使用两个表report_info和report_field。

report_info记录报表的基本信息,包括报表名称、说明、模板、建立的用户、创建时间等。

report_field通过report_id和report_info的id是关联字段,包括主要保存每个需要调出数据的sql语句。

report_field填写好的数据,通过模板上的[#keyword#]关键字来替换,就得到了一个简单的报表。

界面的问题

开始全部使用div,发现排版很乱,最后碰巧找到了<fieldset>这个不是很流行的标签。报表信息填写、sql语句生成、模板、已添加字段都有条不紊的排好了,<fieldset>里面放一个<legend> 就知道这个字段集合主要是用来做啥的了。

用javascript表单生成sql语句的问题

开始本来打算自己制作一个表单用来自动生成sql语句,但是后来越想越复杂,有and有or,多表的时候有left join,right join,full join,还有括号表示优先级,比如数据类型是数字还得验证、是日期类型至少也得弹出一个js的日期选择框吧。最后找到了codeslave哥写的highquery,这东西就是我所需要的,完全可以满足这个报表模块的需求,但是在后来发现了一个棘手的问题。highquery初始化的时候里面的字段列表是通过它自己写的Field对象new出来的。这样每次页面加载后,从request.querystring传过来的表名就固定了,无法动态的载入其他表单字段信息,最后只有弄成弹窗了。

级联下拉菜单问题

我使用级联下拉菜单来让用户选定需要查询指定表的指定字段的指定函数 比如db1.max(field1)。也需要通过无刷新页面取数据,所以临时看了一下jquery调用ajax的相关文章,下面这段代码用了一下午才憋出来,囧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    $("#selectTableInner").change(function(){
        var fieldName=this.options[this.selectedIndex].value;
        $.ajax({
            type    :"GET",
            url     :"getData.asp?table_name="+fieldName,
            dataType:"json",
            success :function(msg){  
                $("#selectFieldInner").empty();
                $("#selectTableInner option").each(function(i){  
                        selectFieldInner.options.add(new Option(msg.fieldlist[i].FIELD_ALIASES,msg.fieldlist[i].FIELD_NAME));
                });
            }
        });
        document.getElementById("condition_en").value="";
    });

还有一个javascript原生版本ajax

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        sel.onchange=function(){
            var fieldName=this.options[this.selectedIndex].value;
            var url="getData.asp?table_name="+fieldName;
            if(window.ActiveXObject)
                xhr=new ActiveXObject("Microsoft.XMLHTTP");
            else if(window.XMLHttpRequest)
                xhr=new XMLHttpRequest();
            xhr.open("GET",url);
            xhr.onreadystatechange=callback;
            xhr.send(null);
        };
        function callback()
        {
            msg2=xhr.responseText;
            var func=new Function("return"+msg2);
            var json=func();
            var selectFieldInner=document.getElementById("selectFieldInner");
            for(i=0;i<json.fieldlist.length;i++){
                FieldList.add(new Field(json.fieldlist[i].FIELD_ALIASES,json.fieldlist[i].FIELD_NAME,'varchar','100','',''));
            }  
                   
        }

我是通过json格式来传输数据。在服务器端将asp对象转换成json对象又让我犯难了。找到了一个项目:aspjson,同时包含里面的JSON.asp和JSON_UTIL.asp 可以直接将sql执行出来的数据转换成json对象。因为javascript对json原生支持,所以javascript对json的访问也是非常简单的。因为aspjson是老外开发的,自称是支持unicode,但在写代码的时候出现asp下标越界错误。最后搞了半天找到原因,提交了一个issue,并被作者fixed了。很快,貌似他一直都在线,恩,是个宅男。

开网上的文章所jquery对象不能被赋值,最后在写代码的时候也出现这个问题。所在最后在包含了jquery.js的页面里面写了很多的getElementById(),代码混杂,这就是jquery没学好的后果。

接下来的博文我会将一些具体问题记录一下。

 

asp错误:错误的 ‘Next’

写了段代码

1
2
3
4
5
6
7
8
9
for i=0 to ubound(arr,2)
    if (arr(2,i)="日期") then
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','datetime', '100', '', ''))")
    else if (arr(2,i)="整数") then
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','number', '100', '', ''))")
    else
        response.write("FieldList.add(new Field('"&arr(1,i)&"','"&arr(0,i)&"','varchar', '100', '', ''))")
    end If
Next

结果报错:
Microsoft VBScript 编译器错误 错误 ‘800a041f’

错误的 ‘Next’

/report/report_add.asp,行 188

Next
^

搞了2个小时,查了文档无果(其实是因为没仔细看)
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If

这里找到了答案
把else if改成elseif 搞定。
真是太粗心了。

 

iis 超过响应缓冲区限制

IIS报错:

Response   对象   错误   ‘ASP   0251   :   80004005′

超过响应缓冲区限制

/test.asp,行   0

此   ASP   页的执行造成响应缓冲区超过其配置限制。

代码大概如下:

1
2
3
4
5
6
7
8
if request.querystring("table_name") <> "" then
    table_name=request.querystring("table_name")
    sql="SELECT f1,f2 FROM table_info WHERE table_name='"&table_name&"'"
    set rs=conn.execute(sql)
    do while not rs.eof or rs.bof
        response.write rs(0)
    loop
end if

因为知道是缓冲区大小超出限制,说明response.write输出了大量的数据。
默认情况下iis是开启了缓存的,所以要等到数据输出完毕然后才从内存将数据发送到浏览器输出。
所以我在代码前面加入:

1
response.buffer=false

来关闭缓存,也可以到iis ,网站 -> 启动缓存 -> 设置为false (IIS7)。
发现了大量同一个字段数据输出,才知道是没有写rs.movenext ,囧。
在loop上一行加上rs.movenext , 然后最好开启缓存,对性能绝对有提升。

 

上班生活开始了

上周二跑到我哥的公司去面试,最后录用了,应该是看在哥的面子上。

公司主要的产品是医院办公自动化系统和信息管理系统,比较专业的说法叫HOA和HIS,用asp+oracle/sqlserver开发的。还有考勤机、一卡通等产品。

已经上班有个星期了,主要的工作就是读HOA系统代码,方便以后系统的修改。

星期五上午到歌乐山胸科医院去给别个装HOA系统,导入数据库的时候出现了问题:

ora-01400:无法将Null插入

IMP-00019:由于 ORACLE 错误 1400 而拒绝行

IMP-00003:遇到 ORACLE 错误 1400

ORA-01400:无法将 Null 插入(“DB”.”TABLE”.”ID”)

屏幕不停的滚动,后来才知道那个表有11万多行,就这样不停的报错,就算是加入ignore=y参数,导入数据库也要1个小时才能搞定。

最不解的是回家用电脑查询ID字段没有一个记录为Null的,看样子应该不是导入数据库的问题。

这个星期一换了一个干净点的数据库终于把这个问题给解决了,但是系统还是有点问题,服务器开机后,客户机无法登陆进OA系统。但是登陆进服务器之后再注销一次就可以了,相当不解的问题。

很巧合的时候,我们上歌乐山那天正好是“11.27”大屠杀纪念日,很多人都去了红岩广场。

去的时候也非常不方便,从小龙坎走到陈家湾,然后坐807到烈士墓,然后做长安车上山。

不知道是不是我们公司HOA系统的bug,我到了公司可以登陆进HOA系统,回到寝室就完全没反应了,但是用sqlplus就可以连接到数据库。应该和本地连接有一点的联系。

看了大概一个星期的代码,我最大的感受就是代码质量不高,不符合MVC开发模式。代码和样式完全是混合的,再加上table的布局,还有一些不规范的变量申明(比如iii,kkk无意义字符,错误的英文单词),确实看起来很恼火。不过我都将我读代码发现的问题,需要改进的,还自己不知道的都记录下来,需要以后有机会能用上它重写这个系统。

公司用了dll来加密系统,这方面的知识我还是空白,不过可以尝试分析一下dll源代码,但是貌似没人给我。

今天星期二,考试科目”internet开发”,说白了就是asp.net,没啥好说的,很水儿。

考完了,在工行存了点钱,然后在网上买了本书:“SQL语法范例大全(SQL Server 、Oracle通解)”,选择这本书的原因是不仅讲了oracle,还讲了sqlserver,包括存储过程的编写(这个是以后要求的)。希望对我现在的工作有帮助。

SQL语法范例大全(SQL Server 、Oracle通解)

感觉上班和上课生活有相似的有不同的。相似的是都是坐在电脑前面,不同的是作息时间。

我现在真正的成为了IT民工,工薪一族,虽然听说公司最近数月都没发工薪了。

家里人叫我去考公务员,铁饭碗,稳定。其实我一点兴趣也没有。唉,必须得看出点成绩才能改变家里人的“铁饭碗”思想。

 

讯时网站管理系统2.70漏洞分析

irrelevant:

10月1日放国庆了,该死的学校30号晚上尽然还要上晚自习,没有办法只有10月1日回家了。在寝室看完了国庆60周年的阅兵式,这次大家的普遍的反应是没有50周年好看。那个猥琐的导播的技术也确实是烂到了家。最牛逼的还是小平同志那个时候的阅兵式,打过仗的就是不一样啊。今天是十月五日,晃眼间今天就5日了,国庆就过了大半,无所谓,反正学校、家里的生活对我来说没有好大的区别,现在最想的还是找工作,实践自己的所学。

——————————————————–

今天没有事情做,友情检测了一个站点 ,思路和过程我会详细记录,此本发布之前已经修补好了所有的漏洞,请看官不要徒劳。检测的主要目的是学习安全技术,挂马死全家。

首先瞥了一下网站的基本构架,89不离10是用asp+access搭建的,安全性非常让人质疑,然后随便打开一个带有参数的地址:http://www.xxx.com/xsnews/News_View.asp?NewsID=80 。

习惯性的在网站后面的参数加上’ 成了:

http://www.xxx.com/xsnews/News_View.asp?NewsID=80′

结果网页照常正常显示,只是新闻导航有点变化:

动态信息 – [新闻标题] 变成了:$$路径$$ ,我8成估计是模板代码。我突然发现子目录的名字是xsnews,就直接打开这个子目录:

http://www.xxx.com/xsnews/

xuas

网站使用的是讯时网站管理系统,但是具体的版本还是未知,我姑且算它使用的是最新版本,就到官方网站下载了一个最新的版本本地假设好,来研究研究:http://www.xuas.com/view.asp?id=2 ,access版本是免费的,mssql是收费的。

xuas_file_list

down下来,看了看文件目录,我艹,这完全没有统一的命名规范嘛,有大写的,有小写的,有“-”连接的,有“_”连接的。还有后面加“2”的,首先一点来判断这个系统就是做得不专业(当然叫我做不一定做得出来,但至少俺至少了解一些系统开发时的一些规范)。

既然前台的sql注入没有希望了,那么我们来看看后台登录代码 login.asp,最牛逼的是这几行,用随机数来生成验证码,这种验证码用了等于没有用,写个js应该可以自动获取里面的值,然后自动填写注册码。理论是这样的,我有时间实验一下。

171
172
173
174
175
Randomize
an=""
an= int((99999-11111+1) * RND +11111)
session("xuasyzm")=an
Response.Write an

———————以下是表单的详细信息:

ID 名称 方法 操作
FrontPage_Form1 POST admin_login.asp

元素

索引 ID 名称 类型 标签 大小 最大长度 状态
0 user text 24 20
1 pass password 24 20
2 XuasYzm 9 5
3 B1 image 提交

登录到admin_login.asp进行验证,分析一下13行开始的代码

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
For each j in Request.QueryString
    sss= sss& j & Request.QueryString(j)
Next
For each j in Request.form
    sss= sss& j & Request.QueryString(j)
Next
sss=sss&LCase(request.servervariables("QUERY_STRING"))
GuoLv="select,insert,;,update,',delete,exec,admin,count,drop,from,truncate,xp_cmdshell,netlocalgroup,and,chr,master,declare,*,char,script,%"      '过滤掉get和form中的这些关键字来防止注入
GuoLvA=split(GuoLv,",")
for i=0 to ubound(GuoLvA)
  if instr(sss,GuoLvA(i))<>0 then
    Response.Redirect "res://shdoclc.dll/dnserror.htm"  '有注入关键字自动跳转到牛逼的“找不到服务器”页面。
    response.end       
  end if
next


  sql = "select * from [admin]"
  Set rs = Server.CreateObject("ADODB.RecordSet"):rs.cursorlocation=3
  rs.Open sql,conn,1,1
  if rs.recordcount=0 then
    conn.Execute "insert into [admin] ([user],[pass],[dj]) values('admin','"&md5("admin")&"','1')"
  end if  '如果admin表中没有记录,自动插入一条用户名和密码都是admin的记录。
  rs.close:set rs=nothing

看来用户名密码填写’or’='or’ 或者 ‘or”=’ 等万能密码是没有希望了,都被过滤干净了,继续看代码。。。
假设登录成功会转向到admin_index.asp , 直接打开admin_index.asp会自动跳转到login.asp,说明admin_index.asp做了cookie或者是session验证。发现后台大部分的文件都包含了admin_chk.asp , 这是验证的关键文件:

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
session("admin__user")=Request.Cookies("adminuser")
session("admin__pass")=Request.Cookies("adminpass")
session("dJ")=Request.Cookies("admindj")

adminuser=Request.Cookies("adminuser")
adminpass=Request.Cookies("adminpass")
admindj=Request.Cookies("admindj")

if adminuser="" or adminpass="" then
  Response.Redirect "login.asp?id=8"
end if
%><!--#include file = admin_conn.asp -->

<!--#include file = md5.asp -->
<%


user=trim(session("admin__user"))
pass=session("admin__pass")

sql = "select * from admin where [user]='"&adminuser&"' and [pass]='"&adminpass&"'"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,1
if rs.recordcount=0 then
  Response.Redirect "login.asp?id=8"
end if
rs.close
set rs=nothing
conn.close
set conn=nothing

这个文件的主要目的是先取得三个cookie变量:adminuser,adminpass,admindj, 然后分别把这3个cookie变量赋值给session变量:admin__user,admin__pass,dJ变量和同名的三个变量。如果adminuser,adminpass没有值,直接跳转到登录页面,验证失败。
然后把这些变量弄到sql语句中运行,这个时候就可以利用cookie来注入。一般情况下小黑用的是”桂林老兵的cookie browser”,可以在本地构造自己的cookie,但是我选择使用firefox的插件firebug的插件firecookie(后来证明我sb了,因为后台的ewebeditor是IE6 only的)。

cookie加入adminuser值为admin,adminpass值为’or’='or’,admindj值为1 ,如图直接地址栏输入admin_index.asp

xuas_cookie_bug

如图可以发现使用的是讯时2.7系统,就在网站抓了个2.7,然后本地假设,这样至少代码没有好大的区别。
接下来就是上传webshell了,方法很简单,修改或者是添加一个新闻,然后用ewebeditor编辑器上传一个图片格式的asp小马,然后在数据库备份那点把图片格式改为asp,asa,cer,htr等等,反正iis可以解析执行就ok….

xuas_webshell

webshell得到了,就打算收工了,但是还发现了一个漏洞,新闻里面的图片地址类似于:

http://www.xxx.com/xsnews/edit/UploadFile/2008613172630223.jpg

这及其可能是ewebeditor编辑器,直接打开http://www.xxx.com/xsnews/edit/ewebeditor.asp的确有这个文件,但是比较恼火的是讯时用的ewebeditor没有后台,所以没有办法通过以前增加样式,然后在样式里面把asp后缀添加到可执行文件中来。不过还有个/xsnews/edit/Admin_UploadFile.asp get参数dir的目录遍历漏洞,直接直接遍历整个网站目录:
admin_uploadfile.asp?id=xx&dir=../../../

这样找access数据库,下载,md5破解密码就也可以登录到后台。

Admin_UploadFile.asp权限验证的代码如下:

6
7
8
9
if Request.Cookies("admindj")<>"1" then
   Response.Write "<BR><BR><BR><BR><center>权限不足,你没有此功能的管理权限"
   Response.end
end if

确实是够雷人的,这就是为啥要把cookie里面的admindj改为1的原因所在。
另外还有一部分后台管理文件没有包含admin_chk.asp任何人可以直接浏览,简单列表如下:
admin_stat_user.asp //所有用户文章添加排行榜,通过这个可以直接查看后台管理员用户名,如果默认的管理员用户名
//admin被改了,也可以把上面讲的cookie变量adminuser改成相应的名字
admin_ly.asp
admin_news_add_dj.asp
admin_news_addd_dj3.asp
admin_news_pl_view.asp?action=save&id=
admin_news_view.asp
admin_newspl_del.asp
aspcheck.asp
检测完了,然后说说漏洞的修补,cookie注入在4.0中已经修补:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function chkh(stra)
  stra=replace(stra,"<","&lt;")
  stra=replace(stra,">","&gt;")
  stra=replace(stra,"'","")
  stra=replace(stra,"(","(")
  stra=replace(stra,")",")")
  stra=replace(stra,";",";")
  stra=replace(stra,",",",")
  stra=replace(stra,"%","%")
  stra=replace(stra,"+","+")
  chkh=stra
end function
session("admin__user")=chkh(Request.Cookies("adminuser"))
session("admin__pass")=chkh(Request.Cookies("adminpass"))
session("dJ")=chkh(Request.Cookies("admindj"))

adminuser=chkh(Request.Cookies("adminuser"))
adminpass=chkh(Request.Cookies("adminpass"))
admindj=chkh(Request.Cookies("admindj"))

然后把admin_uploadfile.asp加入admin_chk.asp的包含,算了补住了。

通过这次检测,已经以前的一些小经验,我觉得web安全在中国还是任重而道远。当然现在这种弱智漏洞已经很少出现了,现在流行的是xss,csrf,深入研究还在进行中。

 

今天的ASP学习笔记

几天前就看是看ASP的电子书了。。开始的时候看那些洪恩啊之类的教程 我的天那个完全是把你当sb一样的教学,有点技术含量好不好很简单的概念啰嗦半天都整不完 。。我失望了 还是看看电子书 ASP.3.0.高级编程PDF太难了 我现在也不需要那学东西比如编写ACTIVEX 。。。COM+编程这些我现在暂时还用不到。。。。
编程高手ASP”这个我不向大家推荐大家不要买也不要下载不然是浪费你的钱 你的时候 你的流量还有我们中国的宝贵的网络带宽。。。这个教程完全是不顾我们这些小学者的感受 捞起就开始P跨了 我晕就好像是他自己一个人在那个废话 没有人听一样同学你是讲课 不是龙门阵好不好  我晕你爹。。亏她还是一个女人讲课哦 很快 重要的东西一句话带过 不说了直接删除 。。。。。。。。
asp内置6大对象介绍”   这个我向大家推荐 很好的教程 是CHM格式的电子书 还可以讲了常用的APPLICATION REQUEST RESPONSE SERVER   OBJECTCONTEXT SESSION 虽然都很简单 但是你会对ASP的内置的对象有一个大致的了解呵呵
。。。。。。。。。。。。。。。。。

“asp对象”这个也不错 虽然是TXT格式的但是讲得比我上面说的那个要详细很多 。。。

”一套最好的asp网页制作教程“ 这个是我向大家强烈推荐的 这自己的自己上搭建一个IIS 然后把这个东西COPY到WEB目录就开始真正的学习了 ,。先看效果后看原代码 哈哈 设计得好 给作者加分 。。。。。。内容从HTML标签 到表单 ASP对象 数据库链接都讲了的 很不错我昨天花了我一天的时间终于看完了最后的利用recordset链接数据库的东西 我点都没有看懂 WHY 因为他没有讲怎么用RECODRSET就开始将怎么用ASP链接ACCESS数据库了然后怎么在ASP调用ACCESS的数据 语法我都不知道 我晕 当然我看不懂了饿

。。。。。。。。。。。。

下一部的计划是看ASP+SQL的教程。。。希望把这个数据库的部分搞定看懂是最关键的 老子又不搞设计 。。。我是搞破坏 呵呵

。。。。。。。。。。。。。。

哦 顺便说个东西 昨天在mycodes.net下了一个ASP的源码来研究没有想到以来就发现了一个漏洞 做成的教程发布到了爱国者黑客的网站上面当然我已经通知管理原了 他的官方是www.vtsj.cn 现在这个网站暂时的关闭了  呵呵 估计是程序员正在琢磨怎么把这个漏洞补好 呵呵 不好意思 把他的网站的一个图片删除了当然没有删除主页 我不是搞破坏的啊 。。。

。。。。。。。。。。。。。。。可惜爱国者黑客上面还没有发布不过这个数语音的教程 我想还是很不错的我听我自己在耳机里面说的普通话老子都想笑 呵呵黑有川谱的味道  系的好好没有搞艺术工作也没有搞政治工作。。。

 

对学习ASP的一点疑惑

昨天在下载ASP的资料已经是很晚了好像是晚上三点钟的时候。。后来实在是撑不住了就去睡觉了。。第二天起来发现我进了fedora core 。。原来是windows的自动更新要更新完了后要重启动我的机子。。害得我ASP的资料一点都没有下到。妈的我咒骂微软的BUG多。。呵呵开个玩笑。。这些资料也不是很大就是有个视频教程是大了点。。发现了一个很好的网站ibook8.com 好JB多的ASP电子书强。。先下了来再说。。不管用不用的上先下了来再说就是我的风格。。也不是很大。正开始研究的时候我开始想到了个问题微软好像现在都对ASP没有这样的技术支持了因为有的新的技术ASP.NET
有的人就是ASP的淘汰的技术的。那我还学什么呢有的人说ASP是ASP.NET的基础现在学习ASP并没有有没有前途这种说法只要你学到一一门适用的技术都是有用的。。
我觉得真的是这样我知道ASP要淘汰的了但是也并没有大家说想像中的那样的快因为技术的转型都是需要一点的时间的。。
有的人说我们老了的时候就是ASP真正的在人间消失的时候呵呵  这个我倒不感语言反正我还是要学习ASP的就像是学习C一样我也没有什么大成但是我了解了结构化编程的思路。。这个就是我最大的收获。。
……………………
有个网友的说法是很正确的:世界上没有一种编程的语言不被淘汰。。!!
事实上就是这样的 。。。
学习新的语言思路是没有好多的变化的。就相当与我们只是学习新的函数的使用方法用得好你就成了这门语言的大师了。至少我是这样认为了。。
。。。。。。。。。。。
听说asp.net是面向对象的编程语言。。.net是一种框架。。
可以使用c++ java来编写代码 当然还是使用微软自家的c#最好了 c#和JAVA的语法很像微软自己说是从VC转型过来的这个具体的情况我就不得而知了 。。
好的 废话不多说翻出了我的老红梅笔记先把一样记得ASP的笔记来看看。。。。。。。。。。。。。。。
哦 忘了
还有一个证明ASP并没有过时的数据 :
国际:

asp   926,000,000
php 1,030,000,000
aspx  376,000,000
jsp   203,000,000


中国     asp: 10,800,000
php:  5,810,000

aspx:1,930,000

以上是我在google搜索inurl:asp inurl:php 得到的网页的数量的对比。搜索所有网页的时候 我吃了已经php是最多的当然asp比他少了10%左右。。。。

在中国所有 呵呵 当然asp是老大比php多一倍。。看来在中国asp.net的技术还并不是很普及。。。。。。。。