PHP セキュリティ関数:strip_tags、filter_var、MD5、sha1
潜在的なセキュリティ上の脅威
彼らは基本的に、システムを攻撃できる XNUMX つのグループです。
- ハッカー – 不正なデータにアクセスしたり、アプリケーションを妨害したりすることを目的としています。
- ユーザー – フォームに間違ったパラメータを無邪気に入力する可能性があり、Web サイトや Web アプリケーションに悪影響を与える可能性があります。
注意する必要がある攻撃の種類は次のとおりです。
SQLインジェクション – このタイプの攻撃は、有害なコードを SQL ステートメント。
これは、ユーザー入力フォームまたは変数を使用する URL を使用して行われます。
追加されたコードは、SQL ステートメントの WHERE 句の条件をコメント化します。 追加されたコードは次のこともできます。
- 常に真となる条件を挿入する
- テーブルからデータを削除する
- テーブル内のデータを更新する
- このタイプの攻撃は通常、アプリケーションへの不正アクセスを取得するために使用されます。
クロスサイトスクリプティング – このタイプの攻撃は通常、有害なコードを挿入します Javaスクリプト。これは、お問い合わせフォームやコメントフォームなどのユーザー入力フォームを使用して行われます。これは、次の目的で行われます。
- 次のような機密情報を取得します。 クッキーデータ
- ユーザーを別の URL にリダイレクトします。
- その他の脅威としては、PHP コード インジェクション、シェル インジェクション、電子メール インジェクション、スクリプト ソース コードの開示などがあります。
PHP アプリケーションのセキュリティのベスト プラクティス
次に、アプリケーションを開発するときに考慮する必要がある PHP セキュリティのベスト プラクティスをいくつか見てみましょう。
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('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
URL を参照してください http://localhost/phptuts/comments.php
次に、strip_tags 関数を使用して、アプリケーションをそのような攻撃から保護しましょう。
<?php $user_input = "<script>alert('Your site sucks!');</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('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
出力:
alert('Your site sucks!');
mysqli_real_escape_string 関数 この関数は、アプリケーションを SQL インジェクションから保護するために使用されます。
ユーザー ID とパスワードを検証するための次の SQL ステートメントがあるとします。
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
悪意のあるユーザーは、ユーザーIDテキストボックスに次のコードを入力できます。 ' OR 1 = 1 — パスワードテキストボックスに1234 認証モジュールをコーディングしましょう
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
最終的な結果は次のようになります
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ここに、
- 「SELECT * FROM users WHERE user_id = ”」は空のユーザー ID をテストします
- 「「OR 1 = 1」は常に真となる条件です
- 「-」はパスワードをテストする部分のコメントです。
上記のクエリはすべてのユーザーを返します。ここで、mysqli_real_escape_string 関数を使用してログイン モジュールを保護しましょう。
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
上記のコードは出力します
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
注意 XNUMX 番目の一重引用符はエスケープされており、ユーザー ID の一部として扱われ、パスワードはコメントされません。
PHP Md5 および PHP sha1
Md5 は Message Digest 5 の頭字語で、sha1 は Secure Hash Algorithm 1 の頭字語です。
どちらも文字列の暗号化に使用されます。
文字列が一度暗号化されると、それを復号化するのは面倒です。
MD5 と sha1 は、パスワードをデータベースに保存する場合に非常に役立ちます。
以下のコードは、md5 と sha1 の実装を示しています。
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
ファイル hashes.php を phptuts フォルダーに保存したと仮定して、URL を参照します。
上記のハッシュからわかるように、攻撃者がデータベースにアクセスしたとしても、ログインするためのパスワードはわかりません。
製品概要
- セキュリティとは、アプリケーションを偶発的および悪意のある攻撃から保護するために導入される対策を指します。
- ストリップタグ関数は、次のようなタグを削除するために使用されます。 入力データから
- filter_var 関数は入力データを検証し、PHP でサニタイズします。
- mysqli_real_escape_stringはSQL文をサニタイズするために使用されます。文から悪意のある文字を削除します。
- パスワードの暗号化には MD5 と SHA1 の両方が使用されます。