问题描述
我被要求审查我的PLSQL应用程序的安全清单,该应用程序利用DBMS_XMLPARSER.parseClob解析XML请求,从Oracle获取数据并返回响应XML文档。
安全要求是这样的:
https://www.stigviewer.com/stig/application_security_and_development/2017-12-18/finding/V-70269
Oracle内置的DBMS_XMLPARSER包是否内置了安全性,以防止面向XML的攻击,还是我需要自己检查输入数据?
面向XML的攻击的一个示例是XML炸弹,如以下链接所示:
https://www.soapui.org/security-testing/security-scans/xml-bomb.html
我还没有尝试使用面向XML的攻击来调用DBMS_XMLPARSER.parseClob,因为我不想被解雇。我希望您可以在受控环境中进行测试。
安全要求是这样的:
https://www.stigviewer.com/stig/application_security_and_development/2017-12-18/finding/V-70269
Oracle内置的DBMS_XMLPARSER包是否内置了安全性,以防止面向XML的攻击,还是我需要自己检查输入数据?
面向XML的攻击的一个示例是XML炸弹,如以下链接所示:
https://www.soapui.org/security-testing/security-scans/xml-bomb.html
我还没有尝试使用面向XML的攻击来调用DBMS_XMLPARSER.parseClob,因为我不想被解雇。我希望您可以在受控环境中进行测试。
专家解答
我们将返回一个错误,以确保您不能消耗所有资源,例如
SQL> create table t ( c clob ); Table created. SQL> declare 2 v clob := 3 ' 4 6 7 8 9 10 11 12 13 14 15 16 ]> 17&lol9; '; 18 begin 19 insert into t values (v); 20 commit; 21 end; 22 / PL/SQL procedure successfully completed. SQL> SQL> DECLARE 2 l_clob CLOB; 3 l_parser dbms_xmlparser.Parser; 4 l_doc dbms_xmldom.DOMDocument; 5 BEGIN 6 select c into l_clob from t; 7 l_parser := dbms_xmlparser.newParser; 8 dbms_xmlparser.parseClob(l_parser, l_clob); 9 l_doc := dbms_xmlparser.getDocument(l_parser); 10 dbms_xmlparser.freeParser(l_parser); 11 END; 12 / DECLARE * ERROR at line 1: ORA-31011: XML parsing failed ORA-06512: at "XDB.DBMS_XMLPARSER", line 191 ORA-19213: error occurred in XML processing at lines 15, 1, 1, 1, 1, 1, 1, 1, 1 LPX-00286: Exceeded max depth for recursion ORA-06512: at "XDB.DBMS_XMLPARSER", line 164 ORA-06512: at "XDB.DBMS_XMLPARSER", line 183 ORA-06512: at line 8
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




