2

ユーザーがメッセージを追加できるフォームがあるため、フォームのセキュリティに関する記事を読んでいました。

strip_tags()htmlspecialchars()およびを使用するのが最適であると読みましたnl2br()。他のどこかで を使用すると言われていますhtml_entity_decode()

ユーザー入力を受け取るページにこのコードがあります

<?php 
    $topicmessage = check_input($_POST['message']); //protect against SQLinjection
    $topicmessage = strip_tags($topicmessage, "<p><a><span>");
    $topicmessage = htmlspecialchars($topicmessage);
    $topicmessage = nl2br($topicmessage);
?>

しかし、メッセージをエコーすると、すべてが1行になり、改行がによって削除され、strip_tags元に戻されないように見えnl2br()ます。

ブレークが削除された場合、それをどこに戻すか (またはそれを行うか) をどのように知るのでしょうか?

とにかく、フォームでjavascriptを使用するなど、サイトをハッキングしようとするためにフォームを保護できる方法を探しています。

4

3 に答える 3

9

次の 2 つの選択肢があります。

  1. HTML は絶対に許可しないでください。許可されていないタグで使用するか、そこにあるタグをエスケープするために使用strip_tags()します。htmlspecialchars()

  2. HTML を許可しますが、HTML をサニタイズする必要があります。これは でできることではありませんstrip_tags。ライブラリを使用する(HTMLPurifierなど)...

于 2010-08-13T15:39:26.677 に答える
0

フォームのコンテンツを印刷する前に htmlspecialchars が必要であり、SQL に投稿する前に mysql_real_escape が必要です (印刷する前には必要ありません)。

タグを貼り付ける方法は非常に危険です。制限された属性を持つ許可されたタグの短いリストが必要です。これは 1 行で実行できるものではありません。Tidy などの HTML ノーマライザーを調べるとよいでしょう。

于 2010-08-13T15:36:05.513 に答える
-1
  • html-input にHTML Purifierを使用し、必要のないものすべて (段落以外のすべて、すべてのアンカーなど) を取り除きます。

関係ないが重要:

于 2010-08-13T15:46:52.367 に答える