Visualizzazione risultati 1 fino 22 di 22

Discussione: Mi serve una mano per creazione plugin da esperti php/wordpress

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Ultimamente vegamami (forum - bbpress) è bersagliato dallo spam (anche se prontamente fermato da akismet) e noto che tutto questo spam è nel database di "Stop Forum Spam" - PS: http://www.stopforumspam.com/usage

    Così mi è venuto in mente quando su smf avevo un plugin che mi faceva il check sul loro database ed ho pensato: "perché non crearlo anche per wordpress?"

    -
    Manca la parte admin, è solo una bozza, e ancora non fa alcuna query al loro database, ma ciò che non capisco è perché non popola i campi dell'input con i dati dell'eventuale spammer (commentatore)

    Codice PHP:
    <?php

    // Questo viene inserito nel form dei commenti e dovrebbe prendersi i valori dell'utente (ma è ancora in bozza - voglio prima capire perché non riempie i campi) :/
    function stopforumspam_comment_form()
    {
    check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type );
    global
    $wpdb;
    echo
    "\n\t<!-- Stop Forum Spam Check Start -->
    <input type=\"hidden\" name=\"sfs_ip\" value=\""
    .$user_ip."\" />
    <input type=\"hidden\" name=\"sfs_author\" value=\""
    .$author."\" />
    <input type=\"hidden\" name=\"sfs_email\" value=\""
    .$email."\" />
    <!-- Stop Forum Spam Check End -->\n"
    ;
    }

    // Qui poi vedrò di fare la query al database e quindi gestire un errore bloccante anziché stampare semplicemente il risultato :P
    function stopforumspam_check_query()
    {
    if(isset(
    $_POST['sfs_ip']) && !isset($_POST['sfs_author']) && !isset($_POST['sfs_email']))
    {
    echo
    "http://www.stopforumspam.com/api?ip=*.*.*.*";
    }
    elseif(!isset(
    $_POST['sfs_ip']) && !isset($_POST['sfs_author']) && isset($_POST['sfs_email']))
    {
    echo
    "http://www.stopforumspam.com/api?email=test@mail.it";
    }
    elseif(!isset(
    $_POST['sfs_ip']) && isset($_POST['sfs_author']) && !isset($_POST['sfs_email']))
    {
    echo
    "http://www.stopforumspam.com/api?username=myuser";
    }
    else
    die(
    "Bloccato da stop forum spam");
    }
    }

    add_action('comment_form', 'stopforumspam_comment_form');
    add_filter('pre_comment_approved', 'stopforumspam_check_query');

    ?>
    --

    Edit: ok, son riuscito a popolare i campi così:
    Codice PHP:
    function stopforumspam_comment_form()
    {
    $commenter = wp_get_current_commenter();
    echo
    "\n\t<!-- Stop Forum Spam Check Start -->
    <input type=\"\" name=\"sfs_ip\" value=\""
    .$_SERVER['REMOTE_ADDR']."\" />
    <input type=\"\" name=\"sfs_author\" value=\""
    . esc_attr( $commenter['comment_author'] ) . "\" />
    <input type=\"\" name=\"sfs_email\" value=\""
    . esc_attr( $commenter['comment_author_email'] ) . "\" />
    <!-- Stop Forum Spam Check End -->\n"
    ;
    }
    Ora tocca solo fare il controllo sull'xml al database (poi penserò alla pagina di configurazione) :)

    -

    Allora, adesso ho il link così strutturato (esempio):

    -
    Come faccio per estrapolare con uno di questi formati (la scelta non manca) un risultato che mi dica se ha trovato ip, mail o username nel database? :)

    -
    Codice PHP:
    function wp_stopforumspam_check_query()
    {
    $link = "http://www.stopforumspam.com/api?ip=".$sfsip."&username=".$sfsauthor."&email=".$sfsemail."&f=***"; // fORMATO DA DECIDERE
    if(***)
    {
    die(
    "bloccato da wp stopforumspam perché abbiamo trovato la tua mail e/o il tuo nick e/o il tuo ip nel loro database");
    }
    }
    -

    Riedit: Un commento spam appena ricevuto su bbpress (fermato comunque da akismet) nonostante oggi ho installato recaptcha (sarebbe stato fermato da questo mio plugin): http://www.stopforumspam.com/api?ema...=46.119.121.99

    -

    Edit: ok, ho una bozza funzionante:
    Codice PHP:
    function wp_stopforumspam_comment_form()
    {
    $commenter = wp_get_current_commenter();
    echo
    "\n\t<!-- WP Stop Forum Spam Check Start -->
    <input type=\"hidden\" name=\"sfs_author\" value=\""
    .esc_attr( $commenter['comment_author'] )."\" />
    <input type=\"hidden\" name=\"sfs_email\" value=\""
    .esc_attr( $commenter['comment_author_email'] )."\" />
    <input type=\"hidden\" name=\"sfs_ip\" value=\""
    .getRealIpAddr()."\" />
    http://www.stopforumspam.com/api?username="
    .esc_attr( $commenter['comment_author'] )."&email=".esc_attr( $commenter['comment_author_email'] )."&ip=".getRealIpAddr()."&f=json
    <!-- WP Stop Forum Spam Check End -->\n"
    ;
    }

    function
    wp_stopforumspam_check_query()
    {
    $commenter = wp_get_current_commenter();
    $link = json_decode(file_get_contents("http://www.stopforumspam.com/api?username=".esc_attr( $commenter['comment_author'] )."&email=".esc_attr( $commenter['comment_author_email'] )."&ip=".getRealIpAddr()."&f=json"));
    if(((
    $link->username->appears) == 1) || (($link->email->appears) == 1) || (($link->ip->appears) == 1))
    {
    die(
    "Blocked by stop forum spam: http://www.stopforumspam.com/");
    }
    }
    Però non prende i parametri dal form al primo avvio (sembra li peschi dai cookie e quindi il primo commento passerebbe comunque ) e una bloccato la prima volta non importa che si cambino i dati nel form... Rimangono i dati dai cookie e quindi il blocco

    Vedrò di risolvere questi problemi e il plugin è pronto! Chi volesse testarlo: http://www.darkwolf.it/wp-stop-forum-spam.zip
    Ultima modifica di darkwolf : 11-02-2013 alle ore 03.05.35

  2. #2
    Guest

    Predefinito

    Questo plugin servirebbe a bloccare i commenti a monte di akismet e prevenire direttamente l'inserimento nel database?

  3. #3
    L'avatar di vegamami
    vegamami non è connesso Neofita
    Data registrazione
    23-08-2010
    Messaggi
    9

    Predefinito

    Citazione Originalmente inviato da niccolotapparo Visualizza messaggio
    Questo plugin servirebbe a bloccare i commenti a monte di akismet e prevenire direttamente l'inserimento nel database?
    Rispondo da questo profilo, ma son sempre io... Sì, anticipando anche akismet fa il check sul database di stopforumspam ed evita proprio l'inserimento del commento (così non vengono inseriti nemmeno nella code di spam)
    -
    Comunque credo di avere capito dov'è il problema... Io devo pescare i dati dal form dei commenti anziché ricrearli nel nuovo input (solo che non posso provare perché non sono con il mio pc essendo fuori Messina) :P
    Ultima modifica di vegamami : 11-02-2013 alle ore 19.14.20

  4. #4
    Guest

    Predefinito

    Ci hai dato un'ottima idea per un antispam sui commenti

  5. #5
    L'avatar di vegamami
    vegamami non è connesso Neofita
    Data registrazione
    23-08-2010
    Messaggi
    9

    Predefinito

    Citazione Originalmente inviato da niccolotapparo Visualizza messaggio
    Ci hai dato un'ottima idea per un antispam sui commenti
    Eh, ma questa, appunto, sarebbe la mia idea (rientro a Messina mercoledì sera - poi vedo di sistemare il plugin e rilascio al pubblico)
    - DarkWolf

  6. #6
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Rieccomi :)
    Il plugin l'ho sistemato ripulendo completamente il form (non serviva proprio) e adesso è molto più semplice e leggero (fa il check solo su mail e ip (tanto quanndo trovava un user c'era anche ip o mail - quindi tanto vale cercare direttamente su ip o mail così evitiamo falsi positivi sugli username)
    -
    Unico problema: non funziona sugli alterblog... devo trovare un'alternativa a file_get_content
    > http://www.darkwolf.it/wp-stop-forum-spam.zip ( installa e prova con una mail tipo: 685@webbusinessanalysts.com )

    Edit: nemmeno via simplecml riesco a tirarmelo con alterblog:
    Codice PHP:
    $sfslink = "http://www.stopforumspam.com/api?email=".$_POST['email']."&ip=".getRealIpAddr()."&f=xmldom";
    $link = new SimpleXMLElement($sfslink, null, true);
    $email = $link->email->appears;
    $ip = $link->ip->appears;
    Funziona su wamp
    Ultima modifica di darkwolf : 14-02-2013 alle ore 05.14.28

  7. #7
    Guest

    Predefinito

    Ho aggiunto un'estensione a altervista optimizer che farà un lavoro simile a quello di akismet. L'ho messo a tradimento su vegamami ed è già in fase di test su vari blog trafficati. Se tutto va bene tra non molto lo distribuiamo.

  8. #8
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Vedo :)
    Ma qual è l'engine che cerca se è spam o no? :P
    Perché ho ancora commenti di spam... Commenti che sarebbero stati bloccati da stopforumspam (hai idea se c'è modo di farlo digerire anche all'alterblog?)!
    -
    Esempio: http://www.stopforumspam.com/api?ema...153&f=xmlcdata
    Codice:
    Nome: Hegeusata
    Ip: 5.248.84.153
    Mail: 215@investfxlearning.com
    Sito: http://www.igrushka.forever.kz/phpBB2/viewtopic.php?p=229704#229704
    
    Commento: Blog is updated daily with content related to android based phones and tablets, Updated information on latest apps and programs released. Interested content and reply’s back to questions/comments. Top Android
    Eppure anche da AV è flaggato come spam: http://as.altervista.org/spam-block....p=5.248.84.153 (ma a me è passato - 13:07)
    Ultima modifica di darkwolf : 14-02-2013 alle ore 15.21.02

  9. #9
    Guest

    Predefinito

    Credo di averlo caricato dopo, a quell'ora ero a pranzo
    Il database è quello di stopforumspam, replicato su un nostro server e viene aggiornato periodicamente.

  10. #10
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Scusa, dato che ne avevi parlato alle 11.53 credevo ti riferissi a quell'ora
    Comunque mi passano ancora (seppur bloccati da akismet): http://as.altervista.org/spam-block....p=5.248.84.153



    Se van bene si può fare che questo di Av va per gli alterblog e il mio per gli esterni (non Av Optimizer - faccio un controllo io sul mio e siamo apposto).
    - L'unica rottura adesso è che con wp_die mi da i paragrafi e non riesco a rimuoverli (causano errore nei sorgenti) :P
    Ultima modifica di darkwolf : 14-02-2013 alle ore 16.47.22

  11. #11
    Guest

    Predefinito

    Nel log del server risulta una sola richiesta da vegamami e non è quella del commento da te indicato. Può darsi che l'hook che ho usato venga aggirato in alcuni casi. Devo approfondire.

    EDIT: non avevo visto che è sul forum. Al momento il nostro plugin funziona solo per i commenti sul blog. Se vuoi usare il tuo per il forum evito di inserirlo nel nostro. Tanto c'è davvero poca gente che usa bbpress.
    Ultima modifica di niccolotapparo : 14-02-2013 alle ore 18.22.42

  12. #12
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Ah... ma non puoi fare niente per renderlo generale?
    Il mio si rende efficace anche nel forum (e non ho fatto niente affinché lo fosse) :)
    -
    PS: ho aggiornato il mio ed inserito anche un controllo per la presenza di av-optimizer... adesso mi sembra davvero ottimo e pronto per essere rilasciato :)

    > http://www.darkwolf.it/wp-stop-forum-spam.zip

    Ultima modifica di darkwolf : 16-02-2013 alle ore 00.31.20

  13. #13
    Guest

    Predefinito

    a che hook ti sei attaccato per il forum? io ho utilizzato pre_comment_on_post che si trova in wp-comments-post.php. Credo che quando uno posta sul forum questo script non venga richiamato.

  14. #14
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Questo qui (su avevo linkato lo zip):
    Codice PHP:
    add_filter('pre_comment_approved', 'wp_stopforumspam_check_query');
    -
    Edit: niente nick, scherzavo alla grande... in locale non ho bbpress e online non posso testarlo dato che sull'alterblog non può funzionare! Quindi, adesso che l'ho messo, noto che non funziona neanche a me (scusa)
    -
    > OT: che differenze ci sono tra "pre_comment_on_post" & "pre_comment_approved" (mi funzionano entrambi senza alcuna differenza)
    - Edit, credo d'aver capito! pre_comment_approved poi farebbe a pugni con gli altri plugin (tipo akismet) e quindi bisognerebbe giocarsela con le priorità, mentre pre_comment_on_post è immediato e quindi prioritario a tutto il resto (non va di approvazione, ma direttamente al post), dico bene? :)
    Ultima modifica di darkwolf : 15-02-2013 alle ore 22.15.53

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da darkwolf Visualizza messaggio
    pre_comment_approved poi farebbe a pugni con gli altri plugin (tipo akismet) e quindi bisognerebbe giocarsela con le priorità, mentre pre_comment_on_post è immediato e quindi prioritario a tutto il resto (non va di approvazione, ma direttamente al post), dico bene? :)
    Esattamente, pre_comment_on_post è il primo hook disponibile quando viene inviato un commento e se viene bloccato lì con una wp_die come ho fatto, non viene più eseguito nulla, né inserito nulla nel database.

    Abbiamo replicato il database perché con i numeri che facciamo non possiamo sfruttare le API di stop forum spam. Inoltre sto implementando un meccanismo di feedback in modo che, se passa dei commenti che poi vengono marcati manualmente come spam, i dati vengono comunicati al server che impara. In pratica replichiamo akismet, aggiungendo via via intelligenza al nostro sistema.

  16. #16
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Quindi pensi che la mia idea di sfruttare il loro database sia sbagliata in partenza?
    Io pensavo che essendo qualche richiesta ogni tanto dal singolo sito non comportasse un problema per stop forum spam, ma è vero che l'intero sotto dominio "altervista" potrebbe essere visto come un singolo sito (al pari del problema "facebook") e quindi sì che sarebbe considerato un vero denial of service :/
    Notice
    This API is NOT to be used as a general software firewall. Checking every incoming connection against the API will be treated as a denial of service attack against us and will result in the immediate blocking of any offending IP numbers
    -
    Io vorrei capire perché bbpress non usa lo stesso template di wordpress per i commenti -.-'
    Mi arrivano cca 10 commenti di spam al giorno da lì :(
    Ultima modifica di darkwolf : 18-02-2013 alle ore 17.48.13

  17. #17
    Guest

    Predefinito

    Beh, gli arriverebbe un numero di richieste giornaliere nell'ordine di 300.000, dubito che ne sarebbero felici

    non esprimo opinioni su bbpress.

  18. #18
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Credo che facciano un discorso di IP come fanno per il resto, con il limite di 20.000 richieste al giorno. Gestendo noi il database riusciamo anche a costruirci attorno un servizio per i siti Altervista :-)


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  19. #19
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    OK, tutto chiaro, ma non ho ancora capito se è saggia la mia idea di sfruttare il loro database nel mio plugin (che a questo punto è chieramente non utilizzabile per altervista) oppure no :P
    Cioè, quanti blog riescono a fare 20.000 commenti al giorno?
    -
    Magari metterò un avviso nel readme che spiega la situazione "rischio ban" nel caso di community

  20. #20
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Non credo che si rischi il ban, ma l'API risponderà picche. Cmq 20.000 commenti sono tanti.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  21. #21
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    OK, grazie saitfainder :)
    Aspetto di capire se riesco a renderlo compatibile anche con bbpress e poi lo rilascio

  22. #22
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Nick, oggi ho ripreso a smanettarci ed ho risolto per bbpress (sempre se ti interessa ancora - a me sì onestamente dato che vegamami è inondato di spam nonostante recaptcha) :P
    -
    Qui la mia versione "non alterblog": http://www.darkwolf.it/wp-stop-forum-spam.zip
    -
    Mentre queste le modifiche per optimizer:

    ---

    Questo per avere l'email e l'username per fare il controllo sia dal forum che dal blog (anche se io nel mio non l'ho inserito l'username causa rischio troppi falsi positivi - ho lasciato solo mail e ip):

    ... (nb: da applicare sia su "avopt_spam_hunter" che su "avopt_akismet_spam_report")!
    Codice PHP:
    // Fix bbpress plugin support start
    if (is_bbpress())
    {
    $comment_author = ( isset($_POST['bbp_anonymous_author']) ) ? trim(strip_tags($_POST['bbp_anonymous_author'])) : null;
    $comment_author_email = ( isset($_POST['bbp_anonymous_email']) ) ? trim($_POST['bbp_anonymous_email']) : null;
    }
    else
    {
    $comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
    $comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
    }
    // Fix bbpress plugin support end
    -
    E questi i filtri per attivarlo:
    Codice PHP:
    add_action('pre_comment_on_post','avopt_spam_hunter',1);
    // Check if bbpress plugin is active!
    include_once(ABSPATH . 'wp-admin/includes/plugin.php');
    If (
    is_plugin_active('bbpress/bbpress.php'))
    {
    add_action('bbp_new_reply_pre_extras', 'avopt_spam_hunter');
    add_action('bbp_new_topic_pre_extras', 'avopt_spam_hunter');
    }
    Ultima modifica di darkwolf : 13-03-2013 alle ore 04.42.05 Motivo: (corretto e verificato il tutto) ;)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •