PHP 開発では、関数の安全性を確保することが重要です。この記事では、開発者がより安全で信頼性の高い PHP コードを作成できるようにするための重要な改善点をいくつか紹介します。
型ヒントは、関数に渡されるパラメーターが正しい型であることを保証し、予期しないデータ型によって引き起こされるエラーを防ぎ、潜在的なセキュリティ リスクを軽減します。
function add($a, $b): int
{
return $a + $b;
}
// 引き起こします TypeError 異常な
add('1', 2);
SQL インジェクションは一般的なセキュリティ問題であり、攻撃者は悪意のある SQL ステートメントをインジェクトすることで機密データを取得する可能性があります。パラメータ化されたクエリを使用すると、SQL インジェクションを効果的に防ぐことができます。
$statement = $conn->prepare("SELECT * FROM users WHERE username = ?");
$statement->bind_param("s", $username);
XSS 攻撃は通常、悪意のあるスクリプトを Web ページに挿入することによって実行されます。 HTML エンコーディングを使用してユーザー データを安全に出力し、スクリプトの実行を回避します。
function echoHtml($html)
{
echo htmlspecialchars($html);
}
ユーザー入力には、悪意のあるコードやその他の攻撃ベクトルが含まれる可能性があります。不正なデータがシステムに侵入するのを防ぐために、使用前に厳密な検証を実行する必要があります。
if (!preg_match('/^[a-zA-Z0-9]+$/', $input)) {
throw new InvalidArgumentException();
}
PHP は、PasswordHash、Crypto など、ハッシュ値を安全に生成し、機密データを暗号化および復号化するために使用できるさまざまなセキュリティ ライブラリを提供します。
$hash = password_hash($password, PASSWORD_DEFAULT);
ユーザー入力を処理して SQL ステートメントを生成する関数があるとします。
function generateSql($id)
{
return "SELECT * FROM users WHERE id = $id";
}
セキュリティを向上させるために、次の改善を行うことができます。
function generateSql($id): string
{
$statement = $conn->prepare("SELECT * FROM users WHERE id = ?");
$statement->bind_param("i", $id);
return $statement;
}
これらの対策により、PHP 機能のセキュリティが大幅に向上し、アプリケーション攻撃のリスクを軽減できます。