MSSQL导入/导出数据库中自动编号的处理方法

七 17th, 2010

MSSQL 导入/导出数据库的时候,常常因为字段设置成自动编号而出现以下两种问题。
1、导入,导出 因为自动编号不允许写入值,而导致失败。
2、逻辑方面 因为每次自动编号都会增加,所以以id作为关联的数据会出现逻辑错误。

解决这种问题的方案就是把所有表的自动编号先去掉:

set IDENTITY_INSERT hst on

导入完毕后,再改回来就可以了。

set IDENTITY_INSERT hst off

下面是IDENTITY_INSERT的说明
说明:允许将显式值插入表的标识列中。
  语法:SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
  参数:database 是指定的表所驻留的数据库名称。
  owner 是表所有者的名称。
  table 是含有标识列的表名。
  注释:任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。
  如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。
  SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置。
  权限:执行权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_ddladmin 固定数据库角色以及对象所有者。

标签:

POST,GET 格式化函数

七 12th, 2010
   'Author:miaoqiyuan.cn
   '函数:Query
    '功能:得到GET提交的字符
    '参数:GET表单名        直接取值
    '      GET表单名.trim   取值并去除两边空格
    '      GET表单名.trimbr 取值并去除两边空格,多行模式
    '      GET表单名.tonum  转换为数字
    '      GET表单名.tohtml 转换为HTML编码的字符
    '      GET表单名.todate 转换为时间,日期
    '      GET表单名.nohtml 取出所有HTML标签
    '      GET表单名.safe   过滤掉可能有安全隐患的字符,防止注入
    '      GET表单名.nobr   过滤掉所有换行符,并转换成<br />
    '举例:a = Query("test")              a 为通过get提交的get的值
    '      a = Query("test.trimbr")       a 被去掉两边的空格
    '      a = Query("test.trim.tohtml")  a 去掉两边空格,并转换成html编码后的字符
    '      a = Query("test.tonum")        a 被转换成 数字
    '返回:处理后的GET提交的字符
    public function Query(byval querystr)
      dim q,v,tmp,i
      q = split(querystr,".")
      v = Request(q(0))
      if ubound(q)>0 then
        for i=0 to ubound(q)
          select case q(i)
            case "trim"
              v = trim(v)
            case "trimbr"
              tmp = ""
              for each x in split(v,vbCrlf)
                if trim(x)<>"" then
                  if tmp="" then
                    tmp = trim(x)
                  else
                    tmp = tmp & vbCrlf & trim(x)
                  end if
                end if
              next
              v = tmp
            case "tonum"
              if isnumeric(v) and trim(v)<>"" then v = cLng(v) else v = 0
            case "tohtml"
              v = server.htmlencode(v)
            case "todate"
              if isdate(todate) and trim(todate)<>"" then v = cDate(v) else v = Date()
            case "nohtml"
	          Set objRegExp = New Regexp
	          objRegExp.IgnoreCase = True
	          objRegExp.Global = True
	          objRegExp.Pattern = "(< [a-zA-Z\?].*?>)|(< [\/][a-zA-Z\?].*?>)"
	          v = objRegExp.Replace(v,"")
	          Set objRegExp = Nothing
	        case "safe"
	          v = replace(v," and","")
	          v = replace(v,"'","’")
	        case "nobr"
	          v = replace(v,vbCrlf,"<br />")
          end select
        next
      end if
      Query = v
    end function
'------------------------------------
'  2010-07-18 更新
'------------------------------------
'  修复了变量i感染全局变量i的Bug
标签:

Call to undefined function json_decode()

七 9th, 2010

今天些点东西,使用curl获取json内容,并转换成数组。竟然报错Call to undefined function json_decode() 。
json_decode我用过很多次了,竟然提示没有定义函数json_decode,真实奇怪。
检查了一下版本,php5.1,去官方查了一下,php5.2才开始支持json。原来如此,去官方下载个php5.3的包装上,ok~

标签:

PHP写的FTP猜解工具

六 30th, 2010

最近,使用公司虚拟主机的客户老是抱怨网站被挂马,服务器安全方面我认为是没有问题的,问题只有可能出现在ftp上。查看服务器日志,果然没错,近期有大量的ftp登录失败的日志。
原因找到了,看看到底是那些空间出现了问题。于是模仿攻击这的方式,用php写的ftp猜解工具,今天测试了一下,结果让人触目惊心啊。考虑再三,本工具还是一改我往常的作风,不公开源代码了,原因嘛~太危险了,本工具一个小时能检测1800(我测试的服务器机房线路比较好,所以速度很快)个站点左右,出现安全隐患的竟然能达到300个站点左右,出现问题的站点竟然能占到1/6,如果被非法份子利用,跑10个小时,可能就有3000个站点遭殃了。
简单说一下功能,php 5.0开发的,
1、首先载入页面框架,提示输入一个域名
2、得到该服务器上的站点,调用myip.cn上的同服务器站点,返回列表。使用了easytemplate框架。
3、根据2的列表,依次执行猜解工作。每次猜解完一条信息,通过ajax返回工作进度,暂停0.5秒继续猜解。

