PHP セキュリティ関数:strip_tags、filter_var、MD5、sha1

潜在的なセキュリティ上の脅威

彼らは基本的に、システムを攻撃できる XNUMX つのグループです。

  • ハッカー – 不正なデータにアクセスしたり、アプリケーションを妨害したりすることを目的としています。
  • ユーザー – フォームに間違ったパラメータを無邪気に入力する可能性があり、Web サイトや Web アプリケーションに悪影響を与える可能性があります。

次のことwing 私たちが注意する必要がある種類の攻撃です。

SQLインジェクション – このタイプの攻撃は、有害なコードを SQL ステートメント。

これは、ユーザー入力フォームまたは変数を使用する URL を使用して行われます。

追加されたコードは、SQL ステートメントの WHERE 句の条件をコメント化します。 追加されたコードは次のこともできます。

  • 常に真となる条件を挿入する
  • テーブルからデータを削除する
  • テーブル内のデータを更新する
  • このタイプの攻撃は通常、アプリケーションへの不正アクセスを取得するために使用されます。

クロスサイトスクリプティング – このタイプの攻撃では、有害なコード (通常は JavaScript) が挿入されます。 これは、お問い合わせフォームやコメント フォームなどのユーザー入力フォームを使用して行われます。 これは次の目的で行われます。

  • 次のような機密情報を取得します。 クッキーデータ
  • ユーザーを別の URL にリダイレクトします。
  • その他の脅威には、PHP コード インジェクション、シェル インジェクション、E が含まれます。mail インジェクション、スクリプトソースコード公開など

PHP アプリケーションのセキュリティのベスト プラクティス

次に、アプリケーションを開発するときに考慮する必要がある PHP セキュリティのベスト プラクティスをいくつか見てみましょう。

PHP ストリップタグ

strip_tags 関数は HTML を削除します。 JavaScriptを または文字列からの 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

PHP ストリップタグ

次のメッセージを受け取ったと仮定しましょうwing ユーザー入力として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

PHP ストリップタグ

次に、strip_tags 関数を使用して、アプリケーションをそのような攻撃から保護しましょう。

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

URL を参照してください http://localhost/phptuts/comments.php

PHP ストリップタグ

PHPのfilter_var関数

filter_var 関数は、データの検証とサニタイズに使用されます。

検証では、データの型が正しいかどうかがチェックされます。 文字列の数値検証チェックでは、偽の結果が返されます。

サニタイズとは、不正な文字をファイルから削除することです。 文字列.

完全なリファレンスについては、このリンクを確認してください フィルター変数

このコードはコメント システム用です。

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 インジェクションから保護するために使用されます。

次のようなものがあると仮定しましょうwing ユーザー ID とパスワードを検証するための SQL ステートメント。

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

悪意のあるユーザーは次のように入力する可能性がありますwing ユーザーIDテキスト内のコード box。 ' OR 1 = 1 — パスワード テキストの 1234 box 認証モジュールをコーディングしてみましょう

<?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';

Note 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 を参照します。

PHP Md5 および PHP sha1

上記のハッシュからわかるように、攻撃者がデータベースにアクセスしたとしても、ログインするためのパスワードはわかりません。

まとめ

  • セキュリティとは、アプリケーションを偶発的および悪意のある攻撃から保護するために導入される対策を指します。
  • ストリップタグ関数は、次のようなタグを削除するために使用されます。 入力データから
  • filter_var 関数は入力データを検証し、PHP でサニタイズします。
  • mysqli_real_escape_string は、SQL ステートメントをサニタイズするために使用されます。 ステートメントから悪意のある文字を削除します
  • パスワードの暗号化には MD5 と SHA1 の両方が使用されます。