2011-09-10 3 views
3

私はajaxリクエストによるノンスの基本検証に問題があります。ワードプレスナンスのチェックは常に偽です

それらは私のスクリプト・ローダとCSSローダ機能です:私のjavascrtipファイルで (gallery.php中)

function gallery_js_loader() 
{ 
    if (!is_admin()) return; 
    // async flash uploader 
    wp_enqueue_script('swfobject', THEMEURL . "/lib/uploadify/swfobject.js", array(), false, true); 
    wp_enqueue_script('uploadify', THEMEURL . "/lib/uploadify/jquery.uploadify.v2.1.4.min.js", array('jquery'), false, true); 
    wp_enqueue_script('gallery_admin_scripts', THEMEURL . "/inc/galleries/gallery_admin_scripts.js", array(), false, true); 
    wp_localize_script('gallery_admin_scripts', 'param', 
        array(
         'basename' => GALLERYPOST, 
         'baselocation' => THEMEURL, 
         'nonce' => wp_create_nonce('file-upload-nonce'), 
         'thumb_width' => intval(get_option('thumbnail_size_w')), 
         'thumb_height' => intval(get_option('thumbnail_size_h')) 
        )); 
// main styles 


} 

function gallery_css_loader() 
{ 
    wp_enqueue_style('uploadify_styles', THEMEURL . "/lib/uploadify/uploadify.css"); 
    wp_enqueue_style('gallery_admin_styles', THEMEURL . "/inc/galleries/gallery_admin_styles.css"); 
} 

add_action('admin_print_scripts-post.php', 'gallery_js_loader'); 
add_action('admin_print_scripts-post-new.php', 'gallery_js_loader'); 
add_action('admin_print_styles-post.php', 'gallery_css_loader'); 
add_action('admin_print_styles-post-new.php', 'gallery_css_loader'); 


function gallery_upload_image() 
{ 
    $nonce = $_POST["nonce"]; 

    if (is_admin() && !empty($_FILES) /*&& wp_verify_nonce($nonce, 'file-upload-nonce')*/) { 
     require_once(ABSPATH . 'wp-admin/includes/image.php'); 

     $tempFile = $_FILES['Filedata']['tmp_name']; 
     //  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/'; 
     $targetDir = wp_upload_dir(date('Y')); 
     $targetFile = $targetDir['path'] . '/' . $_FILES['Filedata']['name']; 
     $targetFile = str_replace(" ", "", $targetFile); 

     move_uploaded_file($tempFile, $targetFile); 

     $wp_filetype = wp_check_filetype(basename($targetFile), null); 

     $attachment = array(
      'post_mime_type' => $wp_filetype['type'], 
      'post_title' => preg_replace('/\.[^.]+$/', '', basename($targetFile)), 
      'post_content' => '', 
      'post_status' => 'inherit' 
     ); 
     $result['attachmet_id'] = $attach_id = wp_insert_attachment($attachment, $targetFile); 
     $result['recieved_nonce'] = $nonce; 

     $attach_data = wp_generate_attachment_metadata($attach_id, $targetFile); 
     wp_update_attachment_metadata($attach_id, $attach_data); 

     $result['success'] = true; 
    } else { 
     $result['success'] = false; 
     $result['recieved_nounce'] = $nonce; 
     $result['error'] = array(
      'message' => 'No files or you are not admin ' . $nonce, 
      'code' => 'E01' 
     ); 
    } 

    echo json_encode($result); 
    exit; 
} 

add_action('wp_ajax_do_upload', 'gallery_upload_image');  

: (gallery.js中)

console.debug("Nonce received ",param.nonce); //c4817b947a 

私のAJAX呼び出しphpからdo_uploadアクションにアクセスします。 c4817b947a {「成功」::偽、「debugNonce」:」この1は、受信した結果は次のようになり

function gallery_upload_image() 
{ 
    $nonce = $_POST["nonce"]; 

    if (wp_verify_nonce($nonce, 'file-upload-nonce')) { 
     /* some logic here, nothing to do with nonce */ 
     $result['success'] = true; 
     $result['debugNonce'] = $nonce; 
    } // end validation 
    else { 
     //invalid nonce 
     $result['success'] = false; 
     $result['debugNonce'] = $nonce;   
    } 
} 

... (バックgallery.phpで)応答を受け取ったナンスフィールドを追加しますc4817b947a "}

最初のc4817b947aは、ノンス生成機能からのエコーが原因です。検証が行われる方法には影響しません。

私の結論は、wp_verify_nonceは常に失敗するということです。

私は、ローカルホスト上でwp 3.2.1、新規インストール、プラグインなしを使用しています。

+0

set_transientで再生しているので、同じ問題が発生しています。どのように私はそれを取り除くだろうか? – niklas

+0

私は同じ問題を抱えています。私がログインしていないとき(シークレットモードでウェブサイトを開くと)、検証が機能することに気付きました。私はこれを可能な限りの方法で探知し、成功していない問題を解決しようと努力しました。 check_ajax_refererも失敗します。また、私は新しいインストールを実行しており、ローカルとオンラインの両方のサーバーで試してみました。しかし、それだけで何年も働くことはできません...あなたは解決策を見つけましたか? –

答えて

0

私は問題なくほぼ同じ交換を行います。 これはプラグイン(クラス)にありますが、それは問題ではありません。

PHP - JavaScriptを初期化:

add_action('wp_print_scripts', array(&$this, 'enqueue_script')); 

PHP - function enqueue_script

wp_localize_script('B99-Portfolio', 'ajax', array( 'ajaxurl'  => admin_url('admin-ajax.php'), 
                'imgurl'  => content_url().'/uploads/portfolio-content/', 
                'requestNonce' => wp_create_nonce('b99-request-nonce'))); 

JSを - AJAXリクエスト開始: - 要求を受け取ると、ハンドル(

$.ajax({ 
     type : 'POST', 
     cache : false, 
     url  : ajax.ajaxurl, 
     data : { 
      action   : 'b99_ajax_request_items', 
      requestNonce : ajax.requestNonce    
     }, 
     dataType: 'json', 
     error : function(jqXHR, textStatus, errorThrown) {alert(jqXHR+" "+textStatus+" "+errorThrown);}, 
     success : function(response) {recieveAjax(response);} 
     }); 

PHPをfunction b99_ajax_request_items):

$nonce = $_POST['requestNonce']; 
     if (! wp_verify_nonce($nonce, 'b99-request-nonce')){ 
      die ('security fail'.$nonce); 
     } 

ローカライズする前にスクリプトのエンキューを行ってください。

私はjqueryとwordpressの両方のバージョンを使用しています。これは、XAMPPのローカルインストールでシームレスに動作します。それはあなたのインターチェンジにかなり似ていますが、これは比較するものかもしれません。

+0

お返事ありがとうございます。私はjsとcssをロードする完全な関数をインクルードするようにコードを更新しました。私のスクリプトはローカライズされる前にキューに登録されます。ノンスは正しく受信されましたが、検証に失敗しました... –

+1

gallery_assets_loader()にどのようなアクションを追加していますか?私は少なくとも3つの有効な挿入ポイントがあることを知って、私はwp_print_scriptsを使用します。また、あなたのAJAX呼び出しはどのように見えますか?あなたはPHP側でdo_uploadを言いますが、あなたはgallery_upload_image()を表示しています。あなたの完全な交流はどのように見えますか? – Bosworth99

+0

遅れて申し訳ありませんが、私はあなたの努力に感謝します。私はコードを更新しました。見てください。 :) –

1

私はちょうどsimilar issueに遭遇しました。私がしなければならなかったのは、管理者として再ログすることだけでした。私はそれがあなたのケースでもうまくいくはずだと思います。なぜなら、提供されたコードのすべてがうまくいくようです。

私はそれがWordpressでどのようにセッションが処理されるかと関係があると思います。