分类目录归档:ASP

aspcms挂马问题

通过留言本拿WebShell:

留言板回复: ┼攠数畣整爠焕敌瑳∨≡┩忾,他的网站立即就被黑了。

访问数据库路径,即可拿到 WEBShell。

解决方案:修改 数据库默认路径,不要用 .asp结尾。

继续阅读

巧用ASPJPEG做验证码识别程序

在写程序实现 发帖/回帖 中,验证码识别是一个非常重要的工具。今天我就来些这样一个工具。

首先需要创建文字表(A),然后去识别原图(B)。然后截出某字符的图片,比较第一个像素(0,0)的差值,第二个像素的差值(0,1)的差值,然后。。。。最终差值最小的就是识别出的字符。

说起来有点绕口,实际很简单。直接上代码了(VBS对图像处理较弱,所以用到ASPJPEG组件)。

下载地址:http://www.miaoqiyuan.cn/products/ocr.rar

继续阅读

G级Access网站优化

如果做企业站,ASP+Access是一个最佳选择。但是如果Access的数据库达到G级别,那么性能可能就会大大的下降。如果数据库没有优化,打开asp页面几秒是常有的事情。如果一个Access表内几十万条数据,恰巧ASP页面又有几十个查询,可能就悲剧了。网站打开时间要按分钟计算了。

Asp+Access以前数据量少的时候,没有任何问题。数据量一大,各种麻烦的问题就多了起来。总不能让客户等几分钟打开首页把。 继续阅读

