PHP 関数のセキュリティを確保する方法: 入力を検証する (filter_var()、filter_input()、ctype_* 関数) 型ヒントを使用する (関数パラメーターと戻り値の型を指定する) パラメーター バインディングを使用する (SQL インジェクションを防ぐ) 使用上の危険を回避する関数 (eval()、system())
PHP 関数のセキュリティを向上させる方法
PHP では、関数は以下を提供します。再利用可能なコードをカプセル化して整理する方法。悪意のある入力によって引き起こされるセキュリティの脆弱性を防ぐためには、機能のセキュリティを確保することが重要です。 PHP 関数のセキュリティを向上させる方法は次のとおりです。
1. 入力の検証
入力検証では、ユーザーまたは外部ソースによって提供された入力が正しいかどうかを確認します。期待される形式に準拠しています 値を合計するための重要なステップ。 PHP は、入力検証用に次の関数を提供します。
filter_var()
: データのフィルタリングと検証に使用されます。 filter_input()
: filter_var()
と似ていますが、$_GET
、$_POST
、# から使用できます。 ##$_COOKIE や
$_SERVER などのスーパー グローバル変数から入力を取得します。
関数:
ctype_digital() や
ctype_alpha() などの入力タイプをチェックするために使用されます。
コード例:
function validate_input($input) { if (!filter_var($input, FILTER_VALIDATE_INT)) { throw new Exception("Input must be an integer."); } }
2. 型ヒントの使用
型ヒントは関数のパラメーターを指定し、コード型の安全性を強化するために、期待される値の型を指定します。これにより、型チェックされていない入力が減り、セキュリティが向上します。コード例:
function sum(int $a, int $b): int { return $a + $b; }
3. パラメーター バインディングの使用
信頼できないソースからのデータを処理する場合、パラメーター バインディングを使用します。重要な。ユーザー データをパラメータとしてクエリ ステートメントにバインドし、SQL インジェクション攻撃を防ぎます。 PHP は、パラメータ バインディングを実行するためのPDO (PHP Data Objects) ライブラリを提供します。
コード例:
$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username"); $stmt->bindParam(':username', $username); $stmt->execute();
4. 機密性の高い関数の使用を避ける
一部の PHP 関数は「危険」と見なされます。任意のコードまたはそこに含まれるファイルの実行を許可する可能性があります。次の関数の使用は避けてください:
実用的なケース:
ユーザーから入力されたユーザー名とパスワードを検証する必要があるユーザー登録機能があるとします。関数のセキュリティを向上させるために、上で説明した手法を使用できます。コード例:
function register_user(string $username, string $password) { // 验证输入 if (!filter_var($username, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => "/^[a-zA-Z0-9_-]+$/")))) { throw new Exception("Username must contain only letters, numbers, underscores, and dashes."); } if (strlen($password) < 8) { throw new Exception("Password must be at least 8 characters."); } // 使用参数绑定防止 SQL 注入 $conn = new PDO(/* ... */); $stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); }
以上がPHP 関数のセキュリティを向上するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。