web-dev-qa-db-fra.com

WP REST Statut de publication de l'API à l'aide de JavaScript

Je me suis sali les mains dans l'API WP REST. J'ai suivi quelques tutoriels et j'ai une question utilisant JavaScript pour créer un nouveau message.

Dans this tutorial, le post var status = 'draft'; (voir le code). Je crains donc que quiconque ne puisse pirater ce statut?

jQuery( document ).ready( function ( $ ) {
    $( '#post-submission-form' ).on( 'submit', function(e) {
        e.preventDefault();
        var title = $( '#post-submission-title' ).val();
        var excerpt = $( '#post-submission-excerpt' ).val();
        var content = $( '#post-submission-content' ).val();
        var status = 'draft'; // this code

        var data = {
            title: title,
            excerpt: excerpt,
            content: content
        };

        $.ajax({
            method: "POST",
            url: POST_SUBMITTER.root + 'wp/v2/posts',
            data: data,
            beforeSend: function ( xhr ) {
                xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
            },
            success : function( response ) {
                console.log( response );
                alert( POST_SUBMITTER.success );
            },
            fail : function( response ) {
                console.log( response );
                alert( POST_SUBMITTER.failure );
            }

        });

    });

} );
1
pixelngrain

Dans ce tutoriel, le post var status = 'draft'; (voir code). Je crains donc que quiconque ne puisse pirater ce statut?

Cela dépend de qui c'est. Un utilisateur déconnecté ne peut créer aucun message. Un abonné ne peut pas non plus. Un contributeur peut créer le message, mais ne pas le publier. Un rôle d’auteur ou d’éditeur peut toutefois le modifier pour le publier.


Supposons donc que l'utilisateur est connecté et dispose d'un rôle lui permettant de publier des publications. Ils se trouvent sur cette page. Vous craignez donc qu'ils ne modifient status = "draft" en status = "publish".

D'abord, le bug dans votre code

Premièrement, la variable status n'est jamais utilisée en raison d'un bogue dans votre code. Les articles sont créés en tant que articles draft non pas parce que vous l'avez dit, mais parce que c'est le statut par défaut.

Pour résoudre ce problème, vous devez ajouter ceci à data:

status: status

Jusqu'à ce que vous fassiez cela, ils pourraient changer status en "banana" et cela ne ferait rien.

Deuxièmement, REST est sans état

L'API REST ne sait pas sur quelle page l'utilisateur se trouve, ce n'est pas ainsi que fonctionne l'API REST. Ce qu'ils peuvent et ne peuvent pas faire est contrôlé via des capacités.

Alors, qui s’inquiète s’ils peuvent modifier votre variable alors qu’ils peuvent simplement manipuler eux-mêmes l’API?

Ils pourraient copier et coller le code suivant dans la console de leurs outils de développement:

$.ajax({
        method: "POST",
        url: POST_SUBMITTER.root + 'wp/v2/posts',
        data: {
            title: "hello world",
            content: "post content",
            status: "publish"
        },
        beforeSend: function ( xhr ) {
            xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
        },
    });

Et hop, ils n'ont pas besoin de modifier votre code! Ils ont les leurs. Comme je l'ai dit plus tôt, REST API nécessite 3 éléments:

  • un nonce
  • un biscuit
  • les capacités requises pour faire ce qui est demandé.

Rien ne les oblige à utiliser le code de votre thème ou à ce que votre code soit même chargé. Tant qu'ils sont connectés et qu'ils en ont la capacité, cela leur sera permis.

Qui peut modifier le statut d'une publication dans l'API REST?

Quel est le noeud de votre question, et la réponse est cela dépend . Quiconque vous dit oui ou non est un menteur et n'y a pas pensé.

Par exemple, un contributor ne peut pas publier de publication. Par conséquent, s'il modifiait le post_status en publish, l'API rejetterait la demande. Vous recevrez une structure JSON vous indiquant que ce que vous avez essayé était interdit, ainsi qu'un code de réponse HTTP 403 interdit.

Si un utilisateur subscriber essayait, il le rejetterait également, même si le statut était draft, car les abonnés ne pouvaient pas créer de publications. Vous recevrez une structure JSON vous indiquant que ce que vous avez essayé était interdit, ainsi qu'un code de réponse HTTP 403 interdit.

Si un administrator essayait, cela fonctionnerait, car les rôles administrator peuvent tout faire. Vous obtiendrez une réponse de succès de code de 200 http. Idem d’une editor sur author, car ces rôles peuvent le faire, comme en témoigne leur capacité à accéder à wp-admin et à cliquer sur le bouton de publication.

En effet, ces rôles ont la capacité de publier des publications attribuées à leurs rôles. Si vous supprimez cette fonctionnalité, ils ne pourront plus publier dans l'API REST, ni dans l'interface WP Admin.

Donc, comme vous le voyez, Cela dépend des rôles et des capacités de l'utilisateur connecté qui fait la demande

1
Tom J Nowell