ASP的Base64函数

  Const BASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  Private sBASE_64_CHARACTERS

  Function Base64encode(ByVal asContents)
    asContents = strUnicode2Ansi(asContents)
    Dim lnPosition,lsResult,Char1,Char2,Char3,Char4,Byte1,Byte2,Byte3,SaveBits1,SaveBits2,lsGroupBinary,lsGroup64,M4, len1, len2
    len1 = LenB(asContents)
    If len1 < 1 Then
      Base64encode = ""
      Exit Function
    End If
    M4 = len1 Mod 3
    If M4 > 0 Then asContents = asContents & String(3 - M4, Chr(0))
    '补足位数是为了便于计算
    If M4 > 0 Then
      len1 = len1 + (3 - M4)
      len2 = len1 - 3
    Else
      len2 = len1
    End If
    lsResult = ""
    sBASE_64_CHARACTERS = strUnicode2Ansi(BASE_64_CHARACTERS)
    For lnPosition = 1 To len2 Step 3
      lsGroup64 = ""
      lsGroupBinary = MidB(asContents, lnPosition, 3)
      Byte1 = AscB(MidB(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
      Byte2 = AscB(MidB(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
      Byte3 = AscB(MidB(lsGroupBinary, 3, 1))
      Char1 = MidB(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
      Char2 = MidB(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
      Char3 = MidB(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
      Char4 = MidB(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)
      lsGroup64 = Char1 & Char2 & Char3 & Char4
      lsResult = lsResult & lsGroup64
    Next
    '处理最后剩余的几个字符
    If M4 > 0 Then
      lsGroup64 = ""
      lsGroupBinary = MidB(asContents, len2 + 1, 3)
      Byte1 = AscB(MidB(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
      Byte2 = AscB(MidB(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
      Byte3 = AscB(MidB(lsGroupBinary, 3, 1))
      Char1 = MidB(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
      Char2 = MidB(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
      Char3 = MidB(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
      If M4 = 1 Then
        lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) '用=号补足位数
      Else
        lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) '用=号补足位数
      End If
      lsResult = lsResult & lsGroup64
    End If
    Base64encode = strAnsi2Unicode(lsResult)
  End Function

  Function Base64decode(ByVal asContents)
    asContents = strUnicode2Ansi(asContents)
    Dim lsResult,lnPosition,lsGroup64, lsGroupBinary,Char1, Char2, Char3, Char4,Byte1, Byte2, Byte3,M4, len1, len2
    len1 = LenB(asContents)
    M4 = len1 Mod 4

    If len1 < 1 Or M4 > 0 Then
      '字符串长度应当是4的倍数
      Base64decode = ""
      Exit Function
    End If
    '判断最后一位是不是 = 号
    '判断倒数第二位是不是 = 号
    '这里m4表示最后剩余的需要单独处理的字符个数
    If MidB(asContents, len1, 1) = ChrB(61) Then M4 = 3
    If MidB(asContents, len1 - 1, 1) = ChrB(61) Then M4 = 2
    If M4 = 0 Then
      len2 = len1
    Else
      len2 = len1 - 4
    End If
    sBASE_64_CHARACTERS = strUnicode2Ansi(BASE_64_CHARACTERS)
    For lnPosition = 1 To len2 Step 4
      lsGroupBinary = ""
      lsGroup64 = MidB(asContents, lnPosition, 4)
      Char1 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 1, 1)) - 1
      Char2 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 2, 1)) - 1
      Char3 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 3, 1)) - 1
      Char4 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 4, 1)) - 1
      Byte1 = ChrB(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
      Byte2 = lsGroupBinary & ChrB(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
      Byte3 = ChrB((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
      lsGroupBinary = Byte1 & Byte2 & Byte3
      lsResult = lsResult & lsGroupBinary
    Next
    '处理最后剩余的几个字符
    If M4 > 0 Then
      lsGroupBinary = ""
      lsGroup64 = MidB(asContents, len2 + 1, M4) & ChrB(65) 'chr(65)=A,转换成值为0
      If M4 = 2 Then '补足4位,是为了便于计算
        lsGroup64 = lsGroup64 & ChrB(65)
      End If
      Char1 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 1, 1)) - 1
      Char2 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 2, 1)) - 1
      Char3 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 3, 1)) - 1
      Char4 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 4, 1)) - 1
      Byte1 = ChrB(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
      Byte2 = lsGroupBinary & ChrB(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
      Byte3 = ChrB((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
      If M4 = 2 Then
        lsGroupBinary = Byte1
      ElseIf M4 = 3 Then
        lsGroupBinary = Byte1 & Byte2
      End If
      lsResult = lsResult & lsGroupBinary
    End If
    Base64decode = strAnsi2Unicode(lsResult)
  End Function

  Function strUnicodeLen(ByVal asContents)
    '计算unicode字符串的Ansi编码的长度
    Dim asContents1
    Dim len1,k,i,asc1
    asContents1 = "a" & asContents
    len1 = Len(asContents1)
    k = 0
    For i = 1 To len1
      asc1 = Asc(Mid(asContents1, i, 1))
      If asc1 < 0 Then asc1 = 65536 + asc1
      If asc1 > 255 Then
        k = k + 2
      Else
        k = k + 1
      End If
    Next
    strUnicodeLen = k - 1
  End Function

  Function strUnicode2Ansi(ByVal asContents)
    '将Unicode编码的字符串,转换成Ansi编码的字符串
    Dim len1,i,VarChar,varAsc,varHex, varlow, varhigh
    strUnicode2Ansi = ""
    len1 = Len(asContents)
    For i = 1 To len1
      VarChar = Mid(asContents, i, 1)
      varAsc = Asc(VarChar)
      If varAsc < 0 Then varAsc = varAsc + 65536
      If varAsc > 255 Then
        varHex = Hex(varAsc)
        varlow = Left(varHex, 2)
        varhigh = Right(varHex, 2)
        strUnicode2Ansi = strUnicode2Ansi & ChrB("&H" & varlow) & ChrB("&H" & varhigh)
      Else
        strUnicode2Ansi = strUnicode2Ansi & ChrB(varAsc)
      End If
    Next
  End Function

  Function strAnsi2Unicode(asContents)
    '将Ansi编码的字符串,转换成Unicode编码的字符串
    Dim len1,i,VarChar,varAsc
    strAnsi2Unicode = ""
    len1 = LenB(asContents)
    If len1 = 0 Then Exit Function
    For i = 1 To len1
      VarChar = MidB(asContents, i, 1)
      varAsc = AscB(VarChar)
      If varAsc > 127 Then
        strAnsi2Unicode = strAnsi2Unicode & Chr(AscW(MidB(asContents, i + 1, 1) & VarChar))
        i = i + 1
      Else
        strAnsi2Unicode = strAnsi2Unicode & Chr(varAsc)
      End If
    Next
  End Function