ホームページ >バックエンド開発 >PHPチュートリアル >PHP データベース接続セキュリティ監査: コードの脆弱性をチェックします。
データベース接続セキュリティ監査: セキュリティ プロトコル (TLS/SSL) を使用してデータベース通信を保護し、中間者攻撃を防ぎます。パラメータ化されたクエリを使用してデータをクエリ文字列から分離し、SQL インジェクション攻撃を防ぎます。ユーザー入力をフィルタリングして悪意のある文字と SQL コマンドを削除し、正当な入力のみが実行されるようにします。強力なパスワードを使用し、定期的に変更し、デフォルトのパスワードや推測しやすいパスワードは避けてください。攻撃対象領域を減らすために、アクセスが必要なユーザーのみにデータベースへのアクセスを制限します。
PHP アプリケーションではデータベース接続セキュリティが非常に重要です。安全でない接続は、機密データの漏洩やアプリケーションへの不正アクセスにつながる可能性があります。この記事では、PHP コード内のデータベース接続のセキュリティの脆弱性をチェックする方法を検討し、いくつかの実践的な例を示します。
データベース サーバーと PHP アプリケーションが TLS/SSL などの安全なプロトコルを使用していることを確認してください。これにより、データベース通信が暗号化され、中間者攻撃が防止されます。
$dsn = 'mysql:dbname=database;host=localhost;port=3306'; $username = 'username'; $password = 'password'; try { $db = new PDO($dsn, $username, $password, [ PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_SSL_KEY => '/path/to/key.pem', PDO::MYSQL_ATTR_SSL_CERT => '/path/to/cert.pem', PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem', ]); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
パラメータ化されたクエリを使用すると、SQL インジェクション攻撃を防ぐことができます。クエリ文字列とデータを分離することで、悪意のある SQL コマンドの実行を防ぎます。
$stmt = $db->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->execute();
悪意のある文字や SQL コマンド インジェクションを防ぐために、常にユーザー入力をフィルターします。 filter_var()
和 htmlentities()
などの組み込み関数を使用して、ユーザー入力を検証し、サニタイズします。
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
常に強力なパスワードを使用し、定期的に変更してください。 「password」や「admin」など、デフォルトのパスワードや推測しやすいパスワードの使用は避けてください。
データベースにアクセスする必要があるアプリケーションまたはユーザーにのみアクセスを許可します。データベースへのアクセスを制限すると、攻撃対象領域が減り、データ侵害のリスクが軽減されます。
ケース 1:
$db = new PDO('mysql:dbname=database;host=localhost', 'username', 'password');
上記のコードは、ユーザー入力のフィルタリングや検証がないため、SQL インジェクション攻撃に対して脆弱です。
修正:
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); $db = new PDO('mysql:dbname=database;host=localhost', $username, $password);
ケース 2:
$stmt = $db->query('SELECT * FROM users WHERE username="' . $_POST['username'] . '"');
上記のコードは、ユーザー入力を SQL クエリに直接挿入するため、SQL インジェクション攻撃に対して脆弱です。
修正者:
$stmt = $db->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR); $stmt->execute();
以上がPHP データベース接続セキュリティ監査: コードの脆弱性をチェックします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。