PHPでユーザー入力を処理する場合、入力コンテンツが安全であり、予想される形式に沿っていることを確認することが、開発の重要なリンクです。特に、マルチバイトの文字列処理と潜在的なXSS攻撃の防止では、 MB_EREGI_REPLACE()とFilter_Var()の組み合わせは、柔軟で堅牢なソリューションを提供できます。
この記事では、悪いコンテンツの入力を防ぎ、有効なデータを保持するために、これら2つの機能を介してユーザーが提出したデータを効果的にクリーニングおよび交換する方法を示します。
MB_EREGI_REPLACE()は、 eREGI_REPLACE()のマルチバイトバージョンであり、ケースに依存しない通常の交換操作を実行します。 UTF-8エンコーディングをサポートし、中国語またはその他のマルチバイト文字を含む文字列を処理するのに最適です。
mb_eregi_replace(string $pattern, string $replacement, string $string, ?string $options = null): string
filter_var()は、変数を検証およびクリーニングするためにPHPによって提供されるフィルター関数の1つです。電子メール、URL、IP、その他の形式を確認するために使用でき、潜在的に有害なコードスニペットを削除することもできます。
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
ユーザーがサビされたコメントコンテンツを処理すると、次の手順を完了する必要があります。
悪い言葉(「ガベージ」、「詐欺師」など)を交換します。
その中の有効なURLアドレスを確認して保持します。
結果が清潔で安全でユーザーフレンドリーであることを確認してください。
この目標でクリーニングロジックを実装します。
以下は、mb_eregi_replace()とfilter_var()を組み合わせて使用する方法を示す完全な例です。
<?php
// 元のユーザー入力
$input = "あなたはユーザーをゴミ箱にします,すぐに行きなさいm66.net/spam報告!その上m66.net/Scammerページをご覧ください。";
// ブロックするための語彙(中国語をサポートします)
$badWords = ['ごみ', '詐欺'];
// 敏感な単語をアスタリスクに置き換えます
foreach ($badWords as $word) {
$pattern = preg_quote($word, '/');
$input = mb_eregi_replace($pattern, str_repeat('*', mb_strlen($word)), $input);
}
// 抽出するURL確認します,安全なリンクに置き換えます
$input = preg_replace_callback('/(https?:\/\/)?(m66\.net\/[^\s]+)/i', function ($matches) {
$url = 'http://' . $matches[2]; // に追加http検証用のプレフィックス
if (filter_var($url, FILTER_VALIDATE_URL)) {
return '<a href="' . htmlspecialchars($url) . '" target="_blank">' . htmlspecialchars($url) . '</a>';
}
return '';
}, $input);
// 出力結果
echo $input;
?>
ユーザーの入力が次のと仮定します。
あなた**ユーザー,すぐに行きなさい<a href="http://m66.net/spam" target="_blank">http://m66.net/spam</a>報告!その上<a href="http://m66.net/****" target="_blank">http://m66.net/****</a>ページもチェックしてください。
関連タグ:
filter_var