私が探す必要がある一般的なセキュリティ上の欠陥は何ですか?[閉まっている]


16

WPプラグインの開発者として、私が探すべき主なセキュリティ上の欠陥/穴は何ですか?

構成パネル(入力フィールドなど)で新しいプラグインを作成しようとしています。何を心配する必要がありますか?

たとえば、/ wp-admin /領域にあるため、データのサニタイズは非常に重要ですか?悪意のある人がプラグインページに直接アクセスして、POSTリクエストなどを送信できますか?

ありがとうございました!

回答:


16

テーマの確認に使用される現在の(進行中の)設定/データセキュリティチェックリストに基づいた、変更されたチェックリストを次に示します(プラグインでもテーマよりも原則は変わらないはずです)。

  1. プラグインは、すべてのオプション、カスタム関数、カスタム変数、およびカスタム定数の前にplugin-slugを付ける必要があります。

  2. プラグインは、以下のようなWebサイトチュートリアルのコピーアンドペーストスクリプトに依存するのではなく、プラグインオプションおよびプラグイン設定ページを意図的に実装する必要があります。これらは古く、適切なデータセキュリティは含まれていません。

  3. プラグインは、トップレベルメニューを追加するのではなく、add_options_page()関数を使用してプラグイン設定ページをSettingsメニューadd_menu_page()に追加する必要があります。

  4. プラグインは、設定ページを追加する機能に適切な機能manage_options)を使用する必要があります。

  5. プラグインは、設定ページに複数のオプションを作成するのではなく、単一の配列にオプションを保存する必要があります。Settings API(以下を参照)を使用すると、これを処理できます。

  6. プラグインは$_POST$_REQUESTデータに直接依存するのではなく、設定API(下記を参照)を使用してフォーム入力データを取得および保存する必要があります。

  7. チェックボックスおよび選択オプションの場合、プラグインは、checked()およびselected()を出力するためにchecked="checked"およびselected="selected"をそれぞれ使用する必要があります。

  8. プラグインは、データベースにデータを入力する前にすべての信頼されていないデータを検証およびサニタイズし、設定フォームフィールドに出力される前およびテーマテンプレートファイルに出力される前にすべての信頼されていないデータをエスケープする必要があります:

  9. プラグインはesc_attr()、テキスト入力およびesc_html()(またはesc_textarea()WP 3.1の)テキストエリアに使用する必要があります。

  10. プラグインは、設定APIを使用しない場合、設定ページのノンスチェックを明示的に提供する必要があります。

  11. また、プラグインは設定APIを使用することを強くお勧めします。設定APIは使いやすく、より安全で、設定ページの多くの面倒な作業を処理します。

Settings APIの使用に関する優れたチュートリアルについては、以下を参照してください。

安全でしっかりとコード化されたテーマ設定ページでテーマをチェックアウトしたい場合は、このテーマをチェックアウトしてくださいhttp :
//wordpress.org/extend/themes/coraline


そして、追加する必要があります:誰かがリストにないものを見つけた場合は、コメントしてください。チェックリストに追加して、テーマのセキュリティレビューを改善します。
チップベネット

うわー、素晴らしいリスト、ありがとう。この質問をコミュニティWikiにし、これらの各ポイントを独自の回答にして、議論と精緻化をより良くする価値があるのだろうか?
ゴールデンアップル

私はそれでいいのですが、元のポスターの質問をハイジャックしたくありません(それがStackExchangeで行われている方法でない限り、私はまだここにいます...)。
チップベネット

私もどちらも知らない...司会者の裁量にお任せください。これは、非常に重要でベストプラクティスがまだ解決中であるため、素晴らしいWikiの質問になると思われます。@ラスト?
ゴールデンアップル

必要に応じて、新しい質問を作成できますか?
チップベネット

11

これには2つの側面があります。

  1. 基本原則。

    • データベースに書き込まれるものはすべて、SQLインジェクションをチェックする必要があります。
    • 画面に印刷されるものはすべて、有害なJavaScriptを印刷しないことを確認する必要があります。
    • 誰かが何かをするときはいつでも、それが彼の意図であり、適切な能力があることを確認する必要があります。
    • あなたや私がチェックしたいと思わないことはもっとたくさんあります。
  2. 詳細。

    • 現代のWordPressはセキュリティを真剣に考えており、開発者がセキュリティを簡単にすることを目指しています。
    • そのため、やりたいことのほとんどについて、WP APIでそれを実現する方法があります。
    • したがって、最初のステップを実行するときは、適切なAPIを細かく調べて勉強することになります。
    • 共通のシンプルな機能から離れるほど、学習と実装がより複雑になります。

1
  1. defined('ABSPATH') or die('Access denied');ワードプレスが直接使用するすべてのプラグインのスクリプトで追加
  2. すべてのディレクトリに空のindex.phpファイルを追加します
  3. プラグインディレクトリに.htaccessを追加し、特定のプラグインのファイルへの直接アクセスを防ぐために必要な指示を追加します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.