猜解字典可自定义,一下密码均可被猜出:
同FTP名
域名去掉.(比如域名:www.baidu.com 密码为wwwbaiducom,baiducom)
123,1234,12345,123456,1234567,12345678,123456789,5201314,1314520,987654321,54321,88888888,000,0000,001,002,007,008,10th,1st,2nd,3rd,4th,5th,6th,7th,8th,9th,100,101,108,133,163,166,188,233,266,350,366,450,466,136,137,138,139,158,168,169,192,198,200,222,233,234,258,288,300,301,333,345,388,400,433,456,458,500,555,558,588,600,666,598,668,678,688,888,988,999,1088,1100,1188,1288,1388,1588,1688,1888,1949,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1997,1999,2000,2001,2002,2088,2100,2188,2345,2588,3000,3721,3888,4567,4728,5555,5678,5888,6666,6688,6789,6888,7788,8888,8899,9988,9999,23456,34567,45678,88888,654321,888888,6666,56789,1234567,12345678,737,777,1111,2222,3333,4321,computer,cpu,memory,disk,soft,y2k,software,cdrom,rom,admin,master,card,pci,lock,ascii,knight,creative,modem,internet,intranet,web,www,isp,unlock,ftp,telnet,ibm,intel,microsoft,dell,compaq,toshiba,acer,info,aol,56k,server,dos,windows,win95,win98,office,word,excel,access,unix,linux,password,file,program,mp3,mpeg,jpeg,gif,bmp,billgates,chip,silicon,sony,link,word97,office97,network,ram,sun,yahoo,excite,hotmail,yeah,sina,pcweek,mac,apple,robot,key,monitor,win2000,office2000,word2000,net,virus,company,tech,technology,print,coolweb,guest,printer,superman,hotpage,enter,myweb,download,cool,coolman,coolboy,coolgirl,netboy,netgirl,log,login,connect,email,hyperlink,url,hotweb,java,cgi,html,htm,home,homepage,icq,mykey,c++,basic,delphi,pascal,anonymous,crack,hack,hacker,chinese,vcd,chat,chatroom,mud,cracker,happy,hello,room,english,user,netizen,frontpage,agp,netwolf,usa,hot,site,address,mail,news,topcool

标签: , ,

新写的一个xmlClass

六 29th, 2010

新写的xmlClass,有些简陋,不过常用的功能都可以直接调用了。

<%
'==============================================================
'   xmlClass v1.10.0617 by CatSeven
'==============================================================
'   文件:xmlClass.asp
'   功能:常用的XML处理
'   作者:苗启源(http://www.miaoqiyuan.cn)
'==============================================================
  class xmlClass
    Dim xmlobj

    Public Sub Class_Initialize
      set xmlobj = Server.CreateObject("Microsoft.XMLDOM")
    End Sub

    Public Sub Class_Terminate
      set xmlobj = Nothing
    End Sub

    '功能:从文件加载XML
    'f -> file 要保存的XML文件
    '     web://aaa.xml     根目录下的 myw3.xml
    '     path://myw3.xml   当前目录下的 myw3.xml
    '     E:/web/www/myw3.xml
    '     http://localhost/myw3.xml
    Public Sub Load(byval f)
      f = Mappath(f)
      xmlobj.load f
    End Sub

    '功能:将当前的数据保存到XML问及那
    'f -> file 要保存的XML文件
    '     web://aaa.xml     根目录下的 myw3.xml
    '     path://myw3.xml   当前目录下的 myw3.xml
    '     E:/web/www/myw3.xml
    '     http://localhost/myw3.xml
    Public Sub Save(byval f)
      f = Mappath(f)
      xmlobj.save f
    End Sub

    '功能:通过标签获取节点列表
    '参数:tag -> TagName
    '返回:符合条件的节点列表
    Public Function getTags(byval tag)
      dim p
      set p = xmlobj.getElementsByTagName(tag)
      set getTags = p
    End Function

    '功能:通过xPath获取节点列表
    '参数:str -> xpath 字符串
    '返回:符合条件的节点列表
    Public Function xPath(byval str)
      dim p
      set p = xmlobj.selectNodes(str)
      set xPath = p
    End Function

    '功能:设置节点属性
    '参数:obj -> 要设置属性的节点
    '      othervalue -> 属性值:比如 a=1&b=2  ==> <xxx a="1" b="2" />
    Public Sub setNode(byref obj,byval othervalue)
      dim valArr
      valArr = split(othervalue,"&")
      for i = 0 to ubound(valArr)
        if instr(valArr(i),"=")>0 then
          valDB = split(valArr(i),"=")
          obj.setAttribute valDB(0),valDB(1)
        end if
      next
    End Sub

    '功能:设置节点属性
    '参数:obj -> 节点列表,必须是一个列表,且只为列表中的第一项添加子节点。一般为:getTags,xPath返回的节点列表。
    '      xmlname -> 属性名。
    '      xmlvalue-> 属性值。
    Public Sub setAttribute(byval obj,byval xmlname,byval xmlvalue)
      for i = 0 to obj.length - 1
        obj(i).setAttribute xmlname,xmlvalue
      next
    End Sub

    '功能:删除当前节点
    '参数:obj -> 删除当前节点
    Public Sub Remove(byval obj)
      if obj.length>0 then obj(0).parentNode.removeChild obj(0)
    End Sub

    '功能:添加一个新的节点
    '参数:obj -> 节点列表,必须是一个列表,且只为列表中的第一项添加子节点。一般为:getTags,xPath返回的节点列表。
    '      nodename -> 节点名称(tagName)
    '       xmlname -> 索引属性。如果在当前文件中有节点名相同,且属性相同的节点,则不会新增节点
    '      valuearr -> 索引属性的值,必须是一个一元数组。
    '      othervalue -> 传递到setNode的属性,请参照 Public Sub setNode
    Public Sub Append(byval obj,byval nodename,byval xmlname,byval valuearr,byval othervalue)
      if obj.length<1 then Exit Sub
      for i = 0 to ubound(valuearr)
        if trim(valuearr(i))<>"" then
          if xPath("//"&nodename&"[@"&xmlname&"='"&valuearr(i)&"']").length=0 then
            set newNode = xmlobj.CreateElement(nodename)
            newNode.setAttribute xmlname,valuearr(i)
            setNode newNode,otherValue
            obj(0).appendChild(newNode)
          end if
        end if
      next
    End Sub

    '功能:获取节点属性列表
    '参数:obj -> 节点列表,必须是一个列表,且只为列表中的第一项添加子节点。一般为:getTags,xPath返回的节点列表。
    '      xmlname -> 属性名。
    '返回:一元数组,包含了所有的属性名
    Public Function getAttribute(byval obj,byval xmlname)
      dim Arr
      redim Arr(obj.length - 1)
      for i = 0 to obj.length - 1
        Arr(i) = obj(i).getAttribute(xmlname)
      next
      getAttribute = Arr
    End Function

    '功能:获取文件的路径
    'f -> file 要保存的XML文件
    '     web://aaa.xml     根目录下的 myw3.xml
    '     path://myw3.xml   当前目录下的 myw3.xml
    '     E:/web/www/myw3.xml
    '     http://localhost/myw3.xml
    '返回:文件的路径
    Private Function Mappath(byval f)
      if instr(f,"web://")>0 then
        f = replace(f,"web://","/")
        f = server.mappath(f)
      elseif instr(f,"path://")>0 then
        f = replace(f,"path://","")
        f = server.mappath(f)
      end if
      if left(LCase(f),7)<>"http://" then f = "file://" & f
      Mappath = f
    End Function

  end class
