ホームページ > バックエンド開発 > PHP8 > PHP 8のクロスサイトスクリプト(XSS)から保護する方法は?

PHP 8のクロスサイトスクリプト(XSS)から保護する方法は?

Robert Michael Kim
リリース: 2025-03-10 17:52:57
オリジナル
569 人が閲覧しました

PHP 8?

のクロスサイトスクリプト(XSS)から保護する方法PHP 8のクロスサイトスクリプト(XSS)から保護するには、入力検証、出力エンコード、および安全なHTTPヘッダーに焦点を当てた多層アプローチが必要です。単に単一のテクニックに依存するだけでは不十分であることを理解することが重要です。堅牢な防御は、いくつかの戦略を組み合わせる必要があります。コアの原則は、すべてのユーザーがサポートしたデータを信頼されていないものとして扱い、ユーザーに表示するか、データベースクエリで使用する前にサニタイズすることです。

これには、いくつかの重要なステップが含まれます。 filter_var()などの関数を使用して、有効な電子メールアドレス、URL、番号などを確認します。これにより、悪意のあるスクリプトが送信されなくなります。正規表現は、より複雑な検証ニーズにも使用できますが、過度に複雑なパターンを伴う潜在的なパフォーマンスへの影響に注意してください。

  • 出力エンコード:これは最も重要なステップです。適切にエンコードせずに、ユーザーがサプリしたデータを直接エコーしたり印刷したりしないでください。エンコードメソッドはコンテキストに依存します:

    • HTMLコンテキスト: htmlspecialchars()を使用して( ent_quotes | ent_html5 & " および 'にHTMLエンティティに。これにより、ブラウザがそれらをHTMLタグまたは属性として解釈することを防ぎます。例:
     <code class="php"> $ userinput = $ _get ['username']; $ SAFEUSNAME = HTMLSPECIALCHARS($ userInput、ent_quotes | ent_html5、 'utf-8'); echo&quot;&lt; p&gt;歓迎、&quot; 。 $ SAFEUSNAME。 &quot;これは、JSON応答を扱うときに特に重要です。</code>
    ログイン後にコピー
  • 属性コンテキスト: html属性にデータを挿入する場合は、 htmlspecialchars()を使用しますが、属性値への注入を防ぐことに特に注意してください。これをより安全に処理するためにテンプレートエンジンを使用してください。間違った脱出関数を使用すると、脆弱性につながる可能性があります。特定のコンテキスト(HTML、JavaScript、CSSなど)に適したエンコードメソッドを常に選択します。 htmlspecialchars()(必要に応じて json_encode()とともに)ユーザー入力を消毒するための強力な基盤を提供します。 filter_validate_email filter_validate_url filter_sanitize_string )。最初の検証には、データが予想される形式に適合していることを確認するのに役立ちます。 HTMLにユーザーがサプリしたデータを表示するときは、必ず使用してください。 ent_quotes |を指定することを忘れないでくださいent_html5 フラグと正しい文字エンコード(通常は 'utf-8')。安全なJSON表現のために特殊文字を自動的に逃がします。 (csp):このヘッダーを使用すると、ブラウザがロードできるリソースを制御するポリシーを定義し、不信感のあるソースから悪意のあるスクリプトをロードするリスクを減らします。よく構成されているCSPヘッダーは非常に効果的です。例:
  •  <code> content-security-policy:default-src 'self'; Script-SRC 'self' '安全でないインライン' '危険な平均'; IMG-SRC「自己」データ:; style-src 'self' </code> 
    ログイン後にコピー
    • x-xss-protection このヘッダーは、ブラウザに内蔵のXSSフィルタリングを有効にするようにブラウザに指示します。ただし、このヘッダーのみに依存することは推奨されません。
    • x-frame-options このヘッダーは、攻撃者が悪意のあるサイトにiframeにウェブサイトを埋め込むクリックジャック攻撃を防ぐのに役立ちます。 x-frame-options:sameorigin を使用して、同じ原点からのみ埋め込むことを許可します。 referrer-policy:strict-origin-when-cross-origin またはより制限的なポリシーを使用することを検討してください。

    これらのヘッダーの実装は、通常、Webサーバー構成を介して行われます(例えば、apacheの .htaccess code> fileまたはnginx configurationを使用して、php code in your web codeを使用して使用する場合(該当する)。準備されたステートメントはXSSを直接​​防止しませんが、攻撃者が間接的にXSSにつながる可能性のある悪意のあるSQLコードを注入することを妨げます。攻撃者がデータベースからデータを取得し、そのデータに悪意のあるスクリプトが含まれているコードを挿入した場合、準備されたステートメントはその direct XSSから保護しません。ただし、攻撃者がSQLクエリ自体を操作するのを停止します。

    準備ステートメントを効果的に使用する方法は次のとおりです。これにより、データがSQLコードから分離され、SQLインジェクションが防止されます。

  • PDO(PHPデータオブジェクト):準備されたステートメントの組み込みサポートを提供するため、データベースインタラクションにPDOを使用します。
  • 例:
  • $ pdo-&gt; prepare(&quot; select * from users where username =?&quot;); $ stmt-&gt; execute([$ username]); $ user = $ stmt-&gt; fetch(pdo :: fetch_assoc); //データを取得した後でも、データを表示する前に常に出力を消毒してください! $ SAFEUSNAME = HTMLSPECIALCHARS($ user ['username']、ent_quotes | ent_html5、 'utf-8'); echo&quot;&lt; p&gt;歓迎、&quot; 。 $ SAFEUSNAME。 &Quot;準備されたステートメントはSQL注入から保護しますが、出力エンコードはXSSから保護します。彼らは協力して包括的なセキュリティを提供します。

    以上がPHP 8のクロスサイトスクリプト(XSS)から保護する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート