0

次のコードがあり、XML インジェクションをスローします (強調表示されたテキストを参照してください)。これを削除する方法を教えてください。

private string GetRecordSet(OleDbDataReader oDR)
        {
            XmlTextWriter xTWriter = null;
            StringWriter oSWriter = null;
            int iRecCnt=0;
            string sName = String.Empty;
            string sValue = String.Empty;

            try
            {
                //Create Out XML    
                oSWriter = new StringWriter();
                xTWriter = new XmlTextWriter(oSWriter);
                xTWriter.Formatting = Formatting.Indented;
                xTWriter.WriteStartElement("SESSION");

                while(oDR.Read()) 
                {
                    iRecCnt++;

                    sName = oDR.GetValue(0).ToString();
                    sValue = oDR.GetValue(1).ToString();
                    **xTWriter.WriteElementString(sName, sValue);**
                }

                xTWriter.WriteElementString("TotalRecords", iRecCnt.ToString());
                xTWriter.WriteEndElement(); //ROWSET END

                //Return XML string. If no records found then return empty string
                string sRtrn = oSWriter.ToString();
                if (iRecCnt == 0) sRtrn = string.Empty;
                return sRtrn;
            }
4

1 に答える 1

1

入力を決してサニタイズしていません。コードを意図しない動作に変更するために使用できる XML メタ文字のため、XML インジェクション可能です。メタ文字の例: 一重引用符、二重引用符、<、> - コードに挿入すると、実際にコードが意図しない xml 要素または属性を書き込む可能性があるもの。

于 2013-05-14T22:53:25.233 に答える