この記事では、ThinkPhpアプリケーションの一般的なSQLインジェクションの脆弱性について説明し、それらを防ぐための包括的なガイドを提供します。 パラメーター化されたクエリ、ベストプラクティス、および追加のセキュリティ対策をカバーします。 非常に脆弱な ): およびthinkphp
$username = $_GET['username'];
$password = $_GET['password'];
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = Db::query($sql);
$username = $_GET['username'];
$password = $_GET['password'];
$user = Db::name('users')->where(['username' => $username, 'password' => $password])->find();
Db::query()
入力検証が不十分です。データベースクエリでそれらを使用する前にユーザー入力を適切に検証およびサニタイズすることに失敗すると、攻撃者は入力フィルターをバイパスし、悪意のあるSQLコードを注入できます。 これには、データ型、長さ、および形式のチェックが含まれます。Db::query()
find()
、select()
、where
、、find()
などの方法を使用することにより、SQL注入に対するフレームワークの組み込み保護を活用します。 これらのメソッドは、パラメーターバインディングを自動的に処理し、ユーザー入力がデータとして扱われ、実行可能なコードではないことを保証します。select()
where
より多くの制御が必要な場合のより複雑なシナリオについては、id
でパラメーター化されたクエリを使用できますが、プレースホルダー(find()
または指定されたパラメーター)を使用し、パラメータを使用することができます。 SQL注入を防止するユーザーがサプリングしたデータ。 ThinkPhpは、パラメーターの適切な脱出と結合を処理します。パラメーター化されたクエリを超えたベストプラクティスとセキュリティ対策は何ですか?パラメーター化されたクエリを使用します。 潜在的に問題を引き起こす可能性のある予期しない入力を防ぐために、データ型、長さ、および形式を確認してください。 攻撃者が悪用する可能性のある過度の特権を付与することは避けてください。
定期的なセキュリティ監査と浸透テスト:
以上がSQLインジェクションチュートリアルを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。