WordPressプラグインとテーマ開発者のためのセキュリティのベストプラクティス
公開: 2020-12-09WordPress開発者として、何に取り組むべきかについてあなたがしなければならない多くの決定があります。 あなたの主な関心と優先事項は素晴らしいテーマやプラグインを構築することであり、コードに取り組むために運転席に着くと、セキュリティ対策はしばしば後部座席になります。 最後に座ってセキュリティの問題について自分のコードを確認したのはいつですか。 いいえ、そうは思いませんでした
これらのヒントは、CleverPluginsでプラグインを開発し、ハッキングされた後に無数の顧客がWebサイトをオンラインに戻すのを支援した私の経験に基づいています。 WP Security Ninjaのようなセキュリティプラグインを開発することで、他の人のコードについての妄想が減ることはありません。
Webサイトがハッキングされる最も一般的な理由は、依然としてお粗末なパスワード管理ですが、コードを保護するための簡単な方法のいくつかを使用する言い訳にはなりません。
プラグインやテーマを開発するときは、それを人気のあるものにして、できるだけ多くのWebサイトにインストールしてもらいたいと考えています。 あなたの成功が大きければ大きいほど、人々があなたの仕事を悪用してユーザーのウェブサイトをハッキングしようとする可能性が高くなります。
WordPressの人気により、WordPressはハッカーの最も一般的な標的の1つになっています。 プラグインまたはテーマで脆弱性が検出された場合、数十万とは言わないまでも数千のWebサイトが悪用される可能性があります。
残念ながら、よく知られている製品に脆弱性が現れることが定期的に発生するため、ユーザーのコードを保護するためにいくつかの基本的なセキュリティ対策を講じる価値があります。
WordPress.orgレビューチームはどうですか?
公式リポジトリに公開する前にプラグインとテーマをレビューするチームは、あらゆる種類のセキュリティ問題をチェックしていると思うかもしれませんが、チームは小さく、数人で構成されています。 チェックするプラグインとテーマのキューは増え続けているため、それぞれを確認する必要がある時間は限られています。
ただし、何かを見つけた場合は、プラグインを修正するか、特定の時間枠の前に脆弱性を修正する必要があるという警告をメールで送信するまで、プラグインを自動的に閉じる可能性があります。
重要なのは、プラグインまたはテーマがリポジトリにリストされると、追加のスクリーニングなしでリポジトリを介して更新をプッシュできるため、脆弱性がいつでも簡単に侵入し、ほぼすべての期間検出されなくなる可能性があるということです。
基本的に、プラグインのセキュリティ対策を強化するのはあなた次第です。WordPress製品を保護し、多くの頭痛やブランドへの悪影響から身を守る方法をいくつか見てみましょう。
WordPressプラグインまたはテーマを安全に開発するためにできることは次のとおりです。
1.あらゆる観点からセキュリティについて考えてください!
プラグインやテーマを誰が使用しているのか、セキュリティについてどの程度理解しているのかはわかりません。
プラグインやテーマを誰が使用しているのか、セキュリティについてどの程度理解しているのかはわかりません。
管理者、編集者、または顧客のWebサイトの通常のユーザーは、安全なパスワードを使用していない可能性があり、それらのアカウントがハッキングされる可能性があります。 製品が保護されていない場合、これらのアカウントが悪用されて、顧客のWebサイトに悪意のあるコードをインストールするためのアクセスがさらに増える可能性があります。
Webサイトを実行するサーバーを構成したサーバー管理者が、同じサーバー上の他のサイトからWebサイトを保護する方法について十分に知っていると期待するべきではありません。 Webサイトが大手プロバイダーによってホストされている場合、Webサイトは適切に「分離」されていると期待できますが、製品がどこにインストールされるかはわかりません。
それはパラノイアに聞こえますか? 多分。 しかし、プラグインやテーマが非常に人気になった場合は、セキュリティに対して偏執的なアプローチをとることができます。
プラグインやテーマが非常に人気になった場合は、セキュリティに対して偏執的なアプローチをとることができます。
2. XSSの防止–クロスサイトスクリプティング攻撃
WordPressがGutenbergとReactJSでよりフロントエンド主導のプロジェクトになりつつあるため、これはますます重要になっています。
WordPress開発者にとって最も一般的な間違いの1つは、コードの検証とサニタイズを忘れて、XSS攻撃にさらされることです。 XSSにはいくつかのバリエーションがありますが、一般に、XSS攻撃は、ハッカーがサーバーにコードを挿入し、訪問者のブラウザーで実行することを許可された場合に発生します。
入力フィールドがあると想像してください。 簡単にするために、ユーザーまたは訪問者が投稿にコメントを送信できるコメントフィールドであるとしましょう。
ハッカーは"<script>alert('XSS');</script>"
でコメントを送信しようとします。
さて、これはユーザーの画面にアラートをポップアップする基本的な例であり、他には何もありません。 実際のハッカーはコメントフィールドを使用して、訪問者のブラウザなどから情報を盗むことができるコードをサイトからロードするコードを挿入します。
検証、サニタイズ、およびエスケープを使用して、これが発生するのを防ぐことができます。
検証とは、送信されたデータをデータベースに保存するなどの前にチェックすることです。 データが提出されるときはいつでも、それをチェックして、それが受け入れ可能であることを確認することができます。 数量フィールドの場合は、数値が必要です。 数字でない場合は、ユーザーにエラーメッセージを返すことができます。
データのサニタイズとは、送信された情報を処理し、不要な文字を削除するなど、保存したくない情報が含まれていないことを確認することです。 WordPressには、これを支援するためのいくつかの機能が組み込まれています。 少し消毒についての詳細。
エスケープとは、悪意のあるコードが実際にブラウザで実行されるのを防ぐことです。 すでに悪意のあるコードがWebサイトに挿入されている場合、または別のプラグインまたはテーマによって、ハッカーが使用しているデータにコードを挿入できるようにしているとします。データを表示する前に画面にエスケープすると、問題が発生するのを防ぐことができます。
"<script>alert('XSS');</script>"
前に使用したのと同じ簡単な例を見てみましょう。
このコードで何もしなければ、ブラウザはそれがHTMLコードであると見なします。 ここで重要な詳細は、HTMLタグを定義するために使用される<>文字です。 これらをエスケープすることで、 <
を<
に変換します。 および>
から>
ブラウザは、これが実際のHTMLコードではないことを理解し、代わりに小なり記号と大なり記号を表示する必要があります。
アプリケーションに出入りするすべてのデータを検証、サニタイズ、およびエスケープすることにより、最も一般的な攻撃方法の1つからユーザーを保護します。
3.SQLインジェクションに注意してください
名前が示すように、攻撃者はSQLインジェクションを使用して、Webサイトに微調整されたSQLクエリを処理させ、それを使用してデータベースにアクセスすることができます。
Webサイトに保存するデータによっては、SQLインジェクション攻撃からWebサイトのデータが漏洩することは、恥ずかしいことから、評判やビジネスを完全に破壊することになる可能性があります。
SQLインジェクションはWebサイトを攻撃する古い方法ですが、それでも非常に効果的であり、この形式の攻撃を使用する方法を探している人はたくさんいます。 2020年10月、人気のあるLoginizer WordPressプラグインは、SQLインジェクションの脆弱性があり、100万を超えるWebサイトが危険にさらされていると発表しました。
2019年には、未知のハッカーがSQLインジェクション攻撃を介して数百万のブルガリア人の税データを盗み、2016年には、ロシアのハッカーのグループがオハイオ州の約50万人の有権者情報を抽出しました。 これらの種類の攻撃は依然として非常に効果的であり、それらに関する多くの情報を見つけることができます。
ソース:https://xkcd.com/327/
SQLインジェクションが発生する最も一般的な場所は、名前などのユーザー入力を受け入れるフォームフィールドです。 攻撃は、入力フィールドにSQLコードの一部を入力し、予想とは異なる結果を与えるカスタムクエリを作成することによって発生します。
人々が特定の名前を検索できるフォームがあるとしましょう。
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';
この簡単な例では、 Henry
という名前と特定のキーcelebrity_name
を持つすべての行を含むpost metaテーブルからすべての行を取得します。このように、データベース全体を返すのではなく、必要な特定の行のみを返します。
攻撃者は別の値(たとえば、 'Henry' OR 1=1--
を解析しようとします。
SQLのOR1 OR 1=1
は常に真であるため、クエリは特定の値またはその他の値を持つすべての行を返すようになりました。
しかし、それはさらに悪化します。 SQLクエリは、 meta_key
が探している特定の値と一致する結果のみを要求したため、すべてを返すわけではありません。 これにより、SQLインジェクション攻撃の影響が制限されますね。
そうではありません。 SQLでは、二重ダッシュはコメントインジケーターであるため、この後に続くものはすべてコメント化されます。
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';
これは、クエリが次のようになることを意味します。
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1
これで、クエリは基本的にそのデータベーステーブルのすべてを返します。
これは単純な例です。 データベース内のすべてではないにしても、ほとんどの情報にアクセスするためのより複雑な方法がたくさんあります。 攻撃者はブラインドSQLインジェクション攻撃を試みることができます。つまり、データベースでコードを実行し、新しい管理者を追加したり、すべてのデータを削除したりすることができます。
ほとんどの攻撃は、Webサイトフォームに送信されたSQLの一部を含むランダムなクエリ文字列の形式で行われます。 自動化されたスクリプトは、Webサイトの出力への変更を検出してから、攻撃の可能性を検出します。
簡単で効果的な方法は、入力としてアポストロフィ'
を送信し、それが何かを変更するか、エラーが発生するか、またはより多くの結果が返されるかどうかを確認することです。
WordPressが救いの手を差し伸べる
開発者は、データベースと直接対話する代わりに、WordPressの組み込みデータベース抽象化クラス$wpdb
を使用する必要があります。
WordPressの$wpdb
クラスには、データベースと安全にやり取りするために必要なすべてのCRUD機能があり、プラグインやテーマが必要な場合は、クラスを使用して独自のデータベーステーブルとやり取りすることもできます。
各入力フォームにどのような種類のデータを合理的に入力する必要があるかを予測することで、問題を解決できます。 前の例では、名前を検索しました。 入力をサニタイズして、文字のみを受け入れるようにすることができます。 いくつかのオプションしか含まれていない選択ボックスまたはラジオグループがある場合は、データをチェックして、許可されている選択肢の1つにすぎないことを確認できます。
問題を解決するためにできる最も重要なことは、 $wpdb->prepare()
関数を使用してデータを準備することです。
この関数は、準備されたクエリ文字列と、SQLクエリに追加する引数の配列を受け取ります。
$meta_key = 'celebrity_name'; $meta_val = 'Henry' $allhenrys = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_val ) );
すべての作業はprepare()
関数内で行われます。 最初のパラメーターである準備されたクエリには、実際の値の代わりにプレースホルダー%s
が含まれています。 これは、他の解析された変数$meta_key
および$meta_val
に置き換えられます。
注–関数がプレースホルダーを追加するため、プレースホルダーを囲むクエリにアポストロフィを含めないことが重要です。
これは単純化された例ですが、同じプロセスを任意のデータベースクエリに使用でき、文字列には%s
、整数には%d
、浮動小数点数には%f
を使用できます。
データベースに新しい行を追加するなど、特定の状況に対応する関数もあります。 この目的のために、 $wpdb->insert()
を使用できます。
$wpdb->insert( "{$wpdb->prefix}my_custom_table", array( 'name' => 'Henry', 'userid' => 123, 'score' => 10, ), array( '%s', '%d', '%d', ) );
準備関数を使用すると、製品に対するSQLインジェクションの試行の大部分を防ぐことができます。
$wpdbのドキュメントを確認することを忘れないでください。 一部の関数は入力をエスケープします。 他の人は、関数へのデータを解析する前に、自分で入力をエスケープすることを期待しています。
4.ナンスを使用してリクエストを保護します
WordPressでnonceシステムを使用すると、多くの攻撃を防ぐのに役立ちます。 セキュリティ上のナンスは、一度だけ使用される番号です。 この一意の番号を、コードからWordPressインストールへのすべてのリクエストに追加して、このリクエストが正当であることを確認する方法です。
それはあなたがクラブに入るために用心棒に与える必要がある秘密のパスワードを持っていることに少し似ています
ただし、WordPressのナンスは少し異なります。数字ではなく、ナンスが1回だけ使用されることもありません。
技術的には、WordPressのナンスには小文字と数字の両方を含めることができ、 1回だけ使用するのではなく、一定期間後に再生成されます。
ナンスを使用する方法は、JavaScriptファイルを登録するPHPコードが数字と文字の少しユニークな組み合わせを生成し、それを解析してJSコードが読み取れるようにすることです。
JavaScriptコードがWebサイトにリクエストを送信するたびに、そのコードが送信されます。コードが一致しない場合、コードはリクエストを完全に無視する必要があります。
例を使用すると常に少し簡単になるので、次の手順に従ってプラグインに.jsファイルをロードする簡単な方法を見てみましょう。
WordPressプラグインでナンスを使用する
add_action('wp_enqueue_scripts', 'load_my_plugin_script'); function load_my_plugin_script() { // Register the script with all details and ensures it is loaded after jQuery wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) ); // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code. wp_localize_script( 'secure-plugin', 'plugin_ajax_object', array( 'nonce' => wp_create_nonce('secure-plugin-nonce') ) ); // Once that is done, we can now enqueue the script wp_enqueue_script('secure-plugin'); }
この関数では、JavaScriptファイルをロードするようにWordPressに指示します。 まず、ロードしたいファイルをwp_register_script()
で登録します。
次に、 wp_localize_script()
を使用して、データの配列、特にJSコードで使用する一意のナンスを含む「nonce」を解析します。 その配列で他のすべての種類の情報を送信することもできますが、この例では単純にしています。
JavaScriptファイルからリクエストを送信するときは、その一意のナンスを含める必要があります。 それを行うのは簡単です:
JavaScriptファイルでWordPressプラグインのnonceを使用する
jQuery(document).ready(function($) { $.ajax({ url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php type: 'POST', data: { 'action': 'get_custom_data', '_ajax_nonce': plugin_ajax_object.nonce, 'user_data': 'Some input from a user' }, success: function( response ) { // Here we do what happens if all is good - update the interface with a success message!? }, error: function( response ) { // Whooops, something went wrong! // console.log(response); } }); });
wp_localize_script()
を使用したので、JavaScriptでplugin_ajax_object変数を使用できます。 ナンスを変数_ajax_nonce
として送信します。
JavaScriptコードからWordPressプラグインのナンスをチェックして確認します
add_action('wp_ajax_get_custom_data', 'get_custom_data'); function get_custom_data() { // Ready for the magic to protect your code? check_ajax_referer('secure-plugin-nonce'); /** * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails. * * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like: * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) { * wp_send_json_error( 'Invalid nonce' ); * } */ $sanitized_user_data = sanitize_text_field( $_POST['user_data'] ); // ... continue with the rest of your plugin's function code ... }
魔法は、ナンスをチェックし、ナンスが期待されたものと一致しない場合は単に失敗し、それ以上のコード実行を停止する関数check_ajax_referer()
で発生します。
コードをさらにカスタマイズして、何が起こったかに関する特定の情報をユーザーに返すことができます。
コードでナンスを使用することは、多くの種類のハッキングの試みを防ぐための高速で簡単かつ効果的な方法です。 これは、他のすべてのセキュリティ対策をスキップできるという意味ではありませんが、最悪の問題を減らすのに役立ちます。
誰も信用しないことについて私が言ったことを覚えていますか? これにより、コードを保護する別の方法、つまりサニタイズが可能になります。
購読して、私たちの本の無料コピーを入手してください
クレジットカードの紛争を増やすための11の実証済みのテクニックが740%の成功率を獲得
友達と共有する
友達のメールアドレスを入力してください。 スカウトの名誉であるこの本だけをメールで送ります。
共有していただきありがとうございます
素晴らしい-「クレジットカードの紛争で勝つ成功率を740%増やすための11の実証済みのテクニック」のコピーが送信されました。 私たちがもっと言葉を広めるのを手伝いたいですか? 続けて、その本を友達や同僚と共有してください。
購読していただきありがとうございます!
-「クレジットカードの紛争で勝つ成功率を740%増やすための11の実証済みのテクニック」のコピーを。
メールにタイプミスがありますか? メールアドレスを編集して再送信するには、ここをクリックしてください。
5.ユーザー入力をサニタイズします
前の例では、JSからPHPに送信される追加のデータを含めました。 コードにデータを取り込むたびに、安全ではないと予想する必要があります。
'user_data':'Some input from a user'
この例では、これは単純な文字列ですが、データをPHPに送り返すため、入力にPHP環境で悪用されたり、データベースに保存されてさらに悪用される可能性のあるコードが含まれていないことを確認する必要があります。
消毒が付属しています。 WordPressには、入力を受け取り、データをクリーンアップしてから返すさまざまな関数があります。
この例では、関数sanitize_text_field()
を使用しましたが、WordPressには、さまざまなタイプのデータに適した多くのサニタイズ関数が付属しています。
コードを安全に保ち、悪用を防ぐために使用できる、WordPressに組み込まれている他の多くの優れた関数とメソッドがあります。
コードに送信されたデータは、最初にサニタイズせずに使用しないでください。 WordPress開発者のよくある間違いについてのこの記事と、サニタイズやその他の実用的なヒントについての詳細を確認してください。
そして、それは私を次のヒントに導きます。それはほとんどのWordPress開発者が経験したものです。
6. is_admin()
はあなたが思っているものではないことを忘れないでください
コードを悪から保護することを最初に考え始めたとき、おそらく関数is_admin()
に出くわすでしょう。名前からすると、それは必要なものすべてであるように聞こえます。必要なのは、コードをそれでラップすることだけです。大丈夫だ。
残念ながら、そうではありません。 関数is_admin()
は、コードがWebサイトの管理側で実行されているかどうかのみを検出します。 コードが通常のユーザーまたは管理者によって実行されているかどうかを検出することはできません。
プラグインにコードを入力しただけでは、管理インターフェイスでコードを実行している可能性が高いため、気付くことはありません。つまり、コードはtrue
と評価され、それについて考えるのをやめて、何かに移ります。そうしないと。
ユーザーが管理者であるかどうかを確認する正しい方法は、ユーザー機能を確認することです。
if ( current_user_can( 'activate_plugins' ) ) { // Do your code here }
ユーザーの役割ごとに異なる機能があるため、よりきめ細かく制御できます。 ほとんどの場合、 'activate_plugins'
は管理者のみに必要なものです。
管理者と編集者の両方が何かを実行できるようにする方法が必要な場合は、 'edit_pages'
機能をテストする必要があります。
7. rel =” noopener”またはrel =” noreferrer”をリンクに追加します
外部リソースへのリンクはごく普通のことであり、ユーザーがプラグイン/テーマページを離れたくないので、これらのリンクにtarget="_blank"
を追加する昔ながらの方法は理にかなっています。
ただし、これにより、タブナビングと呼ばれるものが可能になります。 これはセキュリティ上の問題であり、悪意のあるJavaScriptコードがwindow.opener
機能を悪用してユーザーから情報を盗む可能性があります。
これを防ぐのは、リンクにrel="noopener"
を追加するのと同じくらい簡単です。 今日リンクしているページは問題ないかもしれませんが、将来変更される可能性があります。
rel=noopener
は、リンク先のページが情報にアクセスしたり、ページを制御したりできないことを意味します。
rel=noreferrer
も同じことを行い、Referrerヘッダーを介して参照情報を渡さないようにブラウザーに指示します。 rel="noreferrer"
を追加するということは、リンク先のページが訪問者の出所を知らないことを意味します。
注:これらの2つのプロパティは、SEOに関連するrel=nofollow
と混同しないでください。
8.サードパーティAPIでHTTPSとセキュアトークンを使用する
開発者は、多くの場合APIを統合する必要があります。これを安全に行って、送受信するデータを保護することが重要です。
幸いなことに、これを安全に行う方法については、すでに標準が設定されています。 それらの1つはHTTPSです。 HTTPSを使用すると、送信されるすべてのデータが暗号化されるセキュリティ層が導入されます。
ただし、データをスパイの目から確実に保護するには、HTTPSを使用するだけでは不十分です。
Ars Technicaによるこの記事で説明されているように、「HTTPSはデータが安全であることを意味するのではなく、接続が安全であることを意味します。」
安全なトークン– JWT
通信とAPI統合を処理するための安全な標準は、JSON Web Token、JWTを使用することです。
安全なトークンは、ユーザーのログインの詳細を検証し、トークン、ユーザー名、IDなどのデータを含む小さな文字列を生成するサーバーにリクエストを送信することによって作成されます。
後続のリクエストをサーバーに送信するときは、そのトークンをリクエストに含めます。 このトークンは、あなたが認証され、アクセスできることを証明します。 トークンが有効で有効期限が切れていない場合、サーバーはトークンに含まれているユーザーの詳細を使用して、要求されたデータをプルアップします。
サーバーは、データの処理を決定する前にそのキーを介してユーザーを検索する必要があるAPIキーを使用する場合と比較して、この方法でリクエストをすばやく処理できます。 トークンを使用すると、ユーザーに関するデータをトークン内に含め、複数のデータベースクエリを保存できます。
安全なトークンが生成され、その後使用される方法では、偽のトークンを作成したり、トークンのコンテンツを操作したりすることはできません。 有効なトークンを作成するには、秘密鍵を知っている必要があります。秘密鍵は、プラットフォームの背後にある会社が十分に隠しておくことができます。
覚えておくべき非常に重要な注意点は、トークン内のデータは暗号化されていないということです。 トークンの内容を無効にせずに改ざんすることはできませんが、トークン内のデータは誰でも簡単に読み取ることができるため、機密データを保存するのに適した場所ではありません。
トークンとその仕組みについて詳しく知りたい場合は、JSONWebトークンの概要を参考にしてください。
9.CDNの外部ライブラリを使用しないでください
cdnjs.comやその他の無料のグローバルCDNを介して必要になる可能性のあるライブラリを含めたくなるかもしれませんが、いくつかの欠点があります。
まず第一に、ライブラリや、インクルードするファイルに侵入する悪意のあるコードを制御することはできません。
CDNは一般的に安定しており、定義上高速ですが、より多くの攻撃を受ける可能性もあります。 コードが攻撃を受けているCDNのJSライブラリに依存している場合、プラグインとテーマの読み込みが非常に遅いか、まったく読み込まれません。
これは、プラグインがその時点で使用していたパブリックCDNが一部の地域のユーザーに対してタイムアウトになり、インターフェイスが使用できなくなっていた顧客のWebサイトで発生しました。 結局、簡単な修正として、代わりにJSスクリプトのローカルコピーを使用するようにプラグインを変更する必要がありました。
外部のサードパーティソースを使用すると、プライバシーが侵害される可能性もあります。 CDNがすべてのユーザーIPをログに記録することが可能になります。GDPRポリシーを確認し、顧客に通知してください。
一般に、信頼できるサードパーティのCDNプロバイダーを使用する場合、問題は発生しませんが、最も簡単で信頼性の高いアプローチは、製品に含まれているJSライブラリを配布することです。
知ってますか? WordPressにはいくつかのJSライブラリが含まれています。 使用する可能性のある一般的なJSライブラリの多くは、WordPressに含まれています。 これらのライブラリは、基本的なニーズのほとんどをカバーします。
開発者向けのヒント:必要な特定のページにのみ追加のJSファイルとCSSファイルをロードしてください。 開発者およびユーザーとして、私はすべてのページに不要なJSおよびCSSファイルをロードすることによって管理者を遅くするプラグインを非常に嫌います。 他の管理ページの速度が低下するだけでなく、視覚的なレイアウトが実際に混乱し、一部の管理ページがほとんど使用できなくなる可能性があります。 お願いします
コードを保護するのに役立つツールもいくつかあります。無料で使用できる優れたツールはCoderiskです。
10.ツールとサービスを使用してコードを分析します
コードリスク
コードの問題を特定するのに役立つ多くの自動化されたサービスがあります。 いくつか例を挙げると、Exakat、SonarSource、PHPStan、そして私のお気に入り– Coderisk.com –コード内のより明白なセキュリティエラーのいくつかを見つける簡単な方法。
この会社は、公開されているWordPress.orgリポジトリからすべてのWordPressプラグインをスキャンします。 彼らのソフトウェアは、さまざまなコーディング標準に基づいて、何百ものさまざまな種類のセキュリティ問題をスキャンして特定することができます。
彼ら自身の統計によると、これまでに40億行を超える公開コードをスキャンしており、上位のプラグインでさえかなり多くの問題があります。
無料サービスにサインアップするのは非常に簡単です。無料のアカウントを作成してから、プラグインの申請を開始できます。 プラグインの申請は、次に新しいバージョンをデプロイするときにreadme.txtに入力する1行のコードを取得するのと同じくらい簡単です。
これにより、プラグインの最新のスキャンにアクセスできます。内部には、コードへの直接リンクとともに、各問題に関する特定の情報と詳細があります。
これは無料のサービスであるため、プラグインのスキャンを頻繁に更新しない可能性がありますが、通知を受け取ったら、前回のレビュー以降に間違いを犯した可能性があるため、コードを確認する価値があります。あなたのコード。
一度コツをつかめば、インターフェースは非常に簡単にナビゲートでき、システムは非常に便利で、エラーを追跡するのに役立つ何が間違っているかについての指示を非常に簡単に理解できます。
バグをフィルタリングする方法もたくさんあり、各問題を修正済みまたは他の多くのオプションとしてマークして、すべての問題の概要をすばやく把握するのに役立てることができます。
注:コードでCoderisk(またはそのカテゴリの他のツール)を実行したことがない場合は、警告される疑わしい問題の数について心配する必要はありません。 これらのツールは、ビジネスロジックを理解せずにコードを分析するだけなので、大量の誤検知を生成する可能性があります。 ツールの出力を、レビューする項目の確実な開始リストとして使用します。
PHP_CodeSniffer
コードをチェックするためのもう1つの優れたツールは、PHP_CodeSnifferです。 PHPCSは、コードをチェックしてエラーを報告するPHPCSと、PHPCSが特定した広範囲の問題を自動的に修正できるPHPCBFの2つのスクリプトで構成されています。
PHPCSの使用は、インストールするとコマンドラインから非常に簡単に使用できます。 このツールは、コードに現れるセキュリティの問題を防ぐことはできませんが、大きな問題を悪用することをはるかに困難にする単純なコーディングの間違いを排除することができます。
PHPCSをSublimeTextやVisualCodeなどのエディターに直接統合することもできます。 このようにして、間違いを簡単に確認し、IDEですばやく修正できます。
チームで作業する場合でも、単一の開発者として作業する場合でも、自動化されたシステムを使用する価値があります。自動化されたシステムは、他の方法では見逃す可能性のある基本的なセキュリティ問題を簡単に排除する方法です。
自動化されたシステムを使用してコードをスキャンしてセキュリティの問題を見つけることは、安全なキャッチオールバグの方法ではありませんが、最も明白な間違いを特定するのに役立ちます。
11.適切なレビューなしにWebからコードをコピーして貼り付けないでください
WP製品を可能な限り安全に保つことは、たまにではなく、継続的なプロセスである必要があります。 新しい機能を導入したり、コードを削除したりすると、新しいセキュリティの問題が発生する可能性もあります。
Googleは必ずしもあなたの友達ではありません。 開発者は、大規模なインターネットでインスピレーションを得るためのコード例を確認することに慣れています。怠惰な場合は、あちこちで少しずつ書き直してください。
インターネットで見つけたコードのほとんどは、安全な実稼働環境で使用できるようになることはめったになく、修正しようとしているコーディングの問題の例として意図されています。 これらのコードを盲目的にレビューなしで使用すると、問題がすぐに発生する可能性があります。
WordPress開発者としてやるべきことはたくさんあり、何千ものインストールでプラグインの緊急のセキュリティ問題を修正することはそれらの1つであってはなりません。
あなたの評判が危機に瀕していることを覚えておいてください
プラグインやテーマのセキュリティに注意を払っていない場合は、ユーザー、そのビジネス、ビジネス、および評判を危険にさらしていることになります。 それは多くの潜在的に無駄な時間とお金です!
セキュリティの脆弱性は、顧客があなたのブランドや製品に寄せる信頼と信頼に大きな影響を与える可能性があります。 上記のLoginizerの例は、最も厄介なセキュリティの脆弱性でさえ、セキュリティプラグインの開発者自身に発生する可能性があることを示しています。 そして、不正投票や政府のハッキングに関する他の例は、誰もが脆弱であることを示しています。
脆弱性を発見した場合は、迅速に対処して解決し、修正をリリースするとともに、(必要に応じて)問題を公表するためのベストプラクティスに従います。
コミュニケーションや脆弱性から生じる可能性のある「広報」の問題に関してゲームの先を行く場合は、大きな頭痛の種を避け、評判を損なうことなく高めることができます。
読んでくれてありがとう!
最初に何を探すべきかわからないときに、あなたがしなければならないすべてのことを調べるのは気が遠くなるかもしれませんし、正しい情報を見つけるのは難しいかもしれません。 どこから始めればよいかわからない場合は、WPセキュリティの専門家による製品のレビューを検討する必要があります(私もセキュリティレビューを行っています)。
セキュリティレビューの費用や時間を節約することは魅力的ですが、製品を可能な限り保護しないことによるコストは、長期的にはさらに高くなる可能性があります。
これらは、WordPress製品を悪用から保護するための方法のほんの一部です。 疑問がある場合は、覚えておいてください–誰も信用しないでください