0

xssの脆弱性の問題を修正する必要があります。コードセグメントは以下のとおりです。

StringBuffer xml = new StringBuffer();
                      xml.append("<?xml version=\"1.0\"?>");
                      xml.append("<parent>");
                      xml.append("<child>");

                            for(int cntr=0; cntr < dataList.size(); cntr++){

                            AAAAA obj = (AAAAA) dataList.get(cntr);
                            if(obj.getStatus().equals(Constants.ACTIVE)){

                                xml.append("<accountNumber>");
                                xml.append(obj.getAccountNumber());
                                xml.append("</accountNumber>");

                                xml.append("<partnerName>");
                                xml.append(obj.getPartnerName());
                                xml.append("</partnerName>");

                                xml.append("<accountType>");
                                xml.append(obj.getAccountType());
                                xml.append("</accountType>");

                                xml.append("<priority>");
                                xml.append(obj.getPriority());
                                xml.append("</priority>");
                              }
                            }

                      xml.append("</child>");
                      xml.append("</parent>");  


                  response.getWriter().write(xml.toString());
                  response.setContentType("text/xml");
                  response.setHeader("Cache-Control", "no-cache");

問題は、構文response.getWriter()。write(xml.toString());の行にあります。xss攻撃に対して脆弱であると書かれています。私は十分な宿題をし、ESAPI2.0もインストールしました。しかし、私はソリューションを実装する方法がわかりません。解決策を提案してください。

4

3 に答える 3

0

私が理解できるように:

AAAAA obj = (AAAAA) dataList.get(cntr);

ここでは、外部ソースからいくつかのデータを取得しています。次に、このデータを検証する必要があります。そうしないと、誰でもそこにデータを置くことができ、クライアント側で破壊が発生します(たとえば、Cookieが盗まれる可能性があります)。

于 2012-06-13T06:38:49.393 に答える
0

XMLドキュメントに挿入するテキストと属性ノードは常にエスケープする必要があるので、

xml.append("<accountType>");
xml.append(escape(obj.getAccountType()));
xml.append("</accountType>");

ここで、escape()は、特別な処理が必要な文字を処理します。"<"、 "&"、 "]]>"、およびサロゲートペア。

さらに良いことに、文字列の連結によってXMLを構築しないでください。あなたが書くことを可能にするシリアル化ライブラリを使用してください

out.startElement("accountType");
out.text(obj.getAccountType());
out.endElement();

(これを行う必要がある場合は、StAX XMLStreamWriterインターフェイスでSaxonシリアライザーを使用しますが、利用できる代替手段はたくさんあります。)

于 2012-06-13T08:25:44.370 に答える
0

答え-ESAPIを使用したコードは以下のとおりです。xml.append(ESAPI.encoder()。encodeForXML(desc)); 変数'desc'のデータをエスケープします。これを実装することにより、変数'desc'のコンテンツは実行可能コードではなくデータとして読み取られるため、バックエンドJavaコードの応答時にデータがブラウザーで実行されることはありません。

于 2012-06-18T13:09:51.970 に答える