PHP開発では、URLクエリ文字列の構築は非常に一般的なタスクです。 http_build_query()は、アレイをurlエンコードされたクエリ文字列にすばやく変換する強力なツールです。ただし、実際のアプリケーションでは、通常、ユーザー入力からパラメーターを取得する必要があります。これらの入力を安全に処理するために、 filter_input()は不可欠な関数です。 2つを一緒に使用すると、効率を確保し、XSSや注入などの問題を防ぎながら、安全性を大幅に改善できます。
http_build_query()は配列を取り、それをRFC 3986エンコード形式に適合するURLクエリ文字列に変換します。例えば:
<code> $ params = ['search' => 'php'、 'page' => 2]; $ queryString = http_build_query($ params);
//出力:検索= php&page = 2
</code>
この関数は、クエリ文字列のスプライシングに非常に適しており、パスで使用するとジャンプリンクをすばやく構築できます。
<Code> $ url = 'https://m66.net/search.php?' 。 $ QueryString; </code>ユーザー入力を処理する場合、フィルター処理されていない入力が悪意のあるコンテンツを運ぶ可能性があるため、 $ _GETまたは$ _POSTを直接使用することはできません。 filter_input()は、入力データを取得およびフィルタリングするための標準インターフェイスを提供します。
<code> $ search = filter_input(input_get、 'search'、filter_sanitize_string); $ page = filter_input(input_get、 'page'、filter_validate_int); </code>上記のコードでは、検索パラメーターがプレーンテキストにクリーニングされ、ページパラメーターが整数として検証されます。
ユーザー入力に基づいてリダイレクトリンクを作成する必要があるとします。 URLからパラメーターを抽出し、検証してクリーニングしてから、安全なクエリ文字列にスプライスしたいと考えています。この時点で、これを行うことができます。
<code> $ params = []; $ search = filter_input(input_get、 'search'、filter_sanitize_string);
if($ search!== null && $ search!== false){
$ params ['search'] = $ search;
}
$ page = filter_input(input_get、 'page'、filter_validate_int);
if($ page!== null && $ page!== false){
$ params ['page'] = $ page;
}
$ queryString = http_build_query($ params);
$ redirecturl = ' https://m66.net/results.php ?' 。 $ QueryString;
//リダイレクトを実行します(例、実際の生産環境で確認せずに直接ジャンプしないでください)
ヘッダー( '場所:'。$ redirecturl);
出口;
</code>
このようにして、合法的で安全なパラメーターのみがURLにスプライスされるようにします。
ユーザーが入力した信頼できないコンテンツには、 <script> alert(1)</script>などの悪意のあるスクリプトが含まれる場合があります。 filter_input()とfilter_sanitize_stringおよびfilter_validate_*シリーズを組み合わせることにより、潜在的に危険な文字をフィルタリングしたり、期待を満たしていないデータ型を拒否したりすることで、これらの攻撃が発生しないようにします。
さらに、検証されたパラメーターのみをhttp_build_query()に渡すことにより、注入リスクはさらに減少します。
http_build_query()を使用してクエリ文字列を構築することは便利ですが、前提はパラメーターが完全に検証されていることです。それをfilter_input()と組み合わせると、コードの品質を改善するだけでなく、Webアプリケーションのセキュリティを効果的に改善できます。特に、リンクを生成するためにユーザー入力をスプライスする必要がある場合、この組み合わせ方法は、開発者にとって標準的な実践になるはずです。