Security

PHPで baseタグを出力する(RPO対策)

投稿日:

Webページの <head> タグ内に <base>タグを記述すると、Relative Path Overwrite (RPO) 対策になります。

<?php
// HTMLエスケープ関数
function e($html) {
  return htmlspecialchars($html, ENT_QUOTES);
}

// baseとなるURLを $base_url にセットする
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http")
          . "://" . $_SERVER[HTTP_HOST] . dirname($_SERVER['SCRIPT_NAME']) . '/';

?>
<!DOCTYPE html>
<html lang="ja">
  <head>
(省略)
    <base href="<?php echo e($base_url); ?>">
(省略)

このコードだと、例えば

https://example.com/foo/
or
https://example.com/foo/index.html

というURLのWebページがあった場合に、

https://example.com/foo/index.html/bar/baz.html

にアクセスがきても、base の URL は

https://example.com/foo/

になります。

こうなっていれば、HTML内に「CSSファイルやJavaScriptファイルが相対パスで指定されている箇所」があったとしても、正常にそれらのファイルを読み込んでくれるはずです。

参考

Web Security

Relative Path Overwrite (RPO) の動作について

2022.06.06

📂-Security

執筆者:labo


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Web Security

XSS Auditor が有効になっているかチェックするためのページを作りました

目次1. XSS とは?2. XSS を防ぐためのブラウザの機能「XSS Auditor」3. Webブラウザの XSS Auditor 機能が有効かどうか調べる4. 参考 1. XSS とは? XS …

no image

クロスサイト・スクリプティング対策 by IPA「安全なウェブサイトの作り方 第7版」

photo credit: XSS attack on YouTube via photopin (license) 安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構の、「クロスサイ …

ネットワークビギナーのための情報セキュリティハンドブック Ver.2.00 の目次

目次はじめにネットワークビギナーのための情報セキュリティハンドブック Ver.2.00目次プロローグ サイバー攻撃ってなに?第1章 基本のセキュリティ~ステップバイステップでセキュリティを固めよう!~ …

Web

openssl s_client コマンドでウェブサーバーの SSL/TLS 対応状況を診断する

openssl s_client コマンドを使い、ウェブサーバーのSSL/TLS対応状況を診断します。 目次1. OpenSSL について2. openssl s_client コマンドについて以降の …

no image

クリックジャッキング by IPA「安全なウェブサイトの作り方 第7版」

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構の、「クリックジャッキング」から一部抜粋する。(この資料はPDFでしか提供されていない) 目次注意が必要なウェブサイトの特徴根本的解決 …