Web サイト開発では、データベースはデータの保存および管理ツールとしてよく使用されます。ただし、データベースへの不正アクセスはデータ漏洩やセキュリティ侵害につながる可能性があります。したがって、ユーザーが入力したデータに対して必要なフィルタリングと検証を実行することが非常に重要です。この記事では、PHP を使用してユーザー入力をフィルターし、データベースのセキュリティを保護する方法を紹介します。
ユーザー入力を受け取る前に、入力されたデータが期待される形式と内容に準拠していることを確認する必要があります。一般的に使用されるフィルタリング方法には、正規表現マッチング、関数フィルタリング、ホワイトリスト検証などがあります。
例:
 $username = $_POST['username'];
// 正規表現を使用してユーザー名を照合する,文字と数字のみを使用できます
if(preg_match('/^[a-zA-Z0-9]+$/', $username)){
    // 検証に合格しました,後続のロジックを続行する
    // ...
    // データベースクエリやその他の操作を実行する
} else {
    // 検証に失敗しました,エラーメッセージを出す
    echo "ユーザー名の形式エラー";
}SQL インジェクションは、攻撃者が入力に悪意のある SQL ステートメントを挿入することによって、不正な操作を実行する一般的なデータベース セキュリティの脆弱性です。パラメータ化されたクエリまたは入力エスケープを使用すると、この種の攻撃を効果的に防ぐことができます。
例:
 $username = $_POST['username'];
$password = $_POST['password'];
// 作成するPDO接続する
$db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
// 作成する预处理语句
$statement = $db->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
// バインドパラメータ
$statement->bindParam(':username', $username);
$statement->bindParam(':password', $password);
// クエリの実行
$statement->execute();
// 結果を得る
$result = $statement->fetch(PDO::FETCH_ASSOC);
if($result){
    // ユーザーが存在します,後続のロジックを続行する
    // ...
} else {
    // ユーザーが存在しません,エラーメッセージを出す
    echo "ユーザー名またはパスワードが間違っています";
}入力検証と SQL インジェクションの防止に加えて、データベースのセキュリティを保護するために認証と認可も必要です。これは、セッション管理、アクセス制御リスト (ACL)、またはロールベースのアクセス制御 (RBAC) などの方法を使用して実現できます。
例:
 // セッションを開始する
session_start();
// ユーザーがログインしていることを確認する
if(isset($_SESSION['username'])){
    // ユーザーはログインしています,後続のロジックを続行する
    // ...
    // データベースクエリやその他の操作を実行する
} else {
    // ユーザーはログインしていません,ログインページにジャンプします
    header("Location: login.php");
    exit();
}ユーザー入力データを検証およびフィルタリングすることにより、データベースへの不正アクセスを効果的に防止できます。入力の検証、SQL インジェクションの防止、認証と認可は、データベースのセキュリティを確保するための重要な手順です。開発プロセス中に安全なコーディング習慣を身につけ、PHP が提供するセキュリティ機能を最大限に活用してデータを保護する必要があります。