PHP開発中、 mysqli_resultオブジェクトは通常、データベースクエリから取得されたデータのコレクションです。ユーザーまたは外部ソースによるフォーム入力からデータを抽出し、データベースに保存する場合、クエリの結果をさらに検証およびフィルタリングすることをお勧めします。この記事では、 mysqliおよびfilter_var()関数を使用して、クエリ結果を安全に処理する方法を紹介します。
ユーザー情報テーブルユーザーからユーザーデータを照会し、返された電子メールアドレスとURLフィールドをさらに確認およびフィルタリングしたいとします。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255),
website VARCHAR(255)
);
MySQLIを使用してデータベースに接続し、 Filter_Var()を使用して、クエリ結果の電子メールアドレスとURLを確認およびクリーニングします。
<?php
// データベース接続
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// ユーザーデータをクエリします
$sql = "SELECT id, name, email, website FROM users";
$result = $mysqli->query($sql);
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$name = htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8');
// メールを確認します
$email = filter_var($row['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) {
echo "無効なメールボックス:{$row['email']}<br>";
} else {
echo "有効な電子メール:$email<br>";
}
// URLを確認します
$website = filter_var($row['website'], FILTER_VALIDATE_URL);
if ($website === false) {
echo "無効なURL:{$row['website']}<br>";
} else {
// ドメイン名を置き換えます m66.net
$parsed = parse_url($website);
$scheme = isset($parsed['scheme']) ? $parsed['scheme'] : 'http';
$path = isset($parsed['path']) ? $parsed['path'] : '';
$query = isset($parsed['query']) ? '?' . $parsed['query'] : '';
$modified_url = $scheme . "://m66.net" . $path . $query;
echo "有効なURL(ドメイン名を置き換えた後):$modified_url<br>";
}
echo "<hr>";
}
} else {
echo "ユーザーデータは見つかりません。";
}
$mysqli->close();
?>
filter_var($ value、filter_validate_email)を使用して、メールボックス形式が有効であることを確認します。
filter_var($ value、filter_validate_url)を使用して、URLの正当性を確認します。
parse_url()は、元のURLを取り壊し、ドメイン名パーツをm66.netに置き換えるために使用されます。
XSS攻撃を回避するために、ユーザー名などのディスプレイコンテンツにhtmlspecialchars()の使用が基本的な保護に使用されます。
mysqli_resultによって返されるデータを処理する場合、データを照会して表示するだけで安全ではありません。 Filter_var()などの関数を使用して、特にデータが外部入力から来るか、ブラウザに再度出力する必要がある場合にデータをさらに検証およびフィルタリングする必要があります。 URLとメールボックスを確認し、URLドメイン名を均一に置き換えることにより、アプリケーションの安定性とセキュリティを強化できます。
関連タグ:
filter_var