0

私の理解では、すべての変数はビューで htmlspecialchars() を介して出力する必要があります。

各ビューの適切な行ごとに関数を指定することなく、これを行うためのアプローチや方法はありますか?

私が思いついた最善の方法は、次のようなヘルパー関数を使用することです: function html_escape($var)

function h($var)
{
  if (is_array($var))
  {
    return array_map('h', $var);
  }
  else
  {
    return htmlspecialchars($var, ENT_QUOTES, 'UTF8');
  }
}

しかし、それでも...これは非常に退屈になる可能性があります!

何か案は?

4

3 に答える 3

2

h()エスケープされたデータを返すのではなく、関数が出力するようにすることもできます。したがって、書く代わりに と書く<?php echo h($myvar); ?>こともできます<?php h($myvar); ?>。これは、エンティティに変換せずに変数をエコーするよりも 2 文字短くなりました。

于 2011-10-18T22:14:07.637 に答える
1

すべての変数を htmlentities/htmlspecialchars で実行する必要があるわけではないことに注意することは重要です。任意のコードが含まれるのを防ぐために、ルールセットに対してまだフィルタリングされていないユーザー提供のコンテンツを含むものだけです。

ヘルパー関数を作成してタイピングをわずかに減らすか、コントローラーの htmlentities/htmlspecialchars を介してすべてのユーザー入力をループしてからビューに渡すことができます (ただし、すべてのピースである可能性は低いため、これは効率が低下する可能性があります)。のユーザー入力が表示されます)

于 2011-10-18T22:11:05.680 に答える
0

あなたがそこに持っているのは、おそらく、さまざまな状況で簡単に逃げることができる最も近いものです.

$_GET個人的には、変数に小さなループを使用します。html 出力で変数を使用することがわかっている場合は、これを実行します。

<?php
foreach($_GET as $key => $value) {
  $_GET[$key] = htmlspecialchars($value);
}
?>

次に、すぐに html タグを開始します。

ただし、ユーザーが何らかの影響を与えない限り、すべてをエスケープする必要はありません。

さらにescape.php、$_GET、$_POST、$_COOKIE など、使用する一般的な変数に対して上記のメソッドを使用する というスクリプトを作成し、それinclude('escape.php')を HTML 出力で使用する前にスクリプトで使用することもできます。

それはすべて、あなたの好みとプロジェクトに必要なものに大きく依存します。

于 2011-10-18T22:15:25.883 に答える