Trick # 574 | Dieser Beitrag beinhaltet 804 Wörter. – Geschätzte Lesezeit: ca. 5 Minuten.
Ist Ihre ganze WordPress-Site (oder Teile davon) nur für eingeloggte User erreichbar? Im Alltag kann der Zwangs-Login ganz schön nerven. Praktisch wäre es, wenn gewisse IPs «whitelisted» wären. Die User müssten sich dann nicht wieder einloggen, bzw. müssten sich nur dann neu einloggen, wenn sie mal von woanders auf die Website zugreifen wollen. Ist gar nicht mal so schwierig einzurichten.
Sie benötigen etwas PHP-Code. Den folgenden Block legen Sie dazu in der Datei functions.php ab. Sie finden diese im WordPress-Backend unter Design/Theme-Datei-Editor:
// IP-WhiteListing
// Add settings page for managing IPs
add_action('admin_menu', function () {
add_options_page('Admin IP Whitelist', 'Admin IP Whitelist', 'manage_options', 'admin-ip-whitelist', 'render_ip_whitelist_page');
});// Render the settings page
function render_ip_whitelist_page() {
if (!current_user_can('manage_options')) {
return;
}$whitelist = get_option('admin_ip_whitelist', []);
$current_ip = $_SERVER['REMOTE_ADDR'];// Remove old IPs on page load
clean_old_ips();if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_ip'])) {
$new_ip = sanitize_text_field($_POST['new_ip']);
if (filter_var($new_ip, FILTER_VALIDATE_IP) && !isset($whitelist[$new_ip])) {
$whitelist[$new_ip] = time(); // Speichere aktuellen Zeitstempel
update_option('admin_ip_whitelist', $whitelist);
}
}if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['remove_ip'])) {
$remove_ip = sanitize_text_field($_POST['remove_ip']);
unset($whitelist[$remove_ip]);
update_option('admin_ip_whitelist', $whitelist);
}echo '<div class="wrap">';
echo '<h1>Admin IP-Whitelist</h1>';
echo '<form method="post">';
echo '<h2>IP-Whitelist</h2>';
echo '<ul>';
foreach ($whitelist as $ip => $timestamp) {
$last_access = date('Y-m-d H:i:s', $timestamp);
echo "<li><b>$ip</b><br />Letzter Zugriff: $last_access <button type='submit' name='remove_ip' value='$ip'>IP entfernen</button></li>";
}
echo '</ul>';
echo '<hr>';
echo '<h2>Aktuelle IP</h2>';
echo "<p>Ihre IP: $current_ip</p>";
echo '<input type="hidden" name="new_ip" value="' . esc_attr($current_ip) . '">';
echo '<button type="submit" name="add_ip">Aktuelle IP whitelisten</button>';
echo '</form>';
echo '</div>';
}// Auto-login for whitelisted IPs
add_action('init', function () {
if (is_user_logged_in()) {
return;
}$whitelist = get_option('admin_ip_whitelist', []);
$current_ip = $_SERVER['REMOTE_ADDR'];if (isset($whitelist[$current_ip])) {
// Update last access timestamp
$whitelist[$current_ip] = time();
update_option('admin_ip_whitelist', $whitelist);$admin_user = get_users(['role' => 'administrator', 'number' => 1])[0] ?? null;
if ($admin_user) {
wp_set_auth_cookie($admin_user->ID, true);
}
}
});// Clean old IPs
function clean_old_ips() {
$whitelist = get_option('admin_ip_whitelist', []);
$one_year_ago = time() - YEAR_IN_SECONDS; // Define 1 year (365 days)foreach ($whitelist as $ip => $timestamp) {
if ($timestamp < $one_year_ago) {
unset($whitelist[$ip]);
}
}update_option('admin_ip_whitelist', $whitelist);
}// Schedule daily cleanup
if (!wp_next_scheduled('daily_ip_cleanup')) {
wp_schedule_event(time(), 'daily', 'daily_ip_cleanup');
}add_action('daily_ip_cleanup', 'clean_old_ips');Das war der wichtigste Teil.
In Ihrem WordPress-Backend erscheint nun unter «Einstellungen» der neue Punkt «Admin IP Whitelist». Dort können Sie einerseits die aktuell verwendete IP sehen und diese gleich zur WhiteList hinzufügen. Das funktioniert dann auch gleich für alle anderen User der WordPress-Seite, die von dieser IP zugreifen – was besonders in Unternehmen oder grösseren Teams sehr hilfreich ist.
Selbstverständlich können Sie auf der Seite «Admin IP Whitelist» auch nicht mehr benötigte WhiteList -Einträge entfernen. Das Script entfernt aber IPs, von welchen mehr als ein Jahr nicht mehr zugegriffen wurde, auch selbständig. So haben Sie mehr Ordnung und senken das Sicherheitsrisiko.
Einen Haken hat das Script allerdings: Die Internetprovider wechseln – je nach Abonnement – hin und wieder die zugewiesene IP. Teilweise sogar relativ häufig, so dass dann halt doch wieder ein Login (und allenfalls das Whitelisten) nötig ist.
Werbung


