PHP で安全なアプリケーションを開発するためのヒント

2017 年 1 月 27 日

PHP は、Web で最も人気のあるプログラミング言語の 1 つです。開発者が最高のアプリケーションをプログラムし、モバイルおよび Web 開発における新しいベンチマークを作成するのに役立ちます。ただし、PHP アプリケーションの開発における最大の懸念はセキュリティの問題であり、安全な PHP アプリケーションの開発は、特にアマチュアにとって大きな課題となっています。この記事では、PHP のセキュリティに関する一般的な落とし穴や開発を回避するのに役立つ 3 つの主要なヒントを紹介します。

ヒント 1: 適切なエラー報告は必須です

アプリケーション エラーのレポートは、開発プロセス中に非常に役立ちます。エラー レポートは、変数内のスペルミスを見つけるのに役立つだけでなく、関数の間違った使用方法を把握するのにも役立ちます。

ただし、Web サイトが公開されると、開発中に役に立ったのと同じレポートが、ユーザーに Web サイトについて知りたい以上の情報 (ソフトウェアに関する情報など) を伝えることになり、アプリケーションのセキュリティに反する可能性があります。実行中のフォルダー構造など)。 Web サイトを公開する前に、そのような機密情報を秘密に保つために、そのようなエラーをすべて排除する必要があります。これは、アプリケーションに次の行を記述することで実行できます。

エラー報告(0);

まだ発生しているエラーについては、常に最新情報を入手する必要があると感じています。したがって、すべてのエラーが保護されたファイルに記録されるようにする必要があります。これは、set_error_handler と呼ばれる PHP 関数を使用して行うことができます。

ヒント 2: 使用されなくなった PHP の機能を無効にすることをお勧めします。

PHP の初期の頃から、PHP の設計者は開発を容易にすることを目的としたいくつかの機能を定期的に組み込み続けてきました。あるいは少なくとも彼らはそうすることを考えたのです!これらの役立つと思われる機能の一部は、望ましくない結果をもたらす可能性もあります。これらを「悪い機能」と呼んでいるのは、これらによってデータ検証が可能になり、バグがスクリプトに侵入する経路ができてしまったからです。これが、開発プロセスの開始時に最初に行うことの 1 つとして、これらの機能の一部を無効にすることをお勧めする理由です。

注: これらの機能は、ホストに応じて Web サイトでオフになる場合とオフにならない場合があります。自分のコンピュータまたはその他の同様のローカル環境で開発している場合、これらはおそらくオフにならないでしょう。これらの機能の一部は PHP6 では削除されましたが、PHP4 アプリケーションにはまだ存在しており、最終的には PHP5 アプリケーション以降では非推奨になります。

グローバルの登録 (register_globals)

'register_globals' これは基本的に、クエリ文字列を含む迅速なアプリケーション開発を支援することを目的としていました。の 'register_globals' ステートメントを使用すると、値にアクセスできます $var の代わりに $_GET['var'] 自動的に。これは便利に聞こえるかもしれませんが、残念なことに、コード内のすべての変数にこのプロパティが含まれるようになり、そのような望ましくない結果から保護しない PHP アプリケーションに簡単に侵入できるようになりました。以下のコード スニペットは、PHP スクリプトで使用される一般的な例の 1 つにすぎません。

if( !empty( $_POST['ユーザー名'] ) && $_POST['ユーザー名'] == 'テスト' && !empty( $_POST['パスワード'] ) && $_POST['パスワード'] == “テスト123” )
{
$access = true;
}

アプリケーションが register_globals を ON にして実行している場合、ユーザーはクエリ文字列に access=1 を指定するだけで、実行中のスクリプトにアクセスできるようになります。ただし、スクリプト側から register_globals を無効にすることはできません (ini_set を使用)。通常の場合と同様)、.htaccess ファイルを使用してこれを行うことができます。これとは別に、一部のホストでは、これを行うためにサーバー上に php.ini ファイルを置くこともできます。

.htaccess による無効化

php_flag register_globals 0

php.iniで無効にする

register_globals = オフ

サーバー全体に適用されないカスタム php.ini ファイルを使用する場合は、PHP を含むすべてのサブフォルダーにこれらの宣言を必ず含める必要があることに注意してください。

ヒント 3: ユーザー入力におけるクロスサイト スクリプティング (XSS) 攻撃に注意する

Web アプリケーションは通常、ユーザーからの入力を受け取り、最終的にはコメント、ブログ投稿、または基本的にすべて HTML コードの形式であるスレッドなど、さまざまな形式のいずれかで同じ内容を表示します。ただし、アプリケーションが入力の受け入れ時に HTML を許可すると、多くの予期しない方法の 1 つで JavaScript が実行されるための十分なスペースが残されるため、危険を伴う可能性があることに注意してください。そして、本当に小さなものでも放置されていると、Cookie が簡単にハイジャックされてしまう可能性さえあります。ハイジャッカーは、この Cookie データを簡単に使用して実際のアカウントを偽り、Web サイトのデータに違法にアクセスすることができます。 HTML を完全に禁止することで、Web サイトをこのような攻撃から守ることができます。これにより、最終的には JavaScript の実行も無効になります。ただし、これは書式設定も完全に無効にするため、常に実行可能なオプションであるとは限りません。特にブログやフォーラムの場合は、書式設定なしでは実行できない場合があります。

この問題を解決するには、一部の単純な書式設定を除いて HTML をほとんど無効にすることができます。これは、「strong」タグや「em」タグなど、選択したいくつかの HTML タグ (属性なし) だけを許可することで実現できます。または、[b]test[/b] の形式でフォーラムによく書かれる、「BBCode」や「BB タグ」などの人気のあるタグをいくつか使用します。 BBCode は、HTML_BBCodeParser などの既存のパッケージを使用して実装することも、正規表現と一連の 'preg_replace' ステートメントを使用して独自の BBCode 実装を作成することによって実装することもできます。

参照: http://www.sks.com.np/basic-security-vulnerabilities-in-php-code/

主役として PHP開発会社 , カーマテック エンドツーエンドで提供します PHP開発 フロントエンドとバックエンドの両方で最先端のテクノロジーに基づいたソリューション。現代的なスタイルとデザインに加えて、私たちはシンプルでユーザーフレンドリーなインターフェイスを維持することに取り組んでいます。複雑な Web サイト機能であっても、使いやすさが私たちの目標です。

jaJapanese