ΑρχικήHow ToWordPress: Απενεργοποιήστε το REST API

WordPress: Απενεργοποιήστε το REST API

Η πιο πρόσφατη έκδοση του WordPress έρχεται με νέες δυνατότητες στο REST API που μπορούν να αξιοποιήσουν plugins, εφαρμογές, υπηρεσίες, ή το ίδιο το WordPress Core.

Πολλές φορές όμως ορισμένα από τα νέα χαρακτηριστικά που προσθέτουν οι προγραμματιστές της Automattic δεν χρησιμοποιούνται από όλους τους διαχειριστές της δημοφιλής πλατφόρμας blogging. Για παράδειγμα στο SecNews δεν χρησιμοποιούμε Emojis και το XML-RPC.

Η νέα λειτουργικότητα REST API, για παράδειγμα, μπορεί να χρησιμοποιηθεί από οποιονδήποτε που υπάρχει στη λίστα των χρηστών του WordPress.wordpress

Αυτό από μόνο του δεν είναι αρκετό για να δώσει πρόσβαση σε λειτουργίες του site, αλλά δίνει την δυνατότητα σε κάποιον κακόβουλο χρήστη να ανακαλύψει όλα τα ονόματα χρηστών και με επιθέσεις brute force να προσπαθήσει να μαντέψει τους κωδικούς πρόσβασης που χρησιμοποιούν. Φυσικά μπορεί να χρησιμοποιήσει και social engineering για να συλλέξει περισσότερα στοιχεία.

Θα πρέπει να αναφέρουμε ότι το νέο API δεν εκθέτει τίποτα περισσότερο από τα ονόματα των χρηστών που έτσι κι αλλιώς είναι διαθέσιμα ήδη κάπου αλλού στην ιστοσελίδα. Απλά τα εμφανίζει μαζεμένη τη λίστα όλων των λογαριασμών των χρηστών του WordPress.

Για να δείτε όλους τους λογαριασμούς χρηστών σε κάθε site που τρέχει WordPress 4.7 θα πρέπει να πάτε στην διεύθυνση:

http://domain_name/wp-json/wp/v2/users

Ας δούμε τώρα πως μπορείτε να αποκλήσετε την πρόσβαση σε αυτές τις πληροφορίες. Μπορείτε να το κάνετε με την εγκατάσταση ενός plugin ή προσθέτοντας κώδικα στο functions.php που βρίσκεται στον φάκελο που περιέχει το theme που χρησιμοποιείτε.

Το plugin ονομάζεται Disable REST API και όπως λέει και το όνομά του θα απενεργοποιήσει το REST API εμφανίζοντας ένα μήνυμα “Μη εξουσιοδοτημένη πρόσβαση” σε ανώνυμες αιτήσεις που ζητούν δεδομένα από το REST API.

Ας δούμε και τον κώδικα που μπορείτε να προσθέσετε στο functions.php:

//*Disable REST API
$current_WP_version = get_bloginfo('version');

if ( version_compare( $current_WP_version, '4.7', '>=' ) ) {
    Force_Auth_Error();
} else {
    Disable_Via_Filters();
}

function Force_Auth_Error() {
    add_filter( 'rest_authentication_errors', 'only_allow_logged_in_rest_access' );
}

function Disable_Via_Filters() {
    
	// Filters for WP-API version 1.x
    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );

    // Filters for WP-API version 2.x
    add_filter( 'rest_enabled', '__return_false' );
    add_filter( 'rest_jsonp_enabled', '__return_false' );

    // Remove REST API info from head and headers
    remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
    remove_action( 'template_redirect', 'rest_output_link_header', 11 );
	
}

function only_allow_logged_in_rest_access( $access ) {

	if( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_cannot_access', __( 'REST API is NOT for YOU! Sorry pal.', 'disable-json-api' ), array( 'status' => rest_authorization_required_code() ) );
    }

    return $access;
	
}

SecNews
SecNewshttps://www.secnews.gr
In a world without fences and walls, who need Gates and Windows

Εγγραφή στο Newsletter

* indicates required

FOLLOW US

LIVE NEWS