{"id":966,"date":"2014-01-09T17:35:03","date_gmt":"2014-01-09T16:35:03","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=966"},"modified":"2014-01-11T17:21:27","modified_gmt":"2014-01-11T16:21:27","slug":"analisis-plsql-con-sonarqube-criticals","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-criticals\/","title":{"rendered":"An\u00e1lisis PL\/SQL con SonarQube &#8211; Criticals"},"content":{"rendered":"<p><a href=\"http:\/\/500px.com\/Vicken\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1546\" alt=\"PLSQL_Critical\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_Critical.jpg\" width=\"252\" height=\"380\" \/><\/a>En el post anterior de esta serie sobre el an\u00e1lisis de c\u00f3digo PL\/SQL con SonarQube, hemos visto l<a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-blockers\/\" target=\"_blank\">as reglas Blockers<\/a> de <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-el-quality-profile-plsql\/\" target=\"_blank\">nuestro nuevo Quality Profile<\/a>.<\/p>\n<p>En esta ocasi\u00f3n, hemos encontrado tres violaciones de las mejores pr\u00e1cticas de programaci\u00f3n PL\/SQL cuyas consecuencias son tan graves que no se puede imaginar cualquier tolerancia. Lo qu\u00e9 justifica por tanto su condici\u00f3n de &#8216;bloqueadores&#8217;.<\/p>\n<p>Tambien, se encuentra un total de 18 fallos para estas 3 reglas, y entonces este n\u00famero limitado nos deja suponer que estas reglas son conocidas por el equipo del proyecto.<\/p>\n<p>Por \u00faltimo, estos defectos pueden generar un error de l\u00f3gica en la aplicaci\u00f3n &#8211; una operaci\u00f3n que nunca se puede realizar debido a que la condici\u00f3n correspondiente nunca se cumplir\u00e1 &#8211; e incluso un crash de la aplicaci\u00f3n. <!--more--><\/p>\n<p>Estas tres reglas Blockers est\u00e1n alineadas con la fiabilidad, la robustez de la aplicaci\u00f3n, lo que nos viene muy bien. De hecho, queremos destacar los defectos que afectan directamente al usuario, pues la fiabilidad de la aplicaci\u00f3n, y tambi\u00e9n todo lo relacionado con la seguridad y el rendimiento, todo lo que puede evitar un posible &#8216;hacking&#8217; de la aplicaci\u00f3n, la corrupci\u00f3n de datos o tratamientos que toman demasiado tiempo, lo que de nuevo tendr\u00e1 un impacto al usuario final.<\/p>\n<p>Vamos a ver si nos encontramos con tales defectos entre las reglas Critical.<\/p>\n<h2>Las reglas Critical<\/h2>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Criticals.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1555\" alt=\"Criticals\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Criticals.jpg\" width=\"676\" height=\"100\" \/><\/a><\/p>\n<p>Tenemos de nuevo 3 reglas para este grupo de violaciones Critical. La primera de estas, &#8216;Sensitive SYS owned functions should not be used&#8217; trata del uso de packages Oracle, como:<\/p>\n<ul>\n<li><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/UTLDefects.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1556\" alt=\"UTLDefects\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/UTLDefects.jpg\" width=\"360\" height=\"199\" \/><\/a>UTL_FILE para manejar ficheros y directorios..<\/li>\n<li>UTL_SMTP para manejar correos..<\/li>\n<li>UTL_TCIP para manejar conexiones TCP, para leer o escribir en un servidor remoto por ejemplo.<\/li>\n<\/ul>\n<p>Hay muchos otros paquetes de Oracle con estas caracter\u00edsticas, pero son los que puedo encontrar en el c\u00f3digo analizado.<\/p>\n<p>Debo decir que yo no conoc\u00eda esta norma. No soy un experto en seguridad, y de hecho, no hay muchos expertos en seguridad de base de datos.<\/p>\n<p>Por supuesto, conozco el principio de inyecci\u00f3n SQL, que permite a un hacker penetrar en la base de datos, pero en este caso, tendr\u00e1 los mismos derechos que un usuario normal. Pero, si se encuentra con uno de estos procedimientos ejecutados por un usuario de tipo &#8216;SYS&#8217;, entonces, seg\u00fan estos expertos, es \u00abGAME OVER\u00bb. Eso le concede los derechos de administrador de base de datos y, por lo tanto, puede hacer todo lo que quiere, incluyendo la eliminaci\u00f3n de todos los accesos.<\/p>\n<p><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Obviamente, con<\/span> <span class=\"hps\">320<\/span> <span class=\"hps\">defectos<\/span> <span class=\"hps\">identificados por<\/span> <span class=\"hps\">SonarQube<\/span> <span class=\"hps\">en el c\u00f3digo<\/span> <span class=\"hps\">analizado<\/span><span>, esta<\/span> <span class=\"hps\">norma de seguridad no es<\/span> muy <span class=\"hps\">conocida.<\/span> <span class=\"hps\">Corregirlos<\/span> <span class=\"hps\">tambi\u00e9n<\/span> puede <span class=\"hps\">tomar un<\/span> <span class=\"hps\">poco de tiempo.<\/span><\/span><\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_SysSunburst.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1560\" alt=\"PLSQL_SysSunburst\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/PLSQL_SysSunburst.jpg\" width=\"582\" height=\"604\" \/><\/a><\/p>\n<p><span class=\"short_text\" id=\"result_box\" lang=\"es\"><span class=\"hps\">Como podemos ver<\/span> <span class=\"hps\">en este diagrama<\/span> <span class=\"hps\">SQALE<\/span><\/span> (<a href=\"http:\/\/www.sonarsource.com\/products\/plugins\/governance\/sqale\/\" target=\"_blank\">plugin SonarQube<\/a>), se necesitan 40 d\u00edas para remediar a estos 320 defectos.\u00a0Yo recomendar\u00eda un plan de accci\u00f3n espec\u00edfico para estas correcciones en el corto plazo.<\/p>\n<p>La segunda de estas tres reglas se refiere al uso de un DELETE o un UPDATE sin una cl\u00e1usula WHERE, lo que significa quitar o actualizar todos los registros de una tabla. Puede suceder a veces una eliminaci\u00f3n total de los datos en una tabla temporal, pero una actualizaci\u00f3n completa es muy poco com\u00fan. En cualquier caso, queremos comprobar si el uso de estas clausulas se justifica o no.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Update.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1561\" alt=\"Update\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/01\/Update.jpg\" width=\"264\" height=\"61\" \/><\/a> Con SonarQube, un drill-down en el c\u00f3digo nos permite identificar y comprobar el tratamiento err\u00f3neo, y en este caso, lo m\u00e1s probable es que estamos frente a un fallo de programaci\u00f3n. Alguien tendr\u00e1 que dar explicaciones!<\/p>\n<p><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Sobre todo porque<\/span> <span class=\"hps\">este mismo<\/span> <span class=\"hps\">bloque de c\u00f3digo<\/span> <span class=\"hps\">se repite<\/span> <span class=\"hps\">8<\/span> <span class=\"hps\">veces en el<\/span> <span class=\"hps\">mismo programa<\/span><span>!<\/span> <span class=\"hps\">Ya hab\u00edamos conocido<\/span> <span class=\"hps\">este caso<\/span> <span class=\"hps\">con<\/span><\/span> <a href=\"http:\/\/qualilogy.com\/es\/analisis-plsql-con-sonarqube-blockers\/\" target=\"_blank\">los Blockers<\/a>, con un Copy-Paste multiple. Una de mis recomendaciones ser\u00e1 comprobar si al menos una persona en el equipo de proyecto requiere alg\u00fan tipo de formaci\u00f3n con las mejores pr\u00e1cticas de programaci\u00f3n PL\/SQL.<\/p>\n<p><span id=\"result_box\" lang=\"es\"><span class=\"hps\">Por \u00faltimo<\/span> <span class=\"hps\">nos encontramos con<\/span> <span class=\"hps\">una sola<\/span> <span class=\"hps\">violaci\u00f3n<\/span> <span class=\"hps\">de la regla<\/span><\/span> &#8216;Avoid CROSS JOIN queries&#8217;, que identifica consultas en 2 tablas (o m\u00e1s) <span id=\"result_box\" lang=\"es\"><span class=\"hps\">sin especificar una<\/span> <span class=\"hps\">uni\u00f3n entre<\/span> <span class=\"hps\">ellas, lo cual<\/span> <span class=\"hps\">tiene el efecto de<\/span> <span class=\"hps\">devolver el producto<\/span> <span class=\"hps\">cartesiano de<\/span> <span class=\"hps\">todos<\/span> <span class=\"hps\">los datos de estas<\/span> <span class=\"hps\">dos tablas.<\/span> <span class=\"hps\">Tal<\/span> <span class=\"hps\">defecto puede<\/span> <span class=\"hps\">resultar en<\/span> <span class=\"hps\">un error<\/span> <span class=\"hps\">de l\u00f3gica<\/span> <span class=\"hps\">para el usuario,<\/span> <span class=\"hps\">sin duda un<\/span> <span class=\"hps\">problema de rendimiento<\/span><span>,<\/span> <span class=\"hps\">o incluso<\/span> <span class=\"hps\">un posible<\/span> <span class=\"hps\">error de datos<\/span> <span class=\"hps atn\">(<\/span><span>es decir,<\/span> una <span class=\"hps\">corrupci\u00f3n de datos)<\/span><span>.<\/span><\/span><\/p>\n<p>Se podr\u00eda justificar incluir esta regla en los Blockers. Pero en este caso, \u00bfya no tenemos reglas criticas? Si, porque vamos a trasladar unas reglas de tipo Major en la categoria de Criticals, las que presentan un impacto en t\u00e9rminos de robustez, seguridad y rendimiento para el usuario.<\/p>\n<p>Esto lo vemos en el pr\u00f3ximo post sobre las normas Major. Hasta luego.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el post anterior de esta serie sobre el an\u00e1lisis de c\u00f3digo PL\/SQL con SonarQube, hemos visto las reglas Blockers de nuestro nuevo Quality Profile. En esta ocasi\u00f3n, hemos encontrado tres violaciones de las mejores pr\u00e1cticas de programaci\u00f3n PL\/SQL cuyas consecuencias son tan graves que no se puede imaginar cualquier tolerancia. Lo qu\u00e9 justifica por [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-966","post","type-post","status-publish","format-standard","hentry","category-sonarqube-plsql"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/966"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=966"}],"version-history":[{"count":15,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/966\/revisions"}],"predecessor-version":[{"id":968,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/966\/revisions\/968"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=966"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}