6 に答える
さて、あなたはしなければなりません:
<?php
$content = "</textarea><script>alert('hi!')</script>";
?>
<textarea>
<?php echo $content; ?>
</textarea>
その出力が最初にユーザーまたは信頼できないソース (つまり、コードから直接ではなく) によって提供された場合、XSS 攻撃を防ぐためにサニタイズする必要があります。
ユーザーが出力を編集できるかどうかを考慮する必要があります。そうではなく、それが信頼できる出力である場合 (おそらく、あなたが書いた定義済みのテキストから来ている可能性があります)、明らかにそうではありません。そうでなければはい。HTML 文字の置換はごく普通のことですが、ページが読み取られてユーザーのブラウザーに出力されるときに、以前のすべての文字がそのまま残っているため、心配する必要はありません。
>
サニタイズしない場合は、および<
文字を使用して、他の HTML コードと特定の<script>
Javascript を実行できるタグを挿入できることに注意してください。
はい、消毒する必要があります。htmlspecialchars($str, ENT_QUOTES)
代わりに使用してください。
のコンテンツ内のand<
のすべての出現を常にエスケープします。それ以外の場合は、次のコンテンツ (例) を提供して、テキストエリアを「エスケープ」し、HTML コードを挿入できます。>
<
>
textarea
</textarea><script src="http://malicious.code.is/us.js"></script>
そうしないと、次のコードになる可能性があります。
<textarea id="text"></textarea><script src="http://malicious.code.is/us.js"></script></textarea>
最後の 2 番目</textarea>
は無視され、前のスクリプト タグが実行されます。
使うだけhtmlspecialchars()
では十分ではありません。それでも、特定のマルチバイト文字攻撃ベクトルに対して脆弱なままです(使用している場合でも)htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')
おそらく、 HTMLPurifierのようなライブラリを見て、より完全なソリューションを提供してください。
これは、PHPでのXSS保護のかなり良い要約です。