{"id":1217,"date":"2012-01-17T14:34:29","date_gmt":"2012-01-17T14:34:29","guid":{"rendered":"https:\/\/www.jose-aguilar.com\/blog\/?p=1217"},"modified":"2012-08-30T19:24:16","modified_gmt":"2012-08-30T19:24:16","slug":"cross-site-scripting","status":"publish","type":"post","link":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/","title":{"rendered":"XSS (Cross Site Scripting)"},"content":{"rendered":"<p>El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y env\u00edo de datos sin validaci\u00f3n alguna, aceptando el envi\u00f3 de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario.<\/p>\n<p><a href=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1311\" title=\"xss\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss1-300x200.png\" alt=\"\" width=\"300\" height=\"200\" srcset=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss1-300x200.png 300w, https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss1.png 600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>El Cross-Site-Scripting es una vulnerabilidad que puede causar un impacto tanto a una aplicaci\u00f3n web como a usuarios que de manera inconsciente activen dicha secuencia de comandos.<\/p>\n<p>Dicho c\u00f3digo malicioso se compone de cadenas de datos cuyo contenido son scripts completos contenidos en enlaces o ejecutados desde formularios.<\/p>\n<p>En caso de que sea ejecutado el mismo se ejecutara en el equipo del usuario con todos los privilegios permitidos por las pol\u00edticas de seguridad configuradas en el navegador del usuario o del sitio visitado, pudiendo realizar acciones diversas como la captura de cookies de usuario o la activaci\u00f3n de servicios y componentes del sistema operativo del usuario victima.<\/p>\n<p>La mayor problem\u00e1tica es que estas cadenas de c\u00f3digo se encuentran ocultas a la sombra de v\u00ednculos en donde el usuario normalmente no hace una vista del c\u00f3digo de dicho enlace y lo ejecuta con una pol\u00edtica de confianza total, dicha ejecuci\u00f3n se realiza de una manera indirecta, ya sea por una activaci\u00f3n v\u00eda hiperv\u00ednculo o por la ejecuci\u00f3n al momento de la carga de un sitio afectado por este tipo de ataque, el atacante no realiza su acci\u00f3n pensando en un usuario en especifico si no que act\u00faa de manera de que afectan a cualquier usuario que inocentemente caiga en dicha trampa, las formas mas comunes de realizar dicha agresi\u00f3n es por medio de correos electr\u00f3nicos, v\u00ednculos falsos o ataques directos a sitios no preparados para este tipo de ataque.<\/p>\n<p>Una forma de ataque XSS ser\u00eda la siguiente:<\/p>\n<p>Imaginamos que estamos en un blog y hacemos un post con lo siguiente:<\/p>\n<pre>&lt;script&gt;alert(\"hola\");&lt;\/script&gt;<\/pre>\n<p>Al cargar la p\u00e1gina donde se refleja nuestro post aparecer\u00e1 una ventanita como esta.<\/p>\n<p><a href=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/hola.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1307\" title=\"hola\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/hola.gif\" alt=\"\" width=\"215\" height=\"107\" \/><\/a><\/p>\n<p>Bien parece algo chistoso, un peque\u00f1o saludo de entrada, pero ahora quiz\u00e1s a ese hola podemos agregarle algo m\u00e1s:<\/p>\n<pre>&lt;script&gt;while(1)alert(\"hola\");&lt;\/script&gt;<\/pre>\n<p>Al cargar la pagina nos aparecer\u00e1 la misma ventanita de saludo pero esta vez al darle click volver\u00e1 a aparecer, floodeando nuestro navegador, ya que siempre que demos click en el bot\u00f3n aceptar del cuadro de dialogo nos seguir\u00e1 apareciendo la misma ventanita, quit\u00e1ndonos toda posibilidad de interactuar con el sitio ya que la \u00fanica forma de cerrar este cuadro de dialogo es cerrando la web que lo ejecuta, como vemos ya dejo de ser chistoso, pero hasta aqu\u00ed llegaron los principiantes.<\/p>\n<p>Ahora veamos lo que puede hacer alguien mas experimentado en el XSS.<\/p>\n<p>Que tal si intentaran algo como esto:<\/p>\n<pre>&lt;iframe src=http:\/\/mipagina.com\/pagina.htm&gt;<\/pre>\n<p>Y en el c\u00f3digo de pagina.htm algo como esto:<\/p>\n<pre>&lt;SCRIPT TYPE=\"text\/javascript\" LANGUAGE=JAVASCRIPT&gt;\r\nif (top.frames.length!=0)\r\ntop.location=self.document.location; &lt;\/SCRIPT&gt;<\/pre>\n<p>Como podemos observar cada vez que se ingrese a la p\u00e1gina donde se refleja esta inyecci\u00f3n se mostrara pagina.htm como frame superior.<\/p>\n<p>Ahora veamos algo m\u00e1s da\u00f1ino, vamos a eliminar todo el contenido de la p\u00e1gina de post y vamos a remplazarlo por un mensaje nuestro y se logra de una manera tan sencilla como esta:<\/p>\n<pre>&lt;script&gt;document.documentElement.innerHTML=\"Borrada\";&lt;\/script&gt;<\/pre>\n<p>Bueno creo que con esto tenemos suficiente como para tomarle importancia a algo que a simple vista parece inofensivo, as\u00ed que pasaremos directamente a las recomendaciones para solucionar este tipo de agujeros en nuestra seguridad.<\/p>\n<p>Para prevenir los ataques XSS, PHP dispone de una clase en su librer\u00eda que se puede emplear de forma f\u00e1cil y eficaz.<\/p>\n<p><a href=\"http:\/\/www.phpclasses.org\/package\/2189-PHP-Filter-out-unwanted-PHP-Javascript-HTML-tags-.html\">PHP Input Filter<\/a>, es una clase escrita en PHP que permite filtrar c\u00f3digo malicioso ingresado en los formularios para prevenir ataques XSS de manera sencilla, tiene la cualidad de no limpiar determinadas etiquetas o atributos.<\/p>\n<p>Para utilizar esta clase, descargamos los archivos desde el web oficial e incluimos el <span id=\"IL_AD9\" class=\"IL_AD\">archivo<\/span> <em>class.inputfilter.php<\/em> al inicio de nuestro PHP. Luego se debe crear una instancia de la clase <em>InputFilter<\/em>, entonces podemos filtrar los datos con el m\u00e9todo <em><span id=\"IL_AD3\" class=\"IL_AD\">process<\/span><\/em> de la siguiente forma:<\/p>\n<pre>require_once(\"class.inputfilter.php\");\r\n$ifilter = new InputFilter();\r\n$nombre = $ifilter-&gt;process($_POST['nombre']);<\/pre>\n<p>Tambi\u00e9n se pueden filtrar todos los campos enviados por el formulario, por ejemplo si el formulario es enviado por el m\u00e9todo <em>POST<\/em>, podr\u00edamos utilizar el siguiente c\u00f3digo para filtrar todos los campos para luego utilizarlos sin problemas.<\/p>\n<pre>require_once(\"class.inputfilter.php\");\r\n$ifilter = new InputFilter();\r\n$_POST = $ifilter-&gt;process($_POST);<\/pre>\n<p><a href=\"http:\/\/www.phpclasses.org\/package\/2189-PHP-Filter-out-unwanted-PHP-Javascript-HTML-tags-.html\">Descargar clase Inputfiler<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y env\u00edo de datos sin validaci\u00f3n alguna, aceptando el envi\u00f3 de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario. El [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1310,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,23],"tags":[73],"class_list":["post-1217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","category-seguridad-web","tag-seguridad"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>XSS (Cross Site Scripting) - Jose Aguilar Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XSS (Cross Site Scripting) - Jose Aguilar Blog\" \/>\n<meta property=\"og:description\" content=\"El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y env\u00edo de datos sin validaci\u00f3n alguna, aceptando el envi\u00f3 de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario. El [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/\" \/>\n<meta property=\"og:site_name\" content=\"Jose Aguilar Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/joseaguilarblog\" \/>\n<meta property=\"article:published_time\" content=\"2012-01-17T14:34:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-08-30T19:24:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jose Aguilar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:site\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jose Aguilar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/\",\"name\":\"XSS (Cross Site Scripting) - Jose Aguilar Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png\",\"datePublished\":\"2012-01-17T14:34:29+00:00\",\"dateModified\":\"2012-08-30T19:24:16+00:00\",\"author\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png\",\"contentUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png\",\"width\":600,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.jose-aguilar.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XSS (Cross Site Scripting)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/\",\"name\":\"Jose Aguilar Blog\",\"description\":\"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\",\"name\":\"Jose Aguilar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"caption\":\"Jose Aguilar\"},\"description\":\"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.\",\"sameAs\":[\"https:\/\/plus.google.com\/114357189801512615537\"],\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"XSS (Cross Site Scripting) - Jose Aguilar Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"XSS (Cross Site Scripting) - Jose Aguilar Blog","og_description":"El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y env\u00edo de datos sin validaci\u00f3n alguna, aceptando el envi\u00f3 de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario. El [&hellip;]","og_url":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/","og_site_name":"Jose Aguilar Blog","article_publisher":"https:\/\/www.facebook.com\/joseaguilarblog","article_published_time":"2012-01-17T14:34:29+00:00","article_modified_time":"2012-08-30T19:24:16+00:00","og_image":[{"width":600,"height":400,"url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png","type":"image\/png"}],"author":"Jose Aguilar","twitter_card":"summary_large_image","twitter_creator":"@JoseAguilarBlog","twitter_site":"@JoseAguilarBlog","twitter_misc":{"Escrito por":"Jose Aguilar","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/","url":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/","name":"XSS (Cross Site Scripting) - Jose Aguilar Blog","isPartOf":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage"},"image":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png","datePublished":"2012-01-17T14:34:29+00:00","dateModified":"2012-08-30T19:24:16+00:00","author":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11"},"breadcrumb":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#primaryimage","url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png","contentUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2011\/12\/xss.png","width":600,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/www.jose-aguilar.com\/blog\/cross-site-scripting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.jose-aguilar.com\/blog\/"},{"@type":"ListItem","position":2,"name":"XSS (Cross Site Scripting)"}]},{"@type":"WebSite","@id":"https:\/\/www.jose-aguilar.com\/blog\/#website","url":"https:\/\/www.jose-aguilar.com\/blog\/","name":"Jose Aguilar Blog","description":"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11","name":"Jose Aguilar","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","caption":"Jose Aguilar"},"description":"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.","sameAs":["https:\/\/plus.google.com\/114357189801512615537"],"url":"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/"}]}},"_links":{"self":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/1217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/comments?post=1217"}],"version-history":[{"count":0,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/1217\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media\/1310"}],"wp:attachment":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media?parent=1217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/categories?post=1217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/tags?post=1217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}