PHP セキュリティ関数:strip_tags、filter_var、MD5、sha1
⚡ スマートサマリー
PHP Security は、データの検証、サニタイズ、安全な保存によって、Web アプリケーションを攻撃者や不注意な入力から保護します。このチュートリアルでは、主な脅威について説明した後、strip_tags、filter_var、esca を紹介します。pingまた、XSS、SQLインジェクション、および盗まれた認証情報から保護するために、password_hashを使用した最新のパスワードハッシュ化も提供します。

潜在的なセキュリティ上の脅威
あなたのシステムを攻撃できる人物は、基本的に2つのグループに分けられます。
- ハッカー – 不正なデータにアクセスしたり、アプリケーションを妨害したりすることを目的としています。
- ユーザーは、意図せずフォームに誤ったパラメータを入力してしまう可能性があり、それがウェブサイトやウェブアプリケーションに悪影響を与える可能性があります。
注意する必要がある攻撃の種類は次のとおりです。
SQLインジェクション – このタイプの攻撃は、有害なコードを SQL ステートメント。
これは、ユーザー入力フォームまたは URL変数を使用するもの。
追加されたコードは、SQL文のWHERE句の条件をコメントアウトします。追加されたコードには、以下の機能もあります。
- 常に真となる条件を挿入する
- テーブルからデータを削除する
- テーブル内のデータを更新する
このタイプの攻撃は通常、アプリケーションへの不正アクセスを取得するために使用されます。
クロスサイトスクリプティング(XSS) – この種の攻撃は、通常、有害なコードを挿入します。 Javaスクリプト。これは、お問い合わせフォームやコメントフォームなどのユーザー入力フォームを使用して行われます。これは次の目的で行われます。
- 次のような機密情報を取得します。 クッキーデータ
- ユーザーを別のページにリダイレクトする URL.
その他の脅威としては、PHPコードのインジェクション、シェルインジェクション、メールインジェクション、スクリプトのソースコード漏洩などが挙げられる。
PHP アプリケーションのセキュリティのベスト プラクティス
それでは、PHP を開発する際に考慮すべきセキュリティのベストプラクティスをいくつか見ていきましょう。ping 私たちのアプリケーション。
PHP ストリップタグ
strip_tags 関数は HTML を削除します。 Javaスクリプトまたは文字列からのPHPタグ。
この機能は、クロスサイトスクリプティングなどの攻撃からアプリケーションを保護する必要がある場合に役立ちます。
ユーザーからのコメントを受け付けるアプリケーションを考えてみましょう。
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
comments.php を phptuts フォルダに保存したと仮定して、 URL http://localhost/phptuts/comments.php
ユーザーからの入力として、以下のような内容を受け取ったと仮定しましょう。 alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
を参照 URL http://localhost/phptuts/comments.php
それでは、strip_tags関数を使用して、このような攻撃からアプリケーションを保護しましょう。
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
を参照 URL http://localhost/phptuts/comments.php
PHPのfilter_var関数
filter_var 関数は、データの検証とサニタイズに使用されます。
検証では、データの型が正しいかどうかがチェックされます。 文字列の数値検証チェックでは、偽の結果が返されます。
サニタイズとは、不正な文字をファイルから削除することです。 string.
完全な参考資料については、こちらのリンクをご確認ください。 フィルター変数
以下のコードはコメントシステム用です。filter_var関数とFILTER_SANITIZE_STRIPPED定数を使用してタグを削除します。
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
出力:
alert('Your site sucks!');
注意: FILTER_SANITIZE_STRIPPED(FILTER_SANITIZE_STRING の別名)は PHP 8.1 以降非推奨です。新しいコードでは strip_tags() を使用するか、安全な表示のために htmlspecialchars() を使用してください。
PHP mysqli_real_escape_string
mysqli_real_escape_string 関数は、SQLインジェクションからアプリケーションを保護するために使用されます。
ユーザーIDとパスワードを検証するための以下のSQL文があると仮定しましょう。
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
悪意のあるユーザーが侵入することができます ' OR 1 = 1 — ユーザーIDテキストボックスに「1234」と入力し、パスワードテキストボックスに「1234」と入力します。それでは、認証モジュールをコーディングしましょう。
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
最終的な結果は以下のとおりです。
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ここに、
- 「WHERE uid = 」は、空のユーザーIDをテストします。
- 「' OR 1 = 1」は常に真となる条件です。
- 「–」はパスワードをテストする部分をコメントアウトします。
上記のクエリはすべてのユーザーを返します。次に、mysqli_real_escape_string 関数を使用してログインモジュールを保護しましょう。実際のコードでは、この関数はデータベース接続を最初の引数として受け取ることに注意してください。
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
上記のコードを実行すると、以下の出力が得られます。
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
注:2番目のシングルクォーテーションはエスケープされているため、ユーザーIDの一部として扱われ、パスワードはコメントアウトされません。
ベストプラクティス: エスカping も役立ちますが、mysqli や PDO のパラメータ化されたプリペアド ステートメントは、データがクエリ テキストに混入しないため、SQL インジェクションに対する推奨される防御策です。
PHP Md5 および PHP sha1
MD5はMessage Digest 5の略で、SHA1はSecure Hash Algorithm 1の略です。どちらも一方向ハッシュ関数です。
以下のコードは、md5とsha1の実装例を示しています。
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
hashes.php ファイルを phptuts フォルダに保存したと仮定して、 URL.
重要: MD5とSHA1は高速で塩なしハッシュであり、 パスワードを保存する場所としてはもはや安全とはみなされていないなぜなら、最新のハードウェアとレインボーテーブルを使えば簡単に解読できてしまうからです。セキュリティに関係のないチェックサムにのみ使用し、パスワードには以下の方法を使用してください。
PHPでパスワードを安全にハッシュ化する方法
パスワードの保存には、PHPにはpassword_hashとpassword_verifyという関数が用意されています。これらは、処理速度の遅いソルト付きアルゴリズム(デフォルトではbcrypt)を使用するため、たとえデータベースが盗まれたとしても、各ハッシュは一意であり、解読には多大なコストがかかります。
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- パスワードハッシュ() データベースに保存するためのソルト付きハッシュを生成します。PASSWORD_DEFAULT は、現在推奨されているアルゴリズムを維持します。
- パスワード検証() ログイン試行を、保存されているハッシュ値と照合しますが、ハッシュ値を復号化することはありません。
ソルトとアルゴリズムはハッシュの中に保存されるため、それらを自分で管理する必要はなく、これがPHPでパスワードを扱うための正しく将来性のある方法となります。




