3

メールアドレスであるはずのユーザー入力をMailAdressクラスに解析するとします。

var mailString = Request.QueryString["mail"];
var mail = new MailAddress(mailString);

何らかの方法で MailAddress オブジェクトを後で出力した場合、クロスサイト スクリプティング攻撃を受ける可能性はありますか? たとえば、WebForms の Literal コントロールを介して:

litMessage.Text = "Your mail address is " + mail.Address;

文字列を解析してアドレスが有効な電子メール アドレスであることを確認しましたが、outpout をサニタイズする必要がありますか?

私が収集したメール アドレスの RFC はかなり複雑なので、.NET によって有効と見なされるメール アドレスにクロス サイト スクリプトを隠蔽できるかどうかはわかりません。

編集:
MSDNによると><電子メール アドレスでは角かっこを使用できます。

アドレスを山かっこで囲むと、アドレス パラメータに表示名と関連付けられた電子メール アドレスを含めることができます。例: 「トム スミス <tsmith@contoso.com>」

したがって、これが XSS 攻撃に十分かどうか、および/またはMailMessageクラスが危険な部分を回避するために何かを行うかどうかという疑問が残ります。

4

2 に答える 2

0

出力を消毒する必要がありますか

出力を「サニタイズ」するのではなく、エンコードします。HTML ドキュメントに出力するすべての文字列は HTML エンコードする必要があるため<、メール アドレスに文字が含まれていても問題ありません&lt;。結果として HTML ソースが取得され、それが正しく表示されます。ページ上のリテラル<

多くの ASP.NET コントロールは HTML エスケープを自動的に処理しますが、Literalマークアップの表示に使用できるため、既定ではそうではありません。しかし、コントロールのModeプロパティをに設定すると、あなたがやっているのと同じように設定してもまったく問題ありません。LiteralEncodeText

<使用している値に文字を含めることができるかどうかに関係なく、HTML ページにコンテンツを配置するたびに、安全な HTML エンコード出力を常に使用するようにしてください。これは問題の分離の問題です。HTML 出力コードは HTML の書式設定についてはすべて知っていますが、電子メール アドレスやその他のアプリケーション フィールドで使用できる文字については何も知っているべきではありません。

値が「安全」であると考えてエスケープを省略すると、出力ステージと入力ステージの間に暗黙的で壊れやすい結合が導入され、コードが安全であることを確認することが難しくなり、変更を加えたときに安全でなくなりやすくなります。

于 2013-04-17T10:04:03.847 に答える