{"id":19133,"date":"2017-01-06T10:10:54","date_gmt":"2017-01-06T09:10:54","guid":{"rendered":"https:\/\/diego.dehaller.ch\/blog\/?p=19133"},"modified":"2020-05-18T01:28:54","modified_gmt":"2020-05-17T23:28:54","slug":"haciendo-un-blog-mas-seguro-xss","status":"publish","type":"post","link":"https:\/\/diego.dehaller.ch\/blog\/2017\/haciendo-un-blog-mas-seguro-xss.html","title":{"rendered":"Haciendo un blog m\u00e1s seguro &#8211; XSS"},"content":{"rendered":"<p>Siguiendo con la serie de \u00abHaciendo un blog m\u00e1s seguro\u00bb, donde ya hemos visto <a href=\"https:\/\/diego.dehaller.ch\/blog\/2017\/haciendo-un-blog-mas-seguro-https.html\">c\u00f3mo poner un certificado SSL para usar https<\/a> o <a href=\"https:\/\/diego.dehaller.ch\/blog\/2017\/haciendo-un-blog-mas-seguro-content-security-policy.html\">como usar las reglas de contenido<\/a> para indicar a nuestro servidor lo que puede y no puede ejecutar, llegamos a este otro punto: Cross-site scripting (XSS), que no es otra cosa que inyectar c\u00f3digo en una p\u00e1gina, c\u00f3digo que podr\u00eda acceder a otros recursos del servidor.<\/p>\n<h3>\u00bfC\u00f3mo evitar XSS?<\/h3>\n<p>En Apache, pues editando, de nuevo, el fichero httpd.conf y poniendo esto:<\/p>\n<p>Header always set X-Xss-Protection \u00ab1; mode=block\u00bb<\/p>\n<p>Con esta l\u00ednea activamos la protecci\u00f3n y bloqueamos que ciertos navegadores interpreten c\u00f3digo si se detecta XSS. Reiniciamos Apache, y en principio ya est\u00e1. Si queremos ver que efectivamente todo est\u00e1 bien, podemos usar el modo Desarrollador de Chrome o Firefox para ver los headers. En Chrome ser\u00eda con F12, seleccionar network, all y luego hacer click en una de las entradas que salen. En la pesta\u00f1a headers veremos esto:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-19136\" src=\"https:\/\/i0.wp.com\/diego.dehaller.ch\/blog\/wp-content\/uploads\/2017\/01\/2017-01-05-11_58_47-Diego-\u2013-Blog-\u2013-Blog-personal-de-Diego-de-Haller.jpg?fit=473%2C500&#038;ssl=1\" alt=\"Headers\" width=\"473\" height=\"500\" srcset=\"https:\/\/diego.dehaller.ch\/blog\/wp-content\/uploads\/2017\/01\/2017-01-05-11_58_47-Diego-\u2013-Blog-\u2013-Blog-personal-de-Diego-de-Haller.jpg 642w, https:\/\/diego.dehaller.ch\/blog\/wp-content\/uploads\/2017\/01\/2017-01-05-11_58_47-Diego-\u2013-Blog-\u2013-Blog-personal-de-Diego-de-Haller-473x500.jpg 473w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/p>\n<p>Hay alguna cosa m\u00e1s que poner en el httpd.conf, que no est\u00e1 directamente relacionado con XSS, pero que a\u00f1ade otra capa de seguridad:<\/p>\n<p>Header always set Strict-Transport-Security \u00abmax-age=31536000\u00bb env=HTTPS<br \/>\nHeader always set X-Frame-Options \u00abSAMEORIGIN\u00bb<br \/>\nHeader always set X-Content-Type-Options \u00abnosniff\u00bb<br \/>\nHeader edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure<\/p>\n<p>Con esto hacemos, por linea, que que el navegador s\u00f3lo acepte p\u00e1ginas en https, que si metemos el blog en un frame, s\u00f3lo pueda ser desde el mismo dominio, que si subimos ficheros a tr\u00e1ves del blog \u00e9stos no sean analizados y as\u00ed evitar ejecutarlos, y por \u00faltimo, que las cookies que usamos est\u00e9n siempre en https.<\/p>\n<p>\u00a1Saludos!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Siguiendo con la serie de \u00abHaciendo un blog m\u00e1s seguro\u00bb, donde ya hemos visto c\u00f3mo poner un certificado SSL para usar https o como usar las reglas de contenido para indicar a nuestro servidor lo que puede y no puede ejecutar, llegamos a este otro punto: Cross-site scripting (XSS), que no es otra cosa que [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":19134,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[2021,535,2026],"class_list":{"0":"post-19133","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-blog","8":"tag-apache","9":"tag-seguridad","10":"tag-xss","11":"czr-hentry"},"_links":{"self":[{"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/posts\/19133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/comments?post=19133"}],"version-history":[{"count":5,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/posts\/19133\/revisions"}],"predecessor-version":[{"id":19441,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/posts\/19133\/revisions\/19441"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/media\/19134"}],"wp:attachment":[{"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/media?parent=19133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/categories?post=19133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/diego.dehaller.ch\/blog\/wp-json\/wp\/v2\/tags?post=19133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}