strip_tags、filter_var、Md5およびsha1

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

彼らは基本的にあなたのシステムを攻撃することができる人々の2つのグループです

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

以下は、注意が必要な攻撃の種類です。

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

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

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

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

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

  • Cookieデータなどの機密情報を取得する
  • ユーザーを別のURLにリダイレクトします。
  • その他の脅威には、PHPコードインジェクション、シェルインジェクション、電子メールインジェクション、スクリプトソースコード開示などがあります。

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

ここで、アプリケーションを開発するときに考慮しなければならないPHPセキュリティのベストプラクティスのいくつかを見てみましょう。

PHPのstrip_tags

strip_tags関数はHTMLを削除し、 JavaScript または文字列からのPHPタグ。

この関数は、クロスサイトスクリプティングなどの攻撃からアプリケーションを保護する必要がある場合に役立ちます。

ユーザーからのコメントを受け入れるアプリケーションを考えてみましょう。

<?php

$user_input = "Your site rocks";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

phptutsフォルダーにcomments.phpを保存したと仮定して、URLを参照します http://localhost/phptuts/comments.php

ユーザー入力

<?php

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

echo strip_tags($user_input);

?>

URLを参照します http://localhost/phptuts/comments.php

PHPfilter_var関数

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

ユーザー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をテストします
  • 「 'OR1 = 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';

注意 2番目の一重引用符はエスケープされており、ユーザーIDの一部として扱われ、パスワードはコメントされません。

PHPMd5およびPHPsha1

Md5はMessageDigest 5の頭字語であり、sha1はSecure Hash Algorithm1の頭字語です。

どちらも文字列の暗号化に使用されます。

文字列が暗号化されると、それを復号化するのは面倒です。

Md5とsha1は、データベースにパスワードを保存するときに非常に便利です。

以下のコードは、md5とsha1の実装を示しています。

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

ファイルhashes.phpをphptutsフォルダーに保存したと仮定して、URLを参照します。

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

概要

  • セキュリティとは、偶発的および悪意のある攻撃からアプリケーションを保護するために実施される対策を指します。
  • strip_tags関数は、入力データから