すべての出力部分でh()関数を使用しても大丈夫ですか?

2018年1月24日 at 14:00

ヘルプにサンプルコードがある場合はこれを参考にさせていただいておりますが
http://concrete5-japan.org/help/5-7/recipes/get-site-name/
必要かどうかの判断に自信が持てず、すべての出力部分でh()関数を使用している状況です。
お恥ずかしい限りなのですがこのような方法で問題を生じることはございますでしょうか。

またt()関数と組み合わせる場合はh(t($hoge))で良いのでしょうか。
http://concrete5-japan.org/help/5-7/developer/concepts/localization/

よろしくお願いいたします。


# concrete5 バージョン
8.3.2

# PHP バージョン
7.1.4

# サーバー
エックスサーバー

# クライアント
macOS 10.12 + Firefox 58

タグ:

Re: すべての出力部分でh()関数を使用しても大丈夫ですか?

2018年1月24日 at 14:21
全ての場合で h() 関数を使用する姿勢、大変素晴らしいと思います。サイト名は管理者しか変更できないので h() を使用しないからと言ってすぐに外部からの攻撃に使えるわけではありませんが、そのような判断をせずとも、ヘルプのサンプルで書かれてなくても、h() で常にエスケープすることがセキュリティ的には望ましいでしょう。

テンプレートで h() 関数を使用する限り、問題は起こりません。データベースに保存する際に無害化する用途で使うのはNGですが、おそらくそれはされていないでしょう

翻訳関数と組み合わせる場合は、h(t($hoge)) で合っています。
 

Re: すべての出力部分でh()関数を使用しても大丈夫ですか?

2018年1月24日 at 19:17
hishikawa様

不要なケースでも適用してしまうと、何かしら悪い影響があるのではと考えておりました…安心いたしました。
早々にご回答いただきましてありがとうございました。