2016-11-15 7 views
-2

サイトのあるユーザーから別のユーザーにメッセージを表示しようとしています。メッセージはHTMLとともにデータベースに保存されます。HTMLをリンクとして表示する

HTMLをリンクまたは改行する代わりに、サイトのHTMLが表示されるのはなぜですか?ここで

はコードです:

<div class="jumbotron"> 
    <h4><u>Your Messages</u></h4> 
    @foreach (var m in Model.User.MessagesUsers) 
    { 
     <p>@m.Message</p> 
    } 
</div> 
+2

安全上の理由から、すべてのhtmlタグをエスケープしています。どのフレームワークを使用していますか? – yper

+0

具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明確にするために、[ask]ページを参照してください。 –

+0

これは純粋なHTMLとCSSではありません。 –

答えて

3

あなたはASP.NET MVCを使用しているように見えます。セキュリティ上の理由から、フレームワークは自動的に出力をHTMLエンコードします。

<p>@Html.Raw(m.Message)</p> 

ただし、これはセキュリティを回避であることに注意してください:

あなたはusing @Html.Rawでいることを周りに取得することができます。あなたのデータを信頼するようにしてください。これは、クロスサイトスクリプティング攻撃の発生方法です。 Markdownのようなものに目を通して、ユーザーがより多くのコントロールを持つマークアップを入力できるようにすることもできます。

+0

これを回避する方法はありませんか? –

+0

@ N.Sch:それはいくつかの要因に左右されます。ユーザーがHTMLコード化せずに自分や他のユーザーに表示するデータを入力できるようにしている場合、それは他のユーザーにとってセキュリティ上のリスクです。 (HTMLエンコーディングさえ、まだリスクがあるかもしれませんが、私はそのことを知らないが、そうではないというわけではありません)。データのソースを信頼すれば、リスクは少なくなります。しかし、「信頼」とは必ずしも「ログインしたユーザーが投稿した」という意味ではありません。ログインしたユーザーは悪意のある行為をする可能性があります。 – David

+0

最も安全なアプローチは、ユーザーがHTMLを入力したり、マークダウン(またはそのようなもの)を許可したり、その場でHTMLに変換したりすることを許可するものではなく、安全です(XSSに対して) –

関連する問題