現在の位置: ホーム> 最新記事一覧> htmlspecialchars()を組み合わせてHTMLセーフデータを出力します

htmlspecialchars()を組み合わせてHTMLセーフデータを出力します

M66 2025-05-28

データベースクエリを実行し、PHPとMySQLIを使用してHTMLページにデータを出力する場合、XSS(クロスサイトスクリプト攻撃)の脆弱性を回避するように注意する必要があります。このタイプの脆弱性は通常、データベース内のコンテンツをエスケープやフィルタリングなしでWebページに直接出力するときに発生します。

コンテンツを安全に出力するために、 htmlspecialchars()は非常に便利なツールです。 HTMLの特殊文字( <>&&& "など)をHTMLエンティティに変換し、悪意のあるスクリプトがページに注入されるのを防ぎます。MySQLI_RESULTオブジェクトと組み合わせて、データベースクエリの結果を取得すると、コンテンツを安全に表示できます。

htmlspecialchars()mysqli_resultを使用する方法を示す具体的な例を以下に示します。

 <?php
// データベース接続
$mysqli = new mysqli("localhost", "username", "password", "database");

// 接続を確認してください
if ($mysqli->connect_errno) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

// クエリを実行します
$sql = "SELECT id, title, content FROM articles";
$result = $mysqli->query($sql);

if ($result && $result->num_rows > 0) {
    echo "<h1>記事リスト</h1>";
    echo "<ul>";
    while ($row = $result->fetch_assoc()) {
        // 使用 htmlspecialchars 脱出出力
        $title = htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8');
        $content = htmlspecialchars($row['content'], ENT_QUOTES, 'UTF-8');

        // 記事に詳細なリンクがあるとします
        $articleUrl = "https://m66.net/article.php?id=" . urlencode($row['id']);

        echo "<li>";
        echo "<a href=\"$articleUrl\">$title</a><br>";
        echo "<p>$content</p>";
        echo "</li>";
    }
    echo "</ul>";
} else {
    echo "記事は見つかりませんでした。";
}

// 接続を閉じます
$mysqli->close();
?>

キーポイント説明

  1. htmlspecialchars()を使用します

    • ENT_QUOTESパラメーターは、単一の引用符と二重引用符の両方が逃げられることを保証します。

    • 「UTF-8」は、エンコードによって引き起こされる問題を回避するために、文字エンコードを指定します。

  2. URLを構築するときにurlencode()を使用します
    URLにパラメーターを挿入する必要がある場合は、 urlencode()を使用して、特殊文字がURL構造にダメージを与えないようにしてください。

  3. HTML <br>では、未処理のデータを直接スプライスしないでください データベースフィールドの値の直接出力は非常に危険であり、適切に処理する必要があります。

要約します

実際のプロジェクトでは、すべてのデータ出力をブラウザに逃れる習慣を開発することは、セキュリティ開発の基本的な要件です。 mysqli_resulthtmlspecialchars()のクエリ結果を組み合わせて、ほとんどのXSS攻撃を効果的に防止し、Webサイトとユーザーのセキュリティを確保することができます。

出力関数のカプセル化やテンプレートエンジンの使用など、さらに最適化する必要がある部品がある場合は、それらを整理することもできます。より完全なパッケージの例を書いてほしいですか?

  • 関連タグ:

    HTML