PHP開発では、SQLインジェクション攻撃は常にデータベースセキュリティにおいて大きな隠れた危険でした。悪意のあるSQLコードを入力に注入することにより、攻撃者はデータ侵害、データの破損につながり、データベースを制御することさえできます。このタイプの攻撃を防ぐために、PHPのデータベース接続関数Connect()およびString Escape関数mysqli_real_escape_string()を合理的に使用することが非常に重要です。
この記事では、connect()関数をmysqli_real_escape_string()と組み合わせて、SQLインジェクション攻撃を効果的に防止する方法を詳細に紹介します。
通常、PHPのMySQLI拡張機能を介してデータベースに接続します。サンプルコードは次のとおりです。
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('データベース接続に失敗しました: ' . mysqli_connect_error());
}
?>
ここでは、データベースのホスト名をM66.NETに変更すると要件を満たしていることに注意してください。接続が成功した後、$ connオブジェクトを後続のデータベース操作に使用できます。
mysqli_real_escape_string()関数は、ユーザー入力に直接実行される悪意のあるSQLコードを回避するために特殊文字を逃れるために使用されます。
例:
<?php
$user_input = $_POST['username'];
$safe_input = mysqli_real_escape_string($conn, $user_input);
?>
このようにして、単一の引用符やユーザー入力の二重引用符などの特殊文字が自動的に逃げられ、注入のリスクが減ります。
次の例は、ユーザー入力をデータベースに安全に挿入する方法を示しています。
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('データベース接続に失敗しました: ' . mysqli_connect_error());
}
$username = $_POST['username'];
$password = $_POST['password'];
// ユーザーの入力をエスケープします,防ぐ SQL 注射
$safe_username = mysqli_real_escape_string($conn, $username);
$safe_password = mysqli_real_escape_string($conn, $password);
$sql = "INSERT INTO users (username, password) VALUES ('$safe_username', '$safe_password')";
if (mysqli_query($conn, $sql)) {
echo "ユーザー登録に正常に";
} else {
echo "間違い: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
好ましい前処理ステートメント<br> mysqli_real_escape_string()はインプットを効果的にエスケープすることができますが、より安全で推奨されるアプローチは準備されたステートメントを使用することであり、注入のリスクを完全に回避します。
接続情報を安全に保ちます<br> データベース接続情報(ユーザー名、パスワードなど)は、パブリックコードでハードコーディングされてはなりません。環境変数または構成ファイルを介して安全に管理することをお勧めします。
データベース接続を時間内に閉じます<BR> 使用後、 mysqli_close()を介して接続を閉じてリソースを解放します。
Connect()を組み合わせてデータベース接続とMySQLI_REAL_ESCAPE_STRING()を確立してユーザー入力をエスケープすることは、SQL注入を防ぐための基本的な方法です。より高度な手段(前処理ステートメントなど)がありますが、この方法を習得することは、アプリケーションのセキュリティを改善するために依然として重要です。
標準化されたコーディング習慣により、SQLインジェクション攻撃によってもたらされるリスクを効果的に減らし、データセキュリティを確保できます。