国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP教程 - 反SPAM新思路—換Z-BLOG的驗(yàn)證碼!

反SPAM新思路—換Z-BLOG的驗(yàn)證碼!

2019-10-15 10:14asp技術(shù)網(wǎng) ASP教程

最近我們一些Z-BLOGGER都在想做個(gè)什么插件攔住SPAM,當(dāng)然解決方法也不是沒有,就是弄個(gè)超強(qiáng)的服務(wù)器,可惜搞不起。那我們只好從SPAMMER的角度來想了。 懂一些的人可能知道,SPAM軟件的基本原理是[搜索目標(biāo)]-進(jìn)入網(wǎng)站-掃描驗(yàn)證碼

最近我們一些Z-BLOGGER都在想做個(gè)什么插件攔住SPAM,當(dāng)然解決方法也不是沒有,就是弄個(gè)超強(qiáng)的服務(wù)器,可惜搞不起。那……我們只好從SPAMMER的角度來想了。 
  懂一些的人可能知道,SPAM軟件的基本原理是[搜索目標(biāo)]-進(jìn)入網(wǎng)站-掃描驗(yàn)證碼-OCR-[填寫表單]-POST。每一步我們都可以加以防范,比較現(xiàn)實(shí)的是防止SPAM軟件成功的OCR出驗(yàn)證碼。Z-BLOG自帶的驗(yàn)證碼實(shí)在有點(diǎn)弱,干擾點(diǎn)等于沒有,感覺可以輕易的分析出驗(yàn)證碼里的數(shù)字。解決方法就是——換一個(gè)驗(yàn)證碼程序。 
  這個(gè)驗(yàn)證碼程序(就是我現(xiàn)在用的)是從月光留言本里挖出來的,稍加修改,以便適應(yīng)Z-BLOG。個(gè)人認(rèn)為要編出軟件OCR這個(gè)驗(yàn)證碼是有點(diǎn)難度的,應(yīng)該可以換取片刻的安寧。當(dāng)然,這只是權(quán)宜之計(jì),如果廣泛使用,勢(shì)必還會(huì)有高手來破解的。所以啊……最好官方能弄個(gè)服務(wù)器,有時(shí)候,我覺得商業(yè)化或是適當(dāng)引進(jìn)投資也是不錯(cuò)的~ 
目前還在測(cè)試效果,3-28晚開始。到目前(07-03-30)為止共收到1個(gè)SPAM(包括被攔截的。),內(nèi)容和別的SPAM不一樣,應(yīng)該不是那個(gè)垃圾SEO網(wǎng)站的作品(很大膽的加了2個(gè)鏈接),而且不是提交在在一般搜索引擎搜索進(jìn)來的《google加了一個(gè)網(wǎng)頁惡意軟件檢測(cè)?》,而是在我的留言本。根據(jù)REFERER的結(jié)果應(yīng)該是從主頁過去的(也不排除從別的地方進(jìn)去而沒有執(zhí)行腳本或提交refer信息),懷疑為人工SPAM(UPDATE:Haphic也收到了一個(gè)同樣的。到底是不是人工的?他用的驗(yàn)證碼是原版的……),換驗(yàn)證碼的效果還需繼續(xù)觀察…… 

c_validcode.asp代碼

復(fù)制代碼代碼如下:


<%@ CODEPAGE=65001 %> 
<% Option Explicit %> 
<%  
'On Error Resume Next 
 %> 
<!-- #include file="../c_option.asp" --> 
<!-- #include file="../function/c_function.asp" --> 
<% 

Response.buffer=true 

Call Com_CreatValidCode("CheckCode") 

Rem 生成驗(yàn)證碼圖片 
Sub Com_CreatValidCode(pSN) 
    Const codeLenMin = 5                '驗(yàn)證碼位數(shù)范圍 
    Const codeLenMax = 5                '驗(yàn)證碼位數(shù)范圍 
    Const cOdds = 2                         '雜點(diǎn)出現(xiàn)的機(jī)率 
    Const dbtTimes = 1                    '干擾次數(shù) 
    Const posX = 3                            '位置隨機(jī)范圍X 
    Const posY = 2                            '位置隨機(jī)范圍Y 
    ImgWidth = 60                            '圖像寬(要為4的倍數(shù)) 
    ImgHeight = 20                            '圖像高 

    Const cAmount = 10                     '字庫數(shù)量 
    Const cCode = "0123456789"    '字庫對(duì)應(yīng)的字符 
    Const UnitWidth = 16                '字寬(要為4的倍數(shù)) 
    Const UnitHeight = 15                '字高 
    Const DotsLimit = 10                '每次刪除有效點(diǎn)的上限(避免無法人為識(shí)別) 
    Const tryCount = 5                    '避免刪除有效點(diǎn)超過上限的嘗試次數(shù)限制 

    '----------- 

    Randomize 
    Dim i,ii,iii,flag,ActUnitWidth,ImgYuWidth,codeLen,ImgWidth,ImgHeight 
    codeLen = codeLenMin + cint(Rnd*(codeLenMax-codeLenMin)) 
    If ImgWidth Mod 4 <> 0 Or ImgWidth < codeLen*UnitWidth Then ImgWidth = codeLen*UnitWidth 
    If ImgHeight < UnitHeight Then ImgHeight = UnitHeight 

    ' 禁止緩存 
    Response.Expires = -9999 
    Response.AddHeader "Pragma","no-cache" 
    Response.AddHeader "cache-ctrol","no-cache" 
    Response.ContentType = "Image/BMP" 

    ' 顏色的數(shù)據(jù)(字符,背景) 
    Dim vColorData(1) 
    vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0)  ' 藍(lán)0,綠0,紅0(黑色)前景色 
    vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) ' 藍(lán)250,綠236,紅211(淺藍(lán)色)背景色 

    ' 字符的數(shù)據(jù)(可以自己修改,如果修改了尺寸,記得把前面的設(shè)定也改了) 
    Dim vNumberData(9) 
    vNumberData(0) = "111111111111111111110000000011111110000000000111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100111111000000000011111110000000011111111111111111111" 
    vNumberData(1) = "111111111111111111111100011111111111000001111111111000000111111111001100011111111111110001111111111111000111111111111100011111111111110001111111111111000111111111111100011111111111110001111111111000000000111111100000000011111111111111111111" 
    vNumberData(2) = "111111111111111111111100000111111111100000001111111100011100111111100011110011111111111110011111111111110011111111111110011111111111110011111111111110011111111111110011110011111110011111001111111000000000111111100000000011111111111111111111" 
    vNumberData(3) = "111111111111111111111000000111111111000000001111111001111110011111100111110011111111111110011111111111100011111111111110001111111111111110011111111111111100111111100111111001111110011111100111111100000000111111111000000111111111111111111111" 
    vNumberData(4) = "111111111111111111111111001111111111101100111111111100110011111111110011001111111110011100111111110011110011111110000000000000111000000000000011111111110011111111111111001111111111111100111111111111110011111111111111001111111111111111111111" 
    vNumberData(5) = "111111111111111111100000000001111100000000000111110011111111111111001111111111111100111111111111110011000000111111000001111001111111111111100111111111111110011111111111111001111100111111100111110011111110011111100000000011111111111111111111" 
    vNumberData(6) = "111111111111111111111100000111111111100000001111111100111110011111100111111111111110011111111111111001000001111111100000000011111110001111100111111001111110011111100111111001111110011111100111111100000000111111111000000111111111111111111111" 
    vNumberData(7) = "111111111111111111100000000001111110000000000111111001111110011111100111111001111111111111001111111111111100111111111111100111111111111100111111111111110011111111111111001111111111111100111111111111110011111111111111001111111111111111111111" 
    vNumberData(8) = "111111111111111111111000000111111111000000001111111001111110011111100111111001111110011111100111111100000000111111110000000011111111001111001111111001111110011111100111111001111110011111100111111100000000111111111000000111111111111111111111" 
    vNumberData(9) = "111111111111111111111000000111111111000000001111111001111110011111100111111001111110011111100111111100000000011111110000001001111111111111100111111111111110011111111111111001111110011111001111111100000000111111111000000111111111111111111111" 

    ' 隨機(jī)產(chǎn)生字符 
    Dim vCode(), vCodes 
    ReDim vCode(codeLen-1) 
    vCodes = GetVerifyNumber 
    For i = 0 To 4 
        vCode(i) = cint(mid(vCodes,i+1,1)) 
        vCode(i) = pcd_doubter(vNumberData(vCode(i)),UnitWidth,UnitHeight,DotsLimit,tryCount,dbtTimes) 
    Next 

    ' 隨機(jī)產(chǎn)生字符 
    'Dim vCodes 
    'ReDim vCode(codeLen-1) 
    'For i = 0 To codeLen-1 
    '  vCode(i) = Int(Rnd * cAmount) 
    '  vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1) 
    '  vCode(i) = pcd_doubter(vNumberData(vCode(i)),UnitWidth,UnitHeight,DotsLimit,tryCount,dbtTimes) 
    'Next 

    'Session(pSN) = vCodes  '記錄入Session 

    ' 輸出圖像文件頭 
    Response.BinaryWrite ChrB(66) & ChrB(77) & Num2ChrB(54+ImgWidth*ImgHeight*3,4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & Num2ChrB(ImgWidth,4) & Num2ChrB(ImgHeight,4) & ChrB(1) & ChrB(0) 

    ' 輸出圖像信息頭 
    Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & Num2ChrB(ImgWidth*ImgHeight*3,4) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) 

    ' 生成干擾線 
    ReDim noiseLine(1,-1) 
    Call makeNoise(noiseLine,ImgWidth,ImgHeight) 
    Call makeNoise(noiseLine,ImgWidth,ImgHeight) 
    ' 如果想多畫幾條直接復(fù)制就可以 
    ' Call makeNoise(noiseLine,ImgWidth,ImgHeight) 

    ' 位置隨機(jī) 
    ActUnitWidth = Int(ImgWidth / codeLen) 
    ImgYuWidth = ImgWidth - ActUnitWidth * codeLen 
    ReDim posAry(1,codeLen-1) 
    posAry(0,0) = Int((Rnd)*(posX+(ActUnitWidth-UnitWidth)/2)) 
    posAry(1,0) = Int((ImgHeight-UnitHeight)/2+(1-2*Rnd)*posY) 
    For i=1 To codeLen-2 
        posAry(0,i) = Int((1-2*Rnd)*(posX+(ActUnitWidth-UnitWidth)/2)) 
        posAry(1,i) = Int((ImgHeight-UnitHeight)/2+(1-2*Rnd)*posY) 
    Next 
    If codeLen > 1 Then 
        posAry(0,codeLen-1) = Int((Rnd)*(posX+(ActUnitWidth-UnitWidth)/2)) 
        posAry(1,codeLen-1) = Int((ImgHeight-UnitHeight)/2+(-Rnd)*posY) 
    End If 

    ' 輸出圖像數(shù)據(jù) 
    For i = ImgHeight-1 To 0 Step -1    '行 
      For ii = 0 To codeLen-1                    '字 
          For iii = 0 To ActUnitWidth-1         '字寬 
              flag = 0 
              If onNoiseLine(noiseLine,ii*ActUnitWidth+iii,i) Then ' 干擾線 
                   flag = 1 
            ElseIf getUnitDot(posAry,vCode,ii,iii,i,UnitWidth,UnitHeight) = "0" Then 
                flag = 1 
            ElseIf getUnitDot(posAry,vCode,ii-1,iii+ActUnitWidth,i,UnitWidth,UnitHeight) = "0" Then 
                flag = 1 
            ElseIf getUnitDot(posAry,vCode,ii+1,iii-ActUnitWidth,i,UnitWidth,UnitHeight) = "0" Then 
                flag = 1 
            End If 
            ' 隨機(jī)生成雜點(diǎn) 
            If Rnd * 99 + 1 < cOdds Then flag = 1 - flag 
            Response.BinaryWrite vColorData(1-flag) 
             Next 
        Next 
         For ii = 0 To ImgYuWidth-1 
             Response.BinaryWrite vColorData(1) 
         Next 
    Next 
