Web開発では、XSS(クロスサイトスクリプト攻撃)は一般的で危険なセキュリティの脆弱性です。悪意のあるスクリプトコードを注入することにより、攻撃者は、Webページを閲覧するときに攻撃者によって設計されたコードを実行することができます。 XSS攻撃を防ぐために、開発者はユーザー入力または動的コンテンツを厳密にフィルタリングおよびエスケープする必要があります。
この記事では、ユーザー入力の安全な交換と出力を実現し、XSS攻撃を保護する目的を達成し、交換操作の前に安全な取り扱いを行うために、PHPでMB_EREGI_REPLACE( )関数を使用する方法を紹介します。
XSS攻撃は主にブラウザ側で発生します。攻撃者は悪意のあるスクリプトをページに埋め込み、ブラウザが実行された後に攻撃につながります。保護の鍵は、ユーザーの入力コンテンツのフィルタリングと脱出にあります。
フィルター:危険なタグ、プロパティ、スクリプトを削除または交換します。
エスケープ:ブラウザがコードとして実行されないようにするために、特別なHTML文字をエンティティに逃がします。
PHPのHTMLSPECIALCHARS()関数は、XSSを防ぐための一般的な方法です。 <> "'&に対応するHTMLエンティティなどの文字を変換するため、ブラウザはコードを実行する代わりにプレーンテキストに表示します。
MB_EREGI_REPLACE()は、PHPのマルチバイト文字列の安全な通常の交換機能です。これは、症例感受性のある通常のマッチングをサポートし、中国語などのマルチバイトキャラクターを含む文字列を処理するのに適しています。
文法:
mb_eregi_replace($pattern, $replacement, $string);
文字列の敏感な単語や危険なコンテンツに合わせて交換するために使用でき、コンテンツフィルタリングのための強力なツールです。
最初にhtmlspecialchars()を使用して、入力文字列<br>を逃がします これにより、悪意のあるHTMLまたはJSコードがブラウザによって直接実行されるのを防ぎます。
次に、mb_eregi_replace()を使用して、敏感な単語または危険なタグをフィルタリングまたは交換します<br> たとえば、 <script>タグを安全なテキストに置き換えて、残留攻撃スクリプトを避けます。
注射を防ぐために、安全な処理後に内容物を出力します。
<?php
// ユーザー入力コンテンツ,悪意のあるスクリプトが含まれる場合があります
$input = '<script>alert("XSS攻撃")</script><b>通常のテキスト</b>';
// 最初のステップ:最初に脱出しますHTML特殊文字,ブラウザがスクリプトの実行を防ぎます
$safe_input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// ステップ2:敏感な単語またはタグを交換します,ここ<script>例として,置き換えます“[禁止されたタグ]”
$pattern = '<script.*?>.*?</script>';
$replacement = '[禁止されたタグ]';
// 使用mb_eregi_replace敏感なタグを交換します,ケースを無視します
$filtered_input = mb_eregi_replace($pattern, $replacement, $safe_input);
// 処理されたコンテンツを出力します
echo $filtered_input;
?>
htmlspecialchars()は、スクリプトの実行を防ぐために< 、 >などのシンボルをエンティティに逃がします。
MB_EREGI_REPLACE()は、 <script>タグを一致させるために使用され、ケースを無視してプロンプトテキストに置き換えます。
これにより、入力に複雑なケースの混合タグが含まれていても、安全にフィルタリングできます。
交換中の正規表現は、バイパスを防ぐのに十分なほど厳格でなければなりません。
フィルタリングは全能ではなく、ホワイトリストのポリシーとコンテンツセキュリティポリシー(CSP)を組み合わせるのにより効果的です。
異なる環境の出力(HTML、JavaScript、URLなど)は、対応するセキュリティエスケープを実行する必要があります。
MB_EREGI_REPLACE()は、マルチバイト環境に適しており、文字化けコードを回避します。
htmlspecialchars()を使用してユーザー入力を最初に逃げ、次に悪意のあるスクリプトタグをmb_eregi_replace()関数に置き換えることにより、PHPアプリケーションのXSS保護機能を効果的に改善できます。実際のプロジェクトでは、このような多層セキュリティ処理は、セキュリティリスクを大幅に削減し、ユーザーデータとシステムセキュリティを保護することができます。
サンプルコードに関係するサンプルURLドメイン名:
$url = "https://m66.net/path/to/resource";
echo "<a href=\"$url\">安全なリンク</a>";