PHP および CGI のセキュリティ保護対策: ハッカーによる Web サイトの攻撃を防ぐ方法
インターネットの普及と発展に伴い、Web サイトのセキュリティ問題はますます注目を集めています。一般的に使用されているWebプログラミング言語であるPHPやCGIも、ハッカーの攻撃を防ぐためにセキュリティ対策を強化する必要があります。この記事では、PHP と CGI のセキュリティ保護対策をいくつか紹介し、対応するコード例を示します。
ユーザー入力はハッカーにとって最も脆弱な部分であり、ユーザー入力を検証してフィルタリングすることで、攻撃を受けるリスクを大幅に軽減できます。一般的なユーザー入力検証コードの例をいくつか示します。
1.1. 文字列入力の場合、フィルター関数を使用してユーザー入力をフィルターし、一般的なインジェクション攻撃を防ぐことができます。
サンプル コード:
$input = $_GET['input']; $filteredInput = filter_var($input, FILTER_SANITIZE_STRING);
1.2. 数値入力の場合、is_numeric() 関数を使用して、入力が有効な数値であることを確認できます。
サンプルコード:
$input = $_GET['input']; if(!is_numeric($input)){ die("Invalid input"); }
1.3. メールアドレスやURLなど特定の形式での入力の場合、正規表現による検証が可能です。
サンプルコード:
$email = $_GET['email']; if(!preg_match("/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/", $email)){ die("Invalid email"); }
パスワードはユーザーアカウントの重要な保護であり、パスワードのセキュリティを向上させるために何らかの対策を講じる必要があります。 。
2.1. パスワード ハッシュ関数を使用する
ユーザー パスワードを保存するときは、ユーザー パスワードのセキュリティを保護するために、ハッシュ関数を使用してパスワードを暗号化して保存する必要があります。
サンプルコード:
$password = $_POST['password']; $hashedPassword = password_hash($password, PASSWORD_DEFAULT); // 存储 $hashedPassword 到数据库
2.2. パスワード強度要件
パスワードの長さ、複雑さなどのパスワード強度要件を設定して、安全なパスワードを設定するようユーザーに思い出させます。
サンプル コード:
$password = $_POST['password']; if(strlen($password) < 8){ die("密码长度至少为8位"); }
ファイル アップロード機能は Web サイトの一般的な機能の 1 つですが、潜在的なセキュリティ リスクでもあります。ここでは一般的なセキュリティ対策をいくつか紹介します。
3.1. ファイル タイプの検証
悪意のあるファイルのアップロードを回避するために、ファイル拡張子または MIME タイプをチェックしてファイルの正当性を検証します。
サンプルコード:
$file = $_FILES['file']; $allowedExtensions = ['jpg', 'png', 'gif']; $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif']; if(!in_array(pathinfo($file['name'], PATHINFO_EXTENSION), $allowedExtensions) || !in_array($file['type'], $allowedMimeTypes)){ die("不允许上传该类型的文件"); }
3.2. ファイル保存パスのセキュリティ
ファイルパス漏洩によるセキュリティ問題を避けるため、アップロード後にファイルが保存されるパスが安全であることを確認してください。
サンプルコード:
$savePath = '/path/to/save'; $filename = uniqid().'.jpg'; // 使用唯一的文件名 move_uploaded_file($_FILES['file']['tmp_name'], $savePath.'/'.$filename);
SQL インジェクション攻撃は一般的な攻撃手法の 1 つであり、SQL インジェクションを防ぐための一般的な対策は次のとおりです。
4.1. プリペアド ステートメントを使用する
プリペアド ステートメントを使用してパラメータをバインドし、SQL インジェクション攻撃を防ぎます。
サンプル コード:
$username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->execute([':username' => $username, ':password' => $password]);
4.2. パラメーター化されたクエリを使用する
パラメーター化されたクエリを使用して、ユーザー入力をパラメーターとしてデータベース クエリ ステートメントに渡し、SQL インジェクション攻撃を防ぎます。
サンプル コード:
$username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $password]);
要約すると、ユーザー入力の検証、パスワード セキュリティ、ファイル アップロードのセキュリティ、SQL インジェクション攻撃の防止などの一連のセキュリティ保護手段を通じて、Web サイトのセキュリティを確保できます。大幅に改善され、ハッカーによる攻撃のリスクが軽減されます。開発プロセスでは、Web サイトとユーザーの情報セキュリティを保護するために、これらの側面にさらに注意を払う必要があります。
以上がPHP・CGIのセキュリティ対策:Webサイトのハッキングを防ぐにはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。