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 );
}
});
});
} );
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"
.
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.
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:
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.
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