web-dev-qa-db-ja.com

二重引用符で囲まれたタグパラメータ内に入力が反映されるとはどういう意味ですか?

Acunetix を最近スキャンしたところ、私のページの1つに vulnerability がいくつか示されています。再現してみましたが、脆弱性は見当たりません。いわゆる脆弱性のタイトルはです。入力は、二重引用符で囲まれた平均の間のタグパラメータ内に反映されます。

スキャンにより、 page に対して次の結果が得られます。

verif.php
Details URL encoded GET input afficher_forgot_password was set to **Oui"sTYLe='acu:Expre/**/SSion(Afih(9717))'bad="**
The input is reflected inside a tag parameter between double quotes.

Request headersGET /verif.php?afficher_forgot_password=Oui"sTYLe='acu:Expre/**/SSion(Afih(9717))'bad="&lang_abbreviation=en&membre= HTTP/1.1
 Connection: keep-aliveCookie: PHPSESSID=feef28e9052ce51f6701e34749ca30ac;lang_abbreviation=enAccept: */*Accept-Encoding: gzip, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/73.0.3683.103 Safari/537.36

これは、いわゆる脆弱性を再現する 直接リンク ですが、ページに脆弱性はありません。二重引用符で囲まれたタグパラメータ内に入力が反映されるのはどういう意味ですか?

3
Man Of God

どうした?

脆弱性スキャナーは、ページに反射型XSSまたはHTMLインジェクションの脆弱性を発見したと考えています。

GETリクエストパラメータとしてOui"sTYLe='acu:Expre/**/SSion(Afih(9717))'bad="を挿入すると、ページには次の要素が含まれてレンダリングされます。

<a href="https://trojanmart.com/SSionAfih9717" title="Français " class=" ">...</a>

コンテンツの一部(SSionAfih9717)が挿入されたデータと一致しました。

あなたは心配すべきですか?

場合によります。ユーザー入力テキストがページに無害な方法で反映される可能性があるさまざまなシナリオが存在するため、このようなテストは多くの場合、誤検知となる可能性があります。

テストがbadという名前のHTML属性をデータを含む要素に挿入しようとしたように見えますが、Wordの「悪い」は結果のHTMLのどこにも表示されません。成功した試みは次のようになったと思います:

<a href="https://trojanmart.com/SSionAfih9717" bad= title="Français " class=" ">...</a>

属性badhrefの後にどのように表示されるかに注意してください。攻撃者がこれを使用して、任意のJavaScriptを挿入したり、他の方法でページを操作したりする可能性があります。

あなたの特定のケースでは、あなたはテストの影響を受けていないようで、それはおそらく偽陽性と考えられます。ただし、これは多くの可能なテストの1つにすぎないため、他のシナリオの影響を受ける可能性があります。つまり、リクエストが最後に追加される代わりにhref値を完全に置き換えることができる場合、それを使用してjavascript: URIまたは攻撃者の制御下にある他のドメインをターゲットにすることができます。

それを修正するには?

これに対して本当に脆弱である場合、 OWASP XSS防止チートシートルール#5 で概説されているベストプラクティスに従うことをお勧めします。

ルール5-信頼できないデータをHTML URLパラメータ値に挿入する前のURLエスケープ

ルール#5は、信頼できないデータをHTTP GETパラメータ値に入れたい場合に使用します。

<a href="http://www.somesite.com?test=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">link</a > 

英数字を除き、すべての文字をASCII 256未満の値を%HHエスケープ形式でエスケープします。データに信頼できないデータを含める:攻撃を無効にする適切な方法がないため、URLは許可されません。 URLからの切り替えを防ぐエスケープ付き。

すべての属性を引用する必要があります。引用符で囲まれていない属性は、[スペース]%* +、-/;を含む多くの文字で区切ることができます。 <=> ^および|。エンティティのエンコードはこのコンテキストでは役に立たないことに注意してください。

警告:完全なURLまたは相対URLをURLエンコードでエンコードしないでください。信頼できない入力がhref、src、またはその他のURLベースの属性に配置されることを意図している場合は、検証して、予期しないプロトコル、特にJavaScriptリンクを指していないことを確認する必要があります。 URLは、他のデータと同様に、表示のコンテキストに基づいてエンコードする必要があります。たとえば、HREFリンクのユーザー主導のURLは属性エンコードする必要があります。

例えば:

String userURL = request.getParameter( "userURL" )
boolean isValidURL = Validator.IsValidURL(userURL, 255); 
if (isValidURL) {  
    <a href="<%=encoder.encodeForHTMLAttribute(userURL)%>">link</a>
}
1
multithr3at3d