0

这是促销模式的一些工作代码,但这是在 ajax 请求中使用 wordpress nonce 的安全且适当的方法吗?

在 tmp 中创建 nonce: $ajax_nonce = wp_create_nonce( "mynonce" ); 示例 URL:www.mysite.com/#345345

var asdf = location.hash.match(/^#?(.*)$/)[1];
if (asdf) {
    $productID = asdf; 
    if ($.cookie("modalshow") === undefined) {
        var expiryDate = new Date();
        var minutes = 0.20; //12 seconds
        expiryDate.setTime(expiryDate.getTime() + (minutes * 60 * 1000)); 
        $.cookie("modalshow", "exists", { path: '/', expires: expiryDate });
        var data = {
            action: 'my_action',
            product_id: $productID,
            security: '<?php echo $ajax_nonce; ?>'
        };
        var ajaxurl = '/wp-admin/admin-ajax.php';
        $.post(ajaxurl, data, function(response) {
                $(".modal-content").append(response);
                $('#Modal').modal({ show:true });
        });
    } //no cookie
};//if match

插入:

add_action( 'wp_ajax_my_action', 'my_action_function' );
function my_action_function() {
    check_ajax_referer( 'mynonce', 'security' );
    if( isset($_POST['product_id']) ) {
        $my_report_num = $_POST['product_id']; // splash 443
        $myposttype = get_post_type( $my_product_num );
        if ( get_post_status( $my_product_num ) == 'publish' && $myposttype == "df_product" ) {
            //we're good
            $theid = $my_product_num;
        } else {
            $theid = "876";
        }
        //fedtch content using $theid
        die();
        } // end if
    die;
}

在上面的 php 中, get_post_type() 使用 get_post() ,它使用 sanitize_post() - 所以正在进行一些验证,目前我的计划是,如果任何恶意附加到 URL 或通过客户端中的其他方式发送, $theid 将设置为我的白名单号码“876” - 所以我需要在客户端或 php 中进行额外的验证吗?

任何帮助表示赞赏,谢谢!

4

0 回答 0