0

以下の理由が悪いので、いくつかのxssの脆弱性を防ぐためにhtmlspecialcharsを使用する必要があることがわかります。

<?php $url = '<plaintext>';
echo $url;?>

そのようです:

<?php $url = '<plaintext>';
htmlspecialchars($url, ENT_QUOTES, "UTF-8");
echo $url;?>

私のデータベースには、ユーザーが提供したファイル名のみを保存します。(私がこの主題についてもっと学ぶにつれて、これは変わると確信しています)

しかし、不思議に思うのは、これが実際にXSSから保護するために何かをしているのかどうかです。前のケースに比べて脆弱性は少ないですか?

htmlspecialcharsを使用して、または使用せずにスクリプトタグを挿入しようとしましたが、どちらの場合も何も実行されないようです。スクリプトコードは実行されません。

安全ですか?htmlspecialcharsはその仕事に適したツールですか?どうすればそれを改善できますか?

$ sql ['image']は私のデータベースから取得され、以下は画像を表示するコードです。

<?php $url = "/images/" . $sql['image'] . ".jpg";
$url = htmlspecialchars($url, ENT_QUOTES, "UTF-8");?>
<img src="<?php echo $url;?>">

出力:

<img src="/images/test.jpg">
4

1 に答える 1

1

原則として、ユーザー入力を信頼することはできません。ユーザーによって直接的または間接的に提供される場合$sql['image']は、その文字列の最初と最後に定数を追加してもかまいません。htmlspecialchars()いずれにせよ、スクリプトを挿入できるバグが含まれていないことに依存する必要があります。

この場合、実際にセキュリティを強化するには、もう少し抜本的な対策を講じる必要があります。そのための一般的な方法の1つは、ファイル名を自分で割り当てることです。たとえば、ファイルの内容をハッシュし、元のファイル名の代わりにそのハッシュを使用してファイルを保存します。そのために重宝する傾向がありますmd5()sha1()

また、ユーザーが保存しているファイル名の画像を提供すると仮定すると、それらを使用して作業を完了できないことも確認する必要があります。たとえば、ユーザーはJPEGの代わりにスクリプトが埋め込まれたSVGをアップロードする可能性があります。これにより、ファイル名自体の検証やマングリングを完全に回避できる可能性があります。

于 2013-02-05T09:48:23.657 に答える