web-dev-qa-db-ja.com

私が探す必要がある一般的なセキュリティ上の欠陥は何ですか?

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

私は設定パネル(すなわち入力フィールドともの)で新しいプラグインを作成しようとしています。私は何を心配すべきですか?

たとえば、/ wp-admin /エリアにあるため、データのサニタイズはそれほど大きな問題になりますか。悪意のある人が直接私のプラグインページにアクセスしてPOSTリクエストを送信することはできますか

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

15
MrBatman

これは私の現在の(進行中の)設定/データセキュリティチェックリストをテーマのレビューに使用するために変更されたチェックリストです(原則はプラグインの場合とテーマの場合の違いは変わりません)。

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

  2. 以下のような時代遅れで、適切なデータセキュリティを含まないコピーアンドペーストスクリプトに頼るのではなく、プラグインはプラグインオプションとプラグイン設定ページを慎重に実装する必要があります。

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

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

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

  6. プラグインは$_POST$_REQUESTデータに直接頼るのではなく、Settings API(下記参照)を使ってフォーム入力データを取得し保存するべきです。

  7. チェックボックスと選択オプションについては、プラグインはそれぞれchecked="checked"selected="selected"を出力するためにchecked()selected()関数を使うべきです。

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

  9. プラグインはテキスト入力にはesc_attr()を、テキスト領域にはesc_html()(またはWP 3.1のesc_textarea())を使うべきです。

  10. Settings APIを使用していない場合は、プラグインが明示的にSettings-page nonce検査を提供する必要があります。

  11. また、PluginsがSettings APIを使用することを強くお勧めします。これは、より使いやすく、より安全で、設定ページの大変な作業の多くを処理します。

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

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

16
Chip Bennett

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

  1. 基本原則

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

    • Modern WordPressはセキュリティを重視しており、開発者にとってセキュリティを容易にすることを目指しています。
    • ですから、あなたがやりたいことのほとんどには、WP AP​​Iを使ってそれを成し遂げる方法があるでしょう。
    • だからあなたがあなたの最初のステップをやっているものは何でも適切なAPIを細かくして勉強することでしょう。
    • あなたが一般的で単純な機能から遠くなればなるほど、あなたは勉強しそして実行する必要があるでしょう。
11
Rarst
  1. ワードプレスが直接使用するすべてのプラグインのスクリプトにdefined('ABSPATH') or die('Access denied');を追加する
  2. すべてのディレクトリに空のindex.phpファイルを追加する
  3. 特定のプラグインのファイルに直接アクセスできないようにするために必要な手順を記載したプラグインディレクトリに.htaccessを追加します。
1
egor