1

私はアプリケーションを開発しており、セキュリティ対策の実装について読んでいます。フォーム要素を自動的に生成するクラスを設定し、クラスは html 内に php 文字列変数を埋め込んでフィールドを作成します。ただし、htmlspecialchars() を実装するときに必要ではないことに気付きました。だから私は疑似悪意を持ってこれを変えようとしています:

<input type="text" name="email">... rest of html

の中へ:

<input type="text" name="email"><br><br>

ただし、htmlspecialchars() を使用する前後の両方で、フロントエンド html を編集しようとすると、ブラウザから次のように表示されます。

<input type="text&quot; name=&quot;email&quot;&gt;&lt;br&gt;&lt;br&gt;

これは自動的に実装されるものですか?もしそうなら、これは PHP の更新によるものですか (私はそれが PHP 5.4 の更新であることを発見したと思いました)?

さらに、htmlspecialchars() の使用を放棄できますか?

ありがとうございました!

編集:より多くの情報が要求されました

$this->type = 'text' //what I would normally use
$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html
$output = "<input type='$this->type' name='$this->name'";
$output .= ... close the tag, etc.
echo $output;
4

2 に答える 2

4

何らかのテキストを取り、それを文字列として HTML に挿入するときはいつでも を使用するhtmlspecialchars必要があります (テキストに HTML で特別な意味を持つ文字が含まれていないことがわかっている場合を除きますが、その場合でも を使用htmlspecialcharsすることは良い習慣です)。 .

不特定のコードを実行してからブラウザのパーサー(エラー回復機能付き)を実行すると、不特定の入力がその出力を与える理由を説明できません。


質問が更新された後:

$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html
$output = "<input type='$this->type' name='$this->name'";

属性値は文字で区切られてい'ます。データには文字が含まれていない'ため、属性値を終了してエスケープすることはありません。

于 2013-07-12T06:01:35.320 に答える