%>
标签: , , ,

com1文件不能删除

六 28th, 2010

com1不能删除

com1是不能直接创建的,攻击者可以利用\\.\漏洞来创建文件。
在资源管理器中不能直接删除,删除的时候用unc路径即可。
如果是隐藏只读文件,del是不能删除的

attrib \\.\E:\***\com1.asp -s -r -h
del \\.\E:\***\com1.asp

在Windows XP新建文件、文件夹或快捷方式时,系统的保留特殊设备名:CON,PRN,LPT,COM1,COM2,COM3,COM4,NUL、AUX,……不允许直接使用,但以特殊方法使用它们作为文件名或文件夹名后又能产生新的特别功能。如用下面命令建立新文档,不管文件类型扩展名是什么,文档中有无内容都不能正常打开,除非使用特殊方式打开浏览文档和对文档进行操作:
copy con \\.\d:\设备名.txt (文件扩展名可以为.RTF,.XLS,DOC,.WAV,.HTML,.MP3,.RM……)
MD \\.\D:\CON 或其它设备名,可以建立起能打开但不能删除的文件夹。
del \\.\D:\设备名.txt
RD \\.\D:\CON 或其它设备名

还有一个漏洞,是.\文件夹漏洞,很早以前我在博客中提到过,经常被病毒利用。下面就攻击者的使用性来说这两个漏洞的区别。

<%
set fso=server.createobject("Scripting.FileSystemObject")

'几个特殊文件的建立和删除方法
'asp可以创建,可以删除
'cmd可以创建,可以删除
'直接 创建 不可创建,不可删除,可浏览目录,不可查看文件
con = "\\.\" & Server.Mappath("con")
'fso.createfolder con
fso.deletefolder con

' .\ 漏洞
'asp可以创建,不可以删除
'cmd可以创建,可以删除
'直接 创建 不可创建,不可删除,不可浏览目录,不可查看文件
con = "\\.\" & Server.Mappath("abv") & "..\"
'fso.createfolder con
fso.deletefolder con
%>

这两种方法创建的文件(后门),在浏览器中均能正常访问,常常被挂马这利用。我猫七就深受其害。
如果你在遇到CON不能删除,PRN不能删除,LPT不能删除,COM1不能删除,COM2不能删除,COM3不能删除,COM4不能删除,COM5不能删除,COM6不能删除,COM7不能删除,COM8不能删除,NUL不能删除、AUX不能删除,……这种问题,知道怎么解决了把