ホームページ  >  記事  >  バックエンド開発  >  PHP開発におけるSQLインジェクション攻撃を防ぐ方法

PHP開発におけるSQLインジェクション攻撃を防ぐ方法

WBOY
WBOYオリジナル
2023-06-27 20:53:371267ブラウズ

PHP 開発で SQL インジェクション攻撃を防ぐ方法

SQL インジェクション攻撃とは、Web アプリケーションで SQL ステートメントを動的に構築し、データベース上でこれらの SQL ステートメントを実行することを指し、攻撃者が悪意のある操作を実行できるようにします。機密データを取得する方法。この攻撃手法に対して、開発者は Web アプリケーションのセキュリティを確保するための保護措置を講じる必要があります。この記事では、PHP開発におけるSQLインジェクション攻撃を防ぐ方法を紹介します。

  1. パラメータ バインディング

PHP では、PDO または mysqli 拡張ライブラリを使用してパラメータ バインドを実装し、SQL ステートメントと入力パラメータを個別に実行できます。この方法により、パラメータに SQL 例外文字やステートメントが含まれることを防ぎ、内部 SQL インジェクション攻撃を回避できます。

PDO を例にとると、コードは次のとおりです。

//准备SQL语句
$sql = "SELECT name, age, email FROM user WHERE id = :id AND age > :age";
$stmt = $pdo->prepare($sql);
 
//绑定参数
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
 
//执行查询语句
$stmt->execute();
  1. 文字列エスケープ

ユーザー入力データをデータベースに保存する前に、次のことが必要です。エスケープ関数を使用して文字列をエスケープします。 PHP では、mysql_real_escape_string() 関数と mysqli_real_escape_string() 関数でエスケープを実現できます。この方法は低レベルの予防策であり、他のより安全な保護策と組み合わせて使用​​することをお勧めします。

コード例:

//获取用户输入
$username = $_POST['username'];
$password = $_POST['password'];

//转义字符串
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

//准备SQL,然后查询
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
mysql_query($sql);
  1. 入力チェック

入力チェックとは、入力が正当で期待を満たしていることを確認するために入力パラメータをフィルタリングおよび検証することを指します。そしてフォーマットします。このアプローチにより、潜在的な SQL インジェクションの脆弱性が回避されます。たとえば、クエリのパラメータが数値の場合、is_numeric() 関数を使用して、それが数値であるかどうかを確認できます。クエリのパラメータが文字列の場合、 ctype_alpha() 関数を使用して、文字のみが含まれているかどうかを確認できます。

//对用户输入进行检查
if (is_numeric($_GET['id'])) {
    $id = $_GET['id'];
    
    //查询数据库
    $sql = "SELECT * FROM users WHERE id = $id";
    mysql_query($sql);
}
  1. データベース権限制御

Web アプリケーションを開発する場合、特定のアカウントと権限を使用してデータベースに接続できます。アカウントと権限を設定するときは、必要なデータと操作のみが許可されるように慎重に検討する必要があります。たとえば、読み取り専用アカウントは INSERT、UPDATE、DELETE 操作を実行できないため、SQL インジェクション攻撃のリスクが大幅に軽減されます。

概要:

この記事では、PHP 開発における SQL インジェクション攻撃を防ぐ 4 つの方法 (パラメーター バインド、文字列エスケープ、入力チェック、データベース アクセス許可制御など) を紹介します。開発者は、アプリケーションのシナリオと Web アプリケーションのセキュリティを確保する必要性に基づいて、適切な保護手段を選択する必要があります。同時に、PHPのバージョンアップやデータベースソフトウェアの適時更新もSQLインジェクション攻撃を防ぐ有効な手段となります。

以上がPHP開発におけるSQLインジェクション攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。