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

CSP (Contents Security Policy) の記述例

目次記述例メモその他のメモ参考 記述例 デフォルト設定の記述をする(HTTPレスポンスヘッダの出力)。 同一オリジンも含めて全てのソース1からの読み込みを禁止する場合 Content-Security …

Web Security

WebサイトのHTTPS(SSL)化には Upgrade-Insecure-Requests を使いましょう

目次はじめに原理方法1方法2方法1の設定方法Apacheでの設定Nginx での設定ブラウザの対応状況参考 はじめに せっかくSSLサーバー証明書をとって、Webサイトを SSL化したのに、コンテンツ …

no image

パス名パラメータの未チェック/ディレクトリ・トラバーサル by IPA「安全なウェブサイトの作り方 第7版」

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構の、「パス名パラメータの未チェック/ディレクトリ・トラバーサル」から一部抜粋する。(この資料はPDFでしか提供されていない) …

Web Security

CSP (Contents Security Policy) の記述例その2

CSP (Contents Security Policy) の記述例その2です。

no image

セキュリティに関連するリンク集

情報は随時追加します。 目次毎日チェックするとよいウェブページ一般Webアプリケーション関連WordPress関連インシデント 毎日チェックするとよいウェブページ IPA 独立行政法人 情報処理推進機 …