PHP プログラミングのヒント: SQL インジェクション攻撃を防ぐ方法
データベース操作を実行する場合、セキュリティは非常に重要です。 SQL インジェクション攻撃は、アプリケーションによるユーザー入力の不適切な処理を悪用し、悪意のある SQL コードが挿入されて実行される一般的なネットワーク攻撃です。 SQL インジェクション攻撃からアプリケーションを保護するには、いくつかの予防策を講じる必要があります。
以下は簡単なコード例です:
$servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $username = $_POST['username']; $password = $_POST['password']; $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // 处理查询结果... } catch (PDOException $e) { // 处理异常... }
パラメータ化されたクエリを使用することで、ユーザーが入力した値を SQL クエリ ステートメントとは別に処理し、 を渡します。 bindParam
メソッドは変数をクエリ ステートメントのプレースホルダーにバインドします。これにより、ユーザーが悪意のある SQL コードを入力に挿入した場合でも、そのコードは実行されません。
filter_var()
、filter_input()
など) を使用して、さまざまなタイプの入力をフィルター処理して検証できます。 ユーザー入力をフィルターして検証するコード例を次に示します:
$username = $_POST['username']; $password = $_POST['password']; if (!empty($username) && !empty($password)) { // 过滤和验证用户名和密码 $filteredUsername = filter_var($username, FILTER_SANITIZE_STRING); $filteredPassword = filter_var($password, FILTER_SANITIZE_STRING); // 执行查询操作... } else { // 用户名和密码不能为空 echo "用户名和密码不能为空。"; }
上の例では、FILTER_SANITIZE_STRING
フィルターを使用してユーザー入力を削除しました。に不正な文字が含まれています。このようにして、ユーザーが悪意のある SQL コードを入力した場合でも、そのコードは自動的に削除またはエスケープされるため、アプリケーションは SQL インジェクション攻撃から保護されます。
要約すると、SQL インジェクション攻撃を防ぐことは、アプリケーションのセキュリティを確保するための重要な手順の 1 つです。パラメータ化されたクエリの使用、入力のフィルタリングと検証、データベース権限の最小限化、アプリケーションとデータベースの定期的な更新と保守によって、SQL インジェクション攻撃を効果的に防ぐことができます。同時に、最新のセキュリティ上の脅威や脆弱性を常に監視し、タイムリーに適切な対応策を講じる必要があります。
以上がPHP プログラミングのヒント: SQL インジェクション攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。