使用JavaScript的WP REST API发布状态

时间:2018-10-13 作者:pixelngrain

我在WP REST API中弄脏了我的手。我已经阅读了一些教程,并对使用JavaScript创建新帖子提出了一个问题。

在里面this 教程,帖子var status = \'draft\'; (请参见代码)。So I am just worried that won\'t anyone able to hack that status?

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 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

在本教程中,后var状态=\'草稿\';(请参见代码)。所以我只是担心没有人能够破解这个状态?

这取决于他是谁。注销用户根本无法创建任何帖子。订阅者也不能。贡献者可以创建帖子,但不能发布。但是,作者或编辑角色可以将其更改为发布。

因此,假设用户已登录,并且有一个角色允许他们发布帖子,并且他们位于该页面上,您担心他们可能会更改status = "draft"status = "publish".

首先,代码中的bugstatus 由于代码中存在错误,所以从不使用变量。帖子创建为draft 发帖不是因为你这么说,而是因为这是默认状态。

要修复此错误,您需要将其添加到data:

status: status
在你这么做之前,他们可能会改变status"banana" 它什么也做不了。

其次,REST是无状态的,REST API不知道用户在哪个页面上,REST API不是这样工作的。他们能做什么和不能做什么是通过能力来控制的。

那么,当他们可以自己戳API时,谁在乎他们是否可以修改您的变量呢?

他们可以将以下代码复制粘贴到浏览器开发工具控制台中:

$.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 );
        },
    });
嘿,普雷斯托,他们不需要修改你的代码!他们有自己的。如前所述,REST API需要3件事:

临时cookie是执行所要求的操作所需的功能没有什么要求他们使用您主题中的代码,也没有什么要求他们加载您的代码。只要他们登录,并且他们有能力,这将允许他们。

谁可以更改REST API中的Posts状态

这是你问题的关键,答案是it depends. 任何告诉你“是”或“不是”的人都是骗子,而且还没有想清楚。

例如,acontributor 无法发布帖子,因此如果他们更改了post_statuspublish API将拒绝该请求。您将收到一个JSON结构,告诉您所尝试的是被禁止的,以及一个403禁止的HTTP响应代码。

如果asubscriber 用户尝试了,它也会拒绝,即使状态为draft, 因为订阅者无法创建帖子。您将收到一个JSON结构,告诉您所尝试的是被禁止的,以及一个403禁止的HTTP响应代码。

如果administrator 试过了会有用的,因为administrator 角色可以做任何事情。您将得到200个http代码成功响应。与editor 属于author, 因为这些角色可以做到这一点,正如他们能够wp-admin 然后单击“发布”按钮。

这是因为这些角色能够发布分配给其角色的帖子。如果您删除了该功能,那么他们将无法再在REST API或WP Admin界面中发布

如你所见,It depends on the roles and capabilities of the logged in user making the request

结束

相关推荐

JAVASCRIPT:向URL添加锚hashtag,并重新加载

我做了this Website 在两个内部页面中使用锚定链接。这是一个多语言网站,使用PolyLang。语言选择器位于网站右上角的浮动菜单中。网站所有者希望使用语言选择器的交互页面功能。这意味着;在任何英文页面中,您单击语言选择器(西班牙语),该选择器将根据父菜单项“活动”中的子菜单将您带到等效(对等)页面。工作精细,开箱即用,用于链接;但不适用于锚链。为此,我尝试了Apache。htaccess和PHP,但不起作用。JavaScript适用于this page 只有一个锚。我使用了:窗口。地方repla