web-dev-qa-db-ja.com

フロントエンド送信フォームでnonceを使用する方法

ここにいろいろな投稿をしてくれたおかげで、フロントエンドの提出フォームをまとめることができました。約24時間の微調整の後、送信後の「成功」ページへのリダイレクトを含むすべてのものが機能するようになりましたが、ノンスをどうするかはわかりません。

これがフォームページです: http://Pastebin.com/YWyXL3jY

そしてここに成功のページがあります: http://Pastebin.com/3Usu0Pt6

どちらもカス​​タムページテンプレートです(さまざまな部分がさまざまなソースから提供されているため、現時点では書式設定は少し複雑ですが、ファイルアップロード機能を使用するつもりはありません)。セキュリティ向上のためにプラグインを使用してください。

ユーザーが成功ページにリダイレクトされる前にnonceを処理する必要がありますか?私はnonceの経験が全くなく、 'コピー&ペースト'のphpコーダーなので、優しくしてください!

あなたが与えることができるアドバイスを本当にありがとう。

5
Jo_pinkish

フロントエンドコードのtagの直前に次のコードを使用してください。

wp_nonce_field('name_of_your_action', 'name_of_your_nonce_field');

上記のコードはあなたのformタグの中に2つの隠し入力を生成します。これであなたは自分のフォームを処理するバックエンドであなたの一人称を検証することができます。上記で作成したナンスを検証するには、次のコードを使用します。

  if(wp_verify_nonce($_REQUEST['name_of_your_nonce_field'], 'name_of_your_action')){

            // Nonce is matched and valid. do whatever you want now.

     } else {

           // Invalid nonce. you can throw an error here.
}

注意: " name_of_your_action "が wp_nonce_field() の関数の 最初の引数 であり、 2番目の引数 であることを注意深く見てください。 ' wp_verify_nonce() '関数の。 :)だから、両方の関数の最初の引数としてそれを使用しないでください。多くの人がこの間違いを犯しているので、私は言及したいと思いました。

4
Kamal Ahmed

フォームにナンスを追加するには、次の関数を使います。

wp_nonce_field($action, $name, $referer, $echo)

  • $ action =(オプション)これはアクション名を表す文字列です。
  • $ name =(オプション)これは一回だけの名前を表す文字列です。このフィールドを空白のままにすると、WordPressはデフォルトで“ _wpnonce”になります。

例:

フロントエンド:

<form action="" method="post">
<?php wp_nonce_field('my_delete_action'); ?>
<input type="hidden" name="id" value=" <?php echo $id; ?> " />
<input type="text" name="rec_name" value=" <?php echo $name; ?> " />
<input type="submit" value="Delete" />
</form>

バックエンド:

$retrieved_nonce = $_REQUEST['_wpnonce'];
if (!wp_verify_nonce($retrieved_nonce, 'delete_my_action' ) ) die( 'Failed security check' );

ソース: https://www.tipsandtricks-hq.com/introduction-to-wordpress-nonces-5357

1
Zinan Xing

素朴さと検証のためにこれを使ってください。

wp_nonce_field('test_action', 'submit_post');

これによりnounceフィールドが生成されますので、以下のコードで確認できます。

 if(wp_verify_nonce($_REQUEST['test_action'], 'submit_post')){
           /// do your work
  }else{
         /// throw an error
  }
0
Vikas Bhardwaj