Beveiliging Code snippets Plugins

Cross site authenticatie voorkomen voor gebruikers op WordPress multisite

Ik ben op dit moment bezig met een applicatie die deels werkt met het authenticeren van gebruikers op basis van het domein waarmee ze inloggen: verschillende gebruikers kunnen bij een account horen, en de applicatie can controleren of de gebruiker bij een account hoort op basis van het domein.

WordPress Multisite is erg geschikt hiervoor. Er is alleen één ding dat hierbij niet zo handig is: WordPress beschouwt je als zijnde ingelogd op elk deel van het netwerk, ook als je alleen maar lid bent van een van de subsites.

Om cross-site login te voorkomen heb ik wat code toegevoegd die op elke request uitgevoerd wordt op de authenticate hook. Het is een vrij simpel stukje code: het controleert of de ingelogde gebruiker lid is van het huidige blog. Zo niet, dan word je uitgelogd en naar het netwerk site_url geredirect.

add_action('authenticate', array($this, 'validate_on_login'), 100, 3);

function validate_on_login(){
  if (!is_user_logged_in()) {
     return;
  }

  $user = wp_get_current_user();

  //allow only login if user is member of this blog

  if (!is_user_member_of_blog( $user->ID, get_current_blog_id() ) && !is_super_admin( $user->ID )) {
    wp_logout();
    wp_redirect(network_site_url());exit();
  }

}

Related Articles

  • De Yoast metabox onderaan plaatsen bij custom metabox velden

    Als je met bijvoorbeeld CMB2 custom metaboxes aan je post toevoegt, en je hebt Yoast Seo geinstalleerd, is het je misschien opgevallen dat je eigen metaboxes helemaal naar beneden worden...
  • Emails sturen in WordPress

    Voor een eenvoudig contactformulier kan ja het beste een plugin gebruiken. Contact form 7 bijvoorbeeld. Maar soms wil je wat meer maatwerk: een met een cronjob gegenereerde email (bijvoorbeeld elke...
  • Custom images met het juiste WordPress formaat tonen

    Vaak wil je meer afbeeldingen in je website dan alleen de standaard featured image in WordPress. Dit is op zich niet moeilijk. Met Custom Meta Boxes 2 heb je een...
  • Bepaalde post types niet cachen in WP Rocket

    Om een site snel te krijgen gebruik ik vaak WP Rocket: volgens mij een van de snelste caching plugins voor WordPress. Als een pagina gecached wordt, wordt deze eigenlijk opgeslagen...

Laat een reactie achter