Come posso controllare gli input del mio sito web quando vengono inseriti dagli utenti?

2

Ho un sito web di domande e risposte come SO. Ho alcune limitazioni su alcune delle strutture. Ad esempio, un utente non può votare chi ha meno di 20 reputazione. Oppure un utente non può chiudere una domanda fino a guadagnare almeno 200 punti reputazione.

Ok, c'è anche qualcosa che non ha alcuna limitazione, come scrivere una risposta per domande. In questo caso, un utente non valido può scrivere più risposte irrilevanti per più domande e rende il mio database enorme con informazioni inutili.

Quindi suppongo di dover controllare qualcosa prima di inserire una nuova risposta, ho ragione? O comunque, come posso gestire gli input del mio sito web? Come ho detto, nel mio attuale algoritmo, un cattivo utente (come uno spammer o un hacker) può semplicemente inserire molti dati inutili nel mio database, e quindi forse lo capisco dopo 1 giorno ( che è troppo tardi) che in questo caso, occorrono alcune volte per bloccarlo e rimuovere tutti i suoi dati.

In conclusione, mi piace sapere, (ad esempio) , come può gestirlo un sito come SO? Ho bisogno di una query separata prima di inserire una nuova risposta per il controllo? O cosa?

Nota: utilizzo PHP (per i codici lato server) e MySQL (per i codici di database) .

    
posta Martin AJ 27.08.2016 - 10:30
fonte

1 risposta

1

Utilizza il limite di velocità e consenti solo le domande X pubblicate entro l'ora Y. Questo dovrebbe rallentare qualsiasi attaccante e consentire agli umani di gestire lo spam (tramite downvotes o flag, ad esempio).

Ogni volta che l'utente tenta di pubblicare una domanda, interrogare il database per la sua ultima domanda e verificare che l'ora corrente sia maggiore del post post di quella domanda + il ritardo minimo richiesto tra due post (su alcuni siti Stack Exchange credo sia 30 minuti).

A seconda dei tuoi requisiti di prestazione potresti de-normalizzare un po 'il tuo database e mantenere l'ultima domanda direttamente nel modello dell'utente - questo significa che devi aggiornare il loro modello ogni volta che pubblicano ma ti salva una query delle loro domande dal momento che tutte le informazioni di cui avrai bisogno saranno nel modello utente che hai interrogato comunque (la tua struttura probabilmente lo fa per te come effetto collaterale di controllare se sono loggati).

Puoi anche utilizzare Redis o Memcached per memorizzare nella cache i modelli per migliorare ulteriormente le prestazioni.

Infine, se sei preoccupato solo dello spam automatico ma non dello spam manuale, puoi presentare un captcha invece di impedire completamente che vengano pubblicati se tentano di pubblicare troppo spesso.

    
risposta data 27.08.2016 - 10:48
fonte

Leggi altre domande sui tag