Problemi di spam in dBlog? Ecco come aggiungere reCaptcha a dBlog
Di Muso (del 30/07/2012 @ 10:27:14, in Informatica, linkato 5622 volte)
Come capita piu' o meno a tutti, anche io sono stato vittima di spam, quindi vi scrivo questa breve guida per inserire nel vostro bel dBlog il reCaptcha.
AVVISO che l'eliminazione dello spam NON e' IMMEDIATA!!! Suppongo per una questione di caching delle pagine sui server in giro per il mondo che permettono un accesso alle pagine con il vecchio codice. Cmq Tempo un mesetto e tutto si risolve.
File da modificare:
- articolo.asp
- commenti_invio.asp

in ordine dovrete sostituire in articolo.asp le seguenti righe (cioe' il form):



<%=Testo_Campo_Captcha%> CAPTCHA


<%=Testo_Campo_Commento%>

<%=Testo_Campo_Nome%>

<%=Testo_Campo_EMailLink%>






con il seguente form


' Il seguente campo NON deve essere compilato.
<%=Testo_Campo_Captcha%>
<%=Testo_Campo_Commento%>
<%=Testo_Campo_Nome%>
<%=Testo_Campo_EMailLink%>



mentre in commenti_invio.asp sostituire :


Dim SQLCommenti, RSCommenti, FIDA, FIDF, FIDFotografia, FIDArticolo, FCommento, FAutore, FLink, FTipologia, Errore, SQLControlloAutore, RSControlloAutore, ArrayParoleNonAmmesse, IArrayParoleNonAmmesse, ParolaNonAmmessaFiltrata, IParolaNonAmmessa, SQLCommentiTitoloRelativo, RSCommentiTitoloRelativo, TitoloRelativo 
'Se i commenti sono abilitati eseguo l'invio If Abilita_Commenti Then   
If Request.Form("campoNascosto") = "" Then     
   If CheckCAPTCHA(Trim(Request.Form("strCAPTCHA"))) Then     
   'Effettuo il controllo sul parametro id

con le seguenti, ricordandovi di inserire la VOSTRA private key nella riga
recaptcha_private_key      = "your_private_key" ' your private key


    recaptcha_challenge_field  = Request("recaptcha_challenge_field")
    recaptcha_response_field   = Request("recaptcha_response_field")
    recaptcha_public_key       = "6LegAcASAAAAADYH-RDuZqrp7QdFr_VXaFd8BWe6" ' your public key
    recaptcha_private_key      = "your_private_key" ' your private key
    
    Dim SQLCommenti, RSCommenti, FIDA, FIDF, FIDFotografia, FIDArticolo, FCommento, FAutore, FLink, FTipologia, Errore, SQLControlloAutore, RSControlloAutore, ArrayParoleNonAmmesse, IArrayParoleNonAmmesse, ParolaNonAmmessaFiltrata, IParolaNonAmmessa, SQLCommentiTitoloRelativo, RSCommentiTitoloRelativo, TitoloRelativo, WordNotPermitted

		'Se i commenti sono abilitati eseguo l'invio
		If Abilita_Commenti Then
		  If Request.Form("campoNascosto") = "" Then	
        server_response = ""
        newCaptcha = True
        if (Request.Form("recaptcha_challenge_field") <> "" or Request.Form("recaptcha_response_field") <> "") then
          Dim VarString
          VarString = _
                  "privatekey=" & recaptcha_private_key & _
                  "&remoteip=" & Request.ServerVariables("REMOTE_ADDR") & _
                  "&challenge=" & Request.Form("recaptcha_challenge_field") & _
                  "&response=" & Request.Form("recaptcha_response_field")
        
          Dim objXmlHttp
          Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
          objXmlHttp.open "POST", "http://www.google.com/recaptcha/api/verify", False
          objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
          objXmlHttp.send VarString
        
          Dim ResponseString
          ResponseString = split(objXmlHttp.responseText, vblf)
          Set objXmlHttp = Nothing
        
          if ResponseString(0) = "true" then
            'They answered correctly
             server_response = ""
          else
            'They answered incorrectly
             server_response = ResponseString(1)
          end if
          newCaptcha = False
        end if	
            
		    if server_response <> "" or newCaptcha then
           if newCaptcha = False then
                 
           %>
          	  
          	  
<%=Errore_Commento_Parametri%> <%=Errore_Captcha_Numeri_Sbagliati%> #commenti"><%=Testo_Commento_Riprova%>.
<% end if else

e poi


	If FIDA <> 0 OR FIDF <> 0 Then
					FCommento = Replace(SostituisciCaratteri(Request.Form("Commento"), "No"), VbCrLf, "
") If Len(Testo_Parole_NonAmmesse) > 0 AND Len(FCommento) > 0 Then ArrayParoleNonAmmesse = Split(Testo_Parole_NonAmmesse, ",") For IArrayParoleNonAmmesse = 0 To UBound(ArrayParoleNonAmmesse) ParolaNonAmmessaFiltrata = ""

con


        Dim foundCommento
        Dim foundAutore
        Dim foundLink
        Dim foundIPas
        Dim FIp
        Errore = False
        WorldNotPermitted = False
        
				If FIDA <> 0 OR FIDF <> 0 Then
					FCommento = Replace(SostituisciCaratteri(Request.Form("Commento"), "No"), VbCrLf, "
") FAutore = SostituisciCaratteri(Request.Form("Autore"), "No") FLink = SostituisciCaratteri(Request.Form("Link"), "No") FTipologia = Request.Form("Tipologia") FIp = Request.ServerVariables("REMOTE_ADDR") If Len(Testo_Parole_NonAmmesse) > 0 AND Len(FCommento) > 0 Then ArrayParoleNonAmmesse = Split(Testo_Parole_NonAmmesse, ",") For IArrayParoleNonAmmesse = 0 To UBound(ArrayParoleNonAmmesse) 'START Add by muss 20120615 foundCommento = InStr(FCommento, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse)) foundAutore = InStr(FAutore, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse)) foundLink = InStr(FLink, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse)) foundIP = InStr(FIp, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse)) If (foundCommento <> 0) OR (foundAutore <> 0) OR (foundLink <> 0) OR (foundIP <> 0) Then 'If foundCommento = True Then WorldNotPermitted = True Errore = True End If 'END by muss 20120615 ParolaNonAmmessaFiltrata = ""

alla fine


%>
	
<%=Conferma_Commento_ricevuto%> #commenti"><%=Testo_Commento_Visualizza%>.
<% Else %>
<%=Errore_Commento_CampoObbligatorio_e_AutoreLoggato%> <%=Testo_Commento_Riprova%>.
<% End If Else %>
<%=Errore_Commento_Parametri%> <%=Testo_Commento_Riprova%>.
<% End If Else %>
<%=Errore_Commento_Parametri%> <%=Errore_Captcha_Numeri_Sbagliati%> #commenti"><%=Testo_Commento_Riprova%>.
<% End If Else %>
<%=Errore_Commenti_NonAbilitati%>
<%

con


%>
	
<%=Conferma_Commento_ricevuto%> #commenti"><%=Testo_Commento_Visualizza%>.
<% Else If WordNotPermitted = True Then %>
<%=Errore_Parole_Non_Ammesse%> <%=Testo_Commento_Riprova%>.
<% Else %>
<%=Errore_Commento_CampoObbligatorio_e_AutoreLoggato%> <%=Testo_Commento_Riprova%>.
<% End If End If Else %>
<%=Errore_Commento_Parametri%> <%=Testo_Commento_Riprova%>.
<% End If end if Else %>
<%=Errore_Commenti_NonAbilitati%>
<%


Dopodiche' entrate come amministratori nel pannello di controllo di dBlog, andate nella sezione "Configurazione", dal menu' a tendina scegliete "Commenti".
A questo punto bisogna fare due modifiche, agli ultimi due campi in fondo:
- alla voce "Testo del campo Captcha anti-spam:" lasciare solo "Anti-Spam:" cancellando il resto
- alla voce "Errore campo Captcha numeri sbagliati" inserite una frase a piacere, Io ho inserito la seguente "le parole inserite in reCaptcha non sono corrette"


Qualche post da ip cinese lo riceverete ancora ma si tratta di un paio di post alla settimana (almeno nel mio caso).
Anche per questo ho aggiunto un controllo sulle parole ammesse anche nella firma e nell'IP che viene registrato, quindi se entrate come amministratori nella console alla voce commenti potete inserire un po' di parole o indirizzi ip che volete filtrare.
Se avete problemi contattatemi via mail, sono sempre presissimo e rischiate che passino giorni prima di ricevere una risposta a un commento inserito quì.