タグ付けされた質問 「sanitization」

2
どのコンテキストでプラグインがデータの検証/サニタイズを担当しますか?
プラグイン/テーマのすべてのデータが、データベースに入る前とブラウザーに出力される前に、安全に処理されるようにします。私の問題は、ポストメタフィールドを保存するときなど、APIがサニタイズを処理する状況と、カスタム設定を保存するときなど、プラグイン/テーマの作成者がそれを行う責任がある状況があることです。 この質問の範囲については、ドメインレベルでのデータの検証については心配していません。たとえば、フォームのAgeフィールドが0〜120であるか、電子メールアドレスが有効であることを確認します。私はセキュリティだけに関心があります。たとえば、データベースへの保存時にSQLインジェクションを回避するためにSQLクエリをエスケープしたり、XSSを回避するためにHTMLテンプレートに出力されるデータを無害化します。 出力のサニタイズについては、変数をHTMLテンプレートにエコーするときなどにesc_html()、常に関数を使用する必要があることを知っていますesc_attr()。しかし、テンプレートタグを使用する場合はどうでしょうか。それらはすべて既に出力をサニタイズしますか?その場合、どのコンテキスト(一般的なHTML、タグ属性など)ですか?一部の関数には、さまざまなコンテキストのバリアントがあります(などthe_title_attribute()ですが、ほとんどはありません 入力サニタイズについては、$wpdb->prepare()手動クエリを作成するときに使用する必要があることは知っていますが、Settings APIを使用してプラグイン設定ページを作成する場合、またはカスタム投稿タイプの投稿メタフィールドを保存する場合はどうですか? 現在、関数を使用して関数がサニタイズするかどうかを調べるたびにコアを掘り下げてチュートリアルを読んでいますが、それはエラーが発生しやすく、時間がかかります。考えられるすべての状況と、APIがそれを処理するかどうかの包括的なリストを見つけたいと思っています。例えば、 APIの検証/サニタイズ 投稿メタを保存 update_postmeta() ユーザーメタを保存 update_user_meta() 投稿タイトルの出力-コンテキストに応じた適切なバリアントを使用します the_title() 等 手動で検証/サニタイズする必要があります Settings APIを使用してプラグインオプションを保存する。の3番目のパラメーターとしてコールバックを渡しますregister_setting()。 直接データベースクエリ:クエリをにラップします$wpdb->prepare()。 HTMLで変数を出力します。使用esc_attr()、esc_html()など 等 また、特定の状況ではAPIが提供するが、他の状況では提供しない理由を理解したいと思っています。私はそれがデータの未知の性質と関係があると仮定していますが、徹底的な説明を聞きたいです。


2
データのサニタイズ:コード例を使用したベストプラクティス
WordPressの安全なテーマを作成するために、データ検証(データ検証ではなく)を理解しようとしています。テーマ開発者向けのベストプラクティスを詳しく説明する包括的なガイドを探して、インターネットを検索しました。Data Validationというコーデックスページなど、私が出会ったいくつかのリソースがありましたが、役に立つものはありませんでした。コーデックスページには、使用可能なサニタイズ機能、その使用法、およびその機能がリストされていますが、なぜ他のサニタイズ機能を使用するのか、またはどのような状況で特定のサニタイズ機能を使用するのかを説明できません この投稿の目的は、すべての人に不正/非サニタイズコードの例を提供し、適切なサニタイズのためにどのように書き換えるかを要求することです。これは、投稿タイトルまたは投稿サムネイルをサニタイズする一般的なコードsrcまたはサニタイズを処理するより精巧なコードです。$_POST Ajaxリクエストのデータ。 さらに、データベースを追加/更新するためのWordPress機能(たとえば、以下のコードブロックで言及されている機能)が自動的にサニタイズ作業を処理するかどうかを知りたいですか?「はい」の場合、これらのWordPress機能に送信されたデータをサニタイズするための追加措置を講じるときに例外はありますか? add_user_meta update_user_meta add_post_meta update_post_meta //just to name a few また、PHPのHTMLをHTMLのPHPインラインに対してエコーする場合、サニタイズは異なる方法で行う必要がありますか?私が尋ねていることをより明確にするために、ここにコードがあります: <?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?> <div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div> 上記のステートメントは両方とも同じことを達成します。しかし、それらを異なる方法でサンテートする必要がありますか?

3
is_email()関数に渡す前にメールアドレスをサニタイズする必要がありますか?
私が使用しているis_email()ユーザが提供する電子メールアドレスが有効であるかどうかを確認します。例えば: $email = $_POST['email']; if ( is_email( $email ) ) // Do something. 私の知る限り、この関数ではデータベースに情報を書き込みません。$email関数に渡す前にサニタイズする必要がありますか?

1
wp_insert_posts()はどの程度安全/消毒されていますか?
以下のためのコーデックスを見ると)wp_insert_post(それは、この機能「...サニタイズ変数は、日付/時間などのような変数が欠落していくつかのチェック、塗りつぶしを行います」と述べている(編集:私は、コーデックスのエントリ更新より堅牢な例を含むようにしますこれには、セキュリティと投稿メタおよびカテゴリの割り当てが含まれます) XSSハッキングなどを防ぐためにさらにサニタイズを行う必要があるのか​​、それとも関数によって十分な処理が行われているのか疑問に思っています。 正直に言うと、私はコアの関数をチェックしましたが、たとえばpost_contentでwp_kses()やその他のサニタイズを見つけていないので、少し心配しています。確認できるのは、データに対するstripslashes_deep()だけです。 wp_insert_post()への引数を作成するときに、wp_kses()または他の何かを実行する必要がありますか? ここでのベストプラクティスは何ですか?Codexは、その例ではセキュリティについてかなり無頓着です。 ありがとう

2
HTML出力はesc_html()およびwp_kses()を介して渡される必要がありますか?
私は別の用途について混乱しているesc_html()とwp_kses()。esc_html()特殊文字をHTMLエンティティに変換し、wp_kses()不要なタグ(例:)を削除することを理解していますが、<script>それらをどのコンテキストで一緒に使用するか、個別に使用するかはわかりません。 を介して信頼できないHTMLを実行esc_html()すると、JavaScriptはブラウザによってレンダリングされるのではなくプレーンテキストで表示されるため、その時点で安全ですよね。それを実行する唯一の理由wp_kses()は、生のスクリプトが表示されないようにすることですか? 基本的に、esc_html()それを安全にし、wp_kses()きれいにします。あれは正しいですか?


1
完全なHTML入力を取得するtextareaを安全にサニタイズする方法
ユーザーがWordPress管理画面からHTMLメールを送信できるようにするプラグインを開発しています。textarea入力をどのようにサニタイズする必要がありますか?HTMLメールに表示される可能性のあるHTMLタグの全範囲を含めることができる必要があります。私が使用する場合wp_kses()、許可されたタグの膨大なリストを使用する必要があります。 textareaは、カスタムオプションを介してそのコンテンツをデータベースに保存します。

4
wp_editorのコンテンツを無害化する
によって生成された標準のtextarea / tinymceを見つけることができるカスタム投稿タイプを作成しwp_editor()ましたが、保存部分の問題に直面しています。 次のコードでコンテンツを保存すると、 update_post_meta( $post_id, $prefix.'content', $_POST['content'] ); すべてが正常に機能していますが、セキュリティはありません(サニタイズ、検証など...) 次のコードでコンテンツを保存すると、 update_post_meta( $post_id, $prefix.'content', sanitize_text_field($_POST['content']) ); セキュリティの問題は解決しましたが、コンテンツのスタイルやメディアなどがすべて失われています。 すべてのスタイルを適用し、メディアを挿入し、サニタイズを含めてコンテンツを保存する良い方法は何でしょうか? 少し読みましたが、wp_kses()どうすれば良いフィルターを適用できるのかわかりません。(一般的なタグを許可する場合、どちらをブロックすればよいですか?など)

1
esc_ *関数の違いは何ですか?
私はProfessional WordPressを読みました、そしてそれは言う: esc_html関数は、HTMLを含むデータのスクラブに使用されます。この関数は、特殊文字をHTMLエンティティにエンコードします esc_attr 関数はHTML属性をエスケープするために使用されます esc_url。この関数は、不正な文字がないかURLをスクラブするために使用する必要があります。hrefは技術的にはHTML属性ですが これらの違いは何ですか? 私が持っている場合 <script>alert('hello world!');</script>this is some content すべて< >に変換され< >ますか?URLは次のようになり%xxxますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.