End Sub 

Rem 獲取單元的點(diǎn)(考慮位移) 
Function getUnitDot(ByRef posAry,ByRef vCode,i,ByVal x,ByVal y,UnitWidth,UnitHeight) 
    getUnitDot = "1" 
    If i < 0 Or i > UBound(vCode) Then Exit Function 
    x = x - posAry(0,i) 
    If x < 0 Or x >= UnitWidth Then Exit Function 
    y = y - posAry(1,i) 
    If y < 0 Or y >= UnitHeight Then Exit Function 
    getUnitDot = Mid(vCode(i),y*UnitWidth+x+1,1) 
End Function 

Rem 生成干擾線 
Sub makeNoise(ByRef nl,imgW,UnitHeight) 
    Dim i,l,x1,y1,x2,y2,dx,dy,deltaT 
    x1 = Int(Rnd*imgW) 
    y1 = Int(Rnd*UnitHeight) 
    x2 = Int(Rnd*imgW) 
    y2 = Int(Rnd*UnitHeight) 
    dx = X2 - X1 
    dy = Y2 - Y1 
    If Abs(dx) > Abs(dy) Then deltaT = Abs(dx) Else deltaT = Abs(dy) 
    If deltaT = 0 Then Exit Sub 
    l = UBound(nl,2) 
    ReDim Preserve nl(1,l+deltaT+1) 
    l = l + 1 
    For i = 0 To deltaT 
        nl(0,l+i) = x1 + dx * i \ deltaT 
        nl(1,l+i) = y1 + dy * i \ deltaT 
    Next 
End Sub 

Rem 判斷是否為干擾線上的點(diǎn) 
Function onNoiseLine(ByRef nl,x,y) 
    onNoiseLine = False 
    Dim i 
    For i=0 To UBound(nl,2) 
        If x = nl(0,i) And y = nl(1,i) Then 
            onNoiseLine = True 
            Exit For 
        End If 
    Next 
End Function 

Rem 對(duì)單個(gè)字的點(diǎn)陣進(jìn)行干擾 
Rem 干擾思想:在點(diǎn)陣范圍內(nèi)隨機(jī)產(chǎn)生2個(gè)端點(diǎn),進(jìn)行連線,以位移較大的一方做橫軸,先將連線上的點(diǎn)刪除,再將被刪除點(diǎn)的縱軸方向上方或下方的點(diǎn)(隨機(jī)確定)移向被刪除點(diǎn),移動(dòng)后的空白用背景色補(bǔ)充 
Function pcd_doubter(ByVal str,UnitWidth,UnitHeight,DotsLimit,tryCount,dbtTimes) 
    Randomize 
    Dim x1,x2,y1,y2,dx,dy,deltaT,i,ii,way,f1,f2 
    For f1=1 To dbtTimes    '干擾次數(shù) 
        For f2=1 To tryCount    '避免刪除有效點(diǎn)超過上限的嘗試次數(shù)限制 
            '隨機(jī)確定2個(gè)端點(diǎn) 
            x1 = int(Rnd*UnitWidth) 
            x2 = int(Rnd*UnitWidth) 
            y1 = int(Rnd*UnitHeight) 
            y2 = int(Rnd*UnitHeight) 
            dx = X2 - X1 
            dy = Y2 - Y1 
            If Abs(dx) > Abs(dy) Then deltaT = Abs(dx) Else deltaT = Abs(dy) 
            ReDim ary(1,deltaT)    '存儲(chǔ)連線的點(diǎn) 
            If deltaT = 0 Then 
                ary(0,0) = x1 
                ary(1,0) = y1 
            Else 
                ii = 0 
                For i = 0 To deltaT 
                    ary(0,i) = x1 + dx * i \ deltaT 
                    ary(1,i) = y1 + dy * i \ deltaT 
                    If pcd_getDot(ary(0,i),ary(1,i),str,UnitWidth) = "0" Then ii = ii + 1 
                Next 
                ' 統(tǒng)計(jì)連線上有效點(diǎn)的數(shù)量,如未超過有效點(diǎn)上限則跳出循環(huán),執(zhí)行干擾 
                If ii <= DotsLimit Then Exit For 
            End If 
        Next 

        ' 執(zhí)行干擾(dx,dy改作不同的方向標(biāo)記用) 
        If Abs(dx) > Abs(dy) Then dx = 1 Else dx = 0 
        If dx = 1 Then 
            If Int(Rnd*10) > 4 Then 
                dy = 1 
                way = -1 
            Else 
                dy = UnitHeight - 2 
                way = 1 
            End If 
        Else 
            If Int(Rnd*10) > 4 Then 
                dy = 1 
                way = -1 
            Else 
                dy = UnitWidth - 2 
                way = 1 
            End If 
        End If 
        For i=0 To deltaT 
            For ii=ary(dx,i) To dy Step way 
                Call pcd_setDot(ary(0,i)*dx+ii*(1-dx),ary(1,i)*(1-dx)+ii*(dx),str,pcd_getDot(ary(0,i)*dx+(ii+way)*(1-dx),ary(1,i)*(1-dx)+(ii+way)*(dx),str,UnitWidth),UnitWidth) 
            Next 
            '添補(bǔ)空白 
            Call pcd_setDot(ary(0,i)*dx+(dy+way)*(1-dx),ary(1,i)*(1-dx)+(dy+way)*(dx),str,"1",UnitWidth) 
        Next 
    Next 
    pcd_doubter = str 
End Function 

Rem 得到某點(diǎn)的字符 
Function pcd_getDot(x,y,str,UnitWidth) 
    pcd_getDot = Mid(str,x+1+y*UnitWidth,1) 
End Function 

Rem 設(shè)置某點(diǎn)的字符 
Sub pcd_setDot(x,y,ByRef str,newDot,UnitWidth) 
    str = Left(str,x+y*UnitWidth) & newDot & Right(str,Len(str)-x-y*UnitWidth-1) 
End Sub 

Rem 將數(shù)字轉(zhuǎn)為bmp需要的格式 lens是目標(biāo)字節(jié)長(zhǎng)度 
Function Num2ChrB(ByVal num,lens) 
    Dim ret,i 
    ret = "" 
    While (num>0) 
        ret = ret & ChrB(num mod 256) 
        num = num \ 256 
    WEnd 
    For i=Lenb(ret) To lens-1 
        ret = ret & chrB(0) 
    Next 
    Num2ChrB = ret 
End Function 
%>

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 天天操夜夜操av | 国内免费自拍视频 | 激情小视频 | 黄色一级片免费观看 | av在线资源网 | 玖玖爱国产| 国产精品欧美久久久久一区二区 | 亚洲欧美视频网站 | 在线免费观看黄色 | www久久久| 亚洲欧美激情精品一区二区 | 亚洲日韩中文字幕一区 | 夜夜骑av | 黄色一级毛片免费看 | 久久久国产一级 | 不卡av电影在线观看 | 在线观看成人高清 | 在线视频国产一区 | 久久国产精品久久 | 亚洲一区二区中文字幕 | 久久99精品久久久久久园产越南 | 青青草97| 国产欧美精品一区二区三区 | 成人午夜精品久久久久久久网站 | 日本亚洲欧美 | 久久精品国产亚洲一区二区三区 | 久久久久综合 | 日本精品视频在线观看 | 午夜特片网 | 日本久久网 | 欧美在线视频网 | 色片在线观看 | 黄色小视频在线免费观看 | 国产乱xxxxx97国语对白 | 日日夜夜av | 国产成人在线视频 | 国产一区二区视频免费看 | 欧美精品不卡 | 青青草一区 | 亚洲国产精品一区二区三区 | 山岸逢花在线观看 |