Contrairement à la plupart des plug-ins spammer/spambot qui arrêtent les enregistrements d'une liste connue d'adresses IP de spam et de domaines de messagerie, je dois arrêter les utilisateurs malveillants susceptibles d'essayer d'enregistrer plusieurs comptes à partir de la même adresse IP. Leur intention peut être de harceler les gens dans les commentaires une fois qu'ils ont été interdits sur d'autres comptes ou d'essayer de jouer à des jeux avec l'un de mes formulaires de soumission et de soumettre des résultats en double pour tenter de détruire l'intégrité de la sortie.
Est-il possible de limiter une adresse IP en enregistrant des comptes pour une période donnée? Étant donné que les adresses IP changent, j'aimerais permettre à certains innocents qui pourraient se retrouver avec une adresse IP précédemment bloquée de s'enregistrer.
Bien que cette approche puisse être faussée par le fait qu’elle peut être contournée à l’aide de mandataires, il existe une approche simpliste (mais non testée), que vous devez améliorer mais vous donnerait les bases pour atteindre votre objectif souhaité.
Le processus tel que je le vois:
pre_user_login
ou pre_user_nicename
Exemple:
function filter_user_registration_ip($user_nicename) {
$ip = $_SERVER['REMOTE_ADDR']; //get current IP address
$time = time(); //get current timestamp
$blacklist = get_option('user_ip_blacklist') ?: array(); //get IP blacklist
/*
* If IP is an array key found on the resulting $blacklist array
* run a differential of the
*
*/
if ( array_key_exists($ip, $blacklist) ) {
/*
* Find the difference between the current timestamp and the timestamp at which
* the IP was stored in the database converted into hours.
*/
$diff_in_hours = ($time - $blacklist[$ip]) / 60 / 60;
if ( $diff_in_hours < 24 ) {
/*
* If the difference is less than 24 hours, block the registration attempt
* and do not reset or overwrite the timestamp already stored against the
* current IP address.
*/
wp_die('Your IP is temporarily blocked from registering an account');
}
}
/*
* If the IP address does not exist, add it to the array of blacklisted IPs with
* the current timestamp (now).
*
* Or if the IP address exists but is greater than 24 hours in difference between
* the original stored timestamp and the current timestamp, add it to the array
* of blacklisted IPs.
*/
$blacklist[$ip] = $time;
update_option('user_ip_blacklist', $blacklist);
return $user_nicename;
}
add_filter('pre_user_nicename', 'filter_user_registration_ip', 10, 1);
Remarques:
Une meilleure solution serait de ne pas interdire leur adresse IP à partir de Wordpress, mais si vous avez un accès root à WHM, vous pouvez interdire leur adresse IP à partir de votre serveur. C'est la vraie solution au problème.
En outre, les adresses IP ne changent généralement pas. Cependant, une personne peut utiliser une autre connexion Internet, un serveur proxy ou une autre manière d'utiliser une autre adresse IP. Cependant, ce sera toujours un problème pour eux, car une fois que vous aurez banni leur adresse IP d'origine, la seule solution réelle consiste à demander à leur fournisseur d'accès de modifier leur adresse IP, ce que beaucoup d'entre eux hésiteront ou refuseront totalement de refuser la demande. .
Si vous n'avez pas accès à WHM ou à la racine de votre serveur, vous pouvez toujours interdire leur IP en l'ajoutant au fichier .htaccess comme suit:
order allow,deny
deny from 123.45.67.89
allow from all