web-dev-qa-db-ja.com

どのSQL/WordPressクエリにナンスが必要ですか?

私はPHP/JavaScript開発者であり、私はWordPressを初めて使います。当社のWebサイトはWordPressを基盤にしています。しかし、私はWordPressフレームワークをあまり気にすることなく、多くのカスタムPHPページを作成しました。

投稿のように、ものを編集するためのフォームを作成するとき、$ wpdb-> query(ここにSQLをいくつか挿入します)では多くのことが適切に機能しません。 WordPresswp_update_post()またはupdate_post_meta()などを操作します。

これはカスタムクエリが一回限りのチェックを必要とするからだろうか?私はnonceにも慣れていませんが、SQLを使ってWordPressデータベースからデータを取得したり編集したりするとき、私はnonceをどのようにそしていつ行うのか混乱しています。

一方で、WordPressの機能のどれもが特別なノンスチェックをしていませんか?

1
mesqueeb

あなたはWordPressのnonceの目的と機能に関して少し混乱しているかもしれません。

おすすめ読書:

一回だけはURLとフォームを悪意があるかどうかにかかわらずあるタイプの誤用から保護するのを助けるために「一度だけ使用される」数字です。

ナンスは、バックエンドであろうとフロントエンドであろうと、特定のURLに対して行われている要求の妥当性や、データを送信するための特定のフォームの使用をある程度確実にするのに役立ちます。

wpdbクラス の使用には関係ありません。

前の質問 で証明されているように 、SQL構文が不適切なため、クエリは機能していませんでした。

従うべき良い規則は、URLやフォーム、特にあなたのデータベース上で何らかのアクションを実行するものは常にあなたがそれに対してリクエストの有効性を確かめることができる一回だけを伴うべきであるということです。

データベースにデータを挿入するときに、生のSQLクエリを書く必要がある場合は、 wpdbクラス 、特に$wpdb->query()メソッドのみを使用してください。 SQLインジェクションに対して投影する_​​$wpdb->prepare()メソッド: Protect_Queries_Against_SQL_Injection_Attacks

内部的には、wp_insert_postwp_update_postのような関数を使うとき、WordPressは$wpdb->insert()$wpdb->update()のどちらかを呼び出し、それが$wpdb->query( $wpdb->prepate() )を呼び出すので、サニタイズの面倒を見ます。

これが、投稿、postmeta、users、usermetaなどを挿入または更新するときにWordPressのコア機能を使用することが推奨される理由です。

要約すると、上記で概説した参照は、ナンスが何であるか、いつ使用するべきか、そしてどのように使用するかについての理解を深めるのに役立つので、必ずお読みください。

5
userabuser