{"id":27095,"date":"2013-05-22T10:00:26","date_gmt":"2013-05-22T17:00:26","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=27095"},"modified":"2025-01-07T05:38:05","modified_gmt":"2025-01-07T13:38:05","slug":"guia-principiantes-seguridad-php","status":"publish","type":"post","link":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/","title":{"rendered":"Gu\u00eda para principiantes sobre seguridad PHP: validaci\u00f3n y desinfecci\u00f3n de usuarios"},"content":{"rendered":"\n<h2 id=\"h-por-que-asegurar-tu-sitio\" class=\"wp-block-heading\"><b>\u00bfPor qu\u00e9 asegurar tu sitio?<\/b><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">En la actualidad, el Internet es robusto y se extiende taaaanto, hay personas que quieren fastidiar y son maliciosas. Eso resume bastante bien por qu\u00e9 <\/span><a href=\"https:\/\/www.dreamhost.com\/blog\/qa-how-dreamhost-keeps-websites-safe\/\"><span style=\"font-weight: 400;\">deber\u00edas asegurar todo. <\/span><\/a><span style=\"font-weight: 400;\">La seguridad de PHP ya no es una opci\u00f3n; es una necesidad. Los sitios son hackeados a diario y a medida que construyes un sitio usando PHP, debes saber c\u00f3mo mantenerlo a salvo de los malos<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h2 id=\"h-que-es-la-seguridad-de-php\" class=\"wp-block-heading\"><b>\u00bfQu\u00e9 es la seguridad de PHP?<\/b><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">La seguridad de PHP, como su nombre lo indica, est\u00e1 asegurando tu sitio en PHP para ayudar a evitar que los delincuentes obtengan acceso no autorizado a los datos de tu sitio. Te ayuda a mantener la integridad de tus datos y garantiza su disponibilidad seg\u00fan sea necesario. Puedes comenzar a hacer esto en PHP validando y desinfectando los datos en tu p\u00e1gina web, que es lo que compartiremos en este art\u00edculo.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Dado que esta es una publicaci\u00f3n para principiantes sobre validaci\u00f3n b\u00e1sica y desinfecci\u00f3n, quieres obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo <\/span><a href=\"http:\/\/phpsec.org\/\"><span style=\"font-weight: 400;\">mantener un sitio seguro.<\/span><\/a><span style=\"font-weight: 400;\"> Como dice el Maestro Yoda: <\/span><i><span style=\"font-weight: 400;\">&#8220;Mucho que aprender, todav\u00eda tienes&#8221;<\/span><\/i><i><span style=\"font-weight: 400;\">.<\/span><\/i><\/p>\n\n\n\n<h2 id=\"h-validacion-de-informacion-de-usuario-y-algo-sobre-desinfectar\" class=\"wp-block-heading\"><b>Validaci\u00f3n de informaci\u00f3n de usuario y algo sobre desinfectar.<\/b><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Validar la informaci\u00f3n de usuario es el primer y m\u00e1s importante paso para asegurar tu sitio. Validar significa verificar que los datos que ingresan a tu script son el tipo de datos que deseas, est\u00e1n en el formato correcto y tienen la longitud correcta. Sin verificar esto, tu sitio es vulnerable.&nbsp;<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Dependiendo de lo que haga tu script, puedes hacer que el sitio se caiga, muestre informaci\u00f3n incorrecta, otorgue a los malos acceso a obtener informaci\u00f3n de los usuarios y mucho m\u00e1s.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-conoce-los-datos-entrantes\">Conoce los datos entrantes<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">El primer paso para validar tus datos es saber qu\u00e9 datos deben ingresar. Si alguien est\u00e1 tratando de hackear tu sitio, pueden ingresar datos adicionales. Y s\u00ed est\u00e1s aceptando cualquier informaci\u00f3n que ingrese, entonces es vulnerable porque permitimos que las personas hagan lo que quieran.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Imagina que tienes un formulario de usuario que acepta agregar comentarios en una p\u00e1gina. Tienes campos para que alguien agregue un comentario que incluya su nombre, direcci\u00f3n de correo electr\u00f3nico, comentario y un campo oculto del ID de la p\u00e1gina que est\u00e1 comentando. Cuando el usuario env\u00eda un comentario, un script procesa el comentario y lo agrega a una base de datos.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Ahora que tenemos una idea de qu\u00e9 informaci\u00f3n llegar\u00e1 a nuestro script, debemos verificar que tenemos los datos correctos, el tipo de datos, un l\u00edmite en la longitud de los datos y que no estemos usando nada m\u00e1s all\u00e1 de los datos que necesitamos.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Dado que este formulario de comentarios se enviar\u00e1 a nuestro script como una variable <\/span><a href=\"http:\/\/www.php.net\/manual\/en\/reserved.variables.post.php\"><span style=\"font-weight: 400;\">POST<\/span><\/a><span style=\"font-weight: 400;\">, no queremos recorrer cada campo del POST sin saber qu\u00e9 es lo que queremos. Aqu\u00ed hay un ejemplo de una variable POST que se env\u00eda a nuestro script:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">Array<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">(<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">[name] =&gt; Jerry<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">[email] =&gt;jerryw@fake.dreamhost.com<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">[comment] =&gt; This is a test comment that is coming to our site<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">[submit] =&gt; Post Comment<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">[page_ID] =&gt; 37<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">)<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto muestra que tenemos exactamente los datos que solicitamos, pero si un hacker inform\u00e1tico desea agregar informaci\u00f3n adicional (como un campo extra), entonces podr\u00eda haber posibilidades de corromper tu sitio. Para un formulario como este, recomiendo nombrar a cada campo, para que sepas que solo est\u00e1 utilizando lo que necesita tu script. Por ejemplo, en lugar de recorrer <\/span><a href=\"http:\/\/www.php.net\/manual\/en\/reserved.variables.post.php\"><span style=\"font-weight: 400;\">$_POST<\/span><\/a><span style=\"font-weight: 400;\">, puedes nombrar a cada campo de esta manera:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$_POST[ \u2018name\u2019 ]<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$_POST[ \u2018email\u2019 ]<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto ayudar\u00e1 a aceptar s\u00f3lo los datos que est\u00e1s esperando e ignorar el resto.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">A continuaci\u00f3n, debes saber cu\u00e1les se supone que son los datos. Por ejemplo, el $_POST[ \u2018page_ID\u2019 ] va a ser un n\u00famero entero, porque es solo una identificaci\u00f3n de p\u00e1gina que es un n\u00famero. Entonces, sabemos que no queremos aceptar caracteres o letras especiales para esto. Sabemos que $_POST[ \u2018email\u2019 ] es una direcci\u00f3n de correo electr\u00f3nico, por lo que queremos verificar el formato para asegurarnos de que sea una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida. En este ejemplo, pondremos que no queremos permitir comentarios de m\u00e1s de 256 caracteres<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<p class=\"has-text-align-center\"><b><i>\u00bfTe preguntas c\u00f3mo DreamHost mantiene seguro tu sitio web?<\/i><\/b> <a href=\"https:\/\/www.dreamhost.com\/blog\/qa-how-dreamhost-keeps-websites-safe\/\"><b><i>Echa un vistazo a estas preguntas y respuestas con nuestro Director de Tecnolog\u00eda<\/i><\/b><i><span style=\"font-weight: 400;\">.<\/span><\/i><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verificacion-del-tipo-de-datos-y-limpieza\">Verificaci\u00f3n del tipo de datos y limpieza<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">Ahora que sabemos qu\u00e9 datos estamos aceptando, y sabemos lo que est\u00e1 permitido ser, verifiquemos el tipo de datos que ingresan.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">La mayor\u00eda de los datos que provienen de una publicaci\u00f3n se consideran una cadena. A veces puedes tener campos como moneda entrante o una ID de p\u00e1gina (como en este ejemplo), que sabemos que solo se supone que es un n\u00famero.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Primero, cuando recibimos datos, queremos verificar si los datos que necesitamos est\u00e1n all\u00ed. Entonces, queremos verificar si realmente tiene algo all\u00ed. Aqu\u00ed hay una manera de verificar si un campo realmente lleg\u00f3.<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( isset( $_POST[ \u2018name\u2019 ] ) )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$name = strip_tags( trim( $_POST[ \u2018name\u2019 ] ) );<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Aqu\u00ed verificamos si el nombre est\u00e1 all\u00ed con la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.isset.php\"><span style=\"font-weight: 400;\">isset()<\/span><\/a><span style=\"font-weight: 400;\">. Esto confirma si la variable est\u00e1 all\u00ed y tambi\u00e9n verifica que la variable no sea NULL. Tambi\u00e9n introduje otras dos funciones <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.strip-tags.php\"><span style=\"font-weight: 400;\">strip_tag()<\/span><\/a><span style=\"font-weight: 400;\"> y <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.trim.php\"><span style=\"font-weight: 400;\">trim()<\/span><\/a><span style=\"font-weight: 400;\">. La funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.strip-tags.php\"><span style=\"font-weight: 400;\">strip_tags()<\/span><\/a><span style=\"font-weight: 400;\"> elimina todas las etiquetas HTML y PHP de una variable. Como sabemos que ese nombre es solo el nombre de una persona y no necesita enlaces, o posiblemente c\u00f3digo malicioso, no necesitamos ninguna etiqueta. Entonces, si una persona agregara &lt;a href=\u201dhttp:\/\/www.google.com\u201d&gt;Jerry&lt;\/a&gt;, solo permitir\u00eda asignar la cadena &#8220;Jerry&#8221; a la variable. La funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.trim.php\"><span style=\"font-weight: 400;\">trim()<\/span><\/a><span style=\"font-weight: 400;\"> simplemente elimina cualquier espacio en blanco desde el principio y el final de la cadena (Nota: si observas esta funci\u00f3n en el sitio web de PHP, puedes obtener informaci\u00f3n sobre otros caracteres que puedes eliminar con esta funci\u00f3n. <\/span><span style=\"font-weight: 400;\">P<\/span><span style=\"font-weight: 400;\">ara esta pu<\/span><span style=\"font-weight: 400;\">blicaci\u00f3n<\/span><span style=\"font-weight: 400;\">, sin embargo, solo estamos quitando el espacio en blanco).<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">A continuaci\u00f3n, verificaremos el tipo de ID de nuestra p\u00e1gina. T\u00e9cnicamente, esto se puede hacer de dos maneras (hay algunas otras que no revisar\u00e9 en esta publicaci\u00f3n). Primero, podemos probar si el ID de la p\u00e1gina es un n\u00famero entero usando esto:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( is_int( $_POST[ \u2018page_ID\u2019 ] ) )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$pageID = $_POST[ \u2018page_ID\u2019 ];<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto utiliza la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.is-int.php\"><span style=\"font-weight: 400;\">is_int()<\/span><\/a><span style=\"font-weight: 400;\"> de PHP para probar si $_POST[ \u2018page_id\u2019 ] es en realidad un n\u00famero entero. Si es as\u00ed, entonces asigna la variable a $pageID. Hay funciones similares que puedes usar, <\/span><a href=\"http:\/\/www.php.net\/manual\/en\/function.is-bool.php\"><span style=\"font-weight: 400;\">is_bool()<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a href=\"http:\/\/www.php.net\/manual\/en\/function.is-float.php\"><span style=\"font-weight: 400;\">is_float()<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a href=\"http:\/\/www.php.net\/manual\/en\/function.is-numeric.php\"><span style=\"font-weight: 400;\">is_numberic()<\/span><\/a><span style=\"font-weight: 400;\"> y algunas otras.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">La otra forma de hacer esto es asignar $_POST[ \u2018page_ID\u2019 ] a la variable usando el <\/span><a href=\"http:\/\/us3.php.net\/language.types.type-juggling\"><span style=\"font-weight: 400;\">forzado de tipos.<\/span><\/a><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Aqu\u00ed hay un ejemplo:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$pageID = (int) $_POST[ \u2018page_ID\u2019 ];<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">El uso de (int) obliga al page_ID a ser un n\u00famero entero. Entonces, si el valor que ingresas es una cadena, en lugar de un n\u00famero entero, lo forzar\u00e1 a ser un n\u00famero entero o cero (0) si no es un n\u00famero entero. Luego, podr\u00edas probar si el valor es igual a 0 y devolver un error si lo es.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Ahora, echemos un vistazo a la secci\u00f3n de comentarios. La secci\u00f3n de comentarios podr\u00e1 agregar etiquetas, en caso de que alguien quiera agregar un enlace, por lo que no queremos usar la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.strip-tags.php\"><span style=\"font-weight: 400;\">strip_tags()<\/span><\/a><span style=\"font-weight: 400;\">, ya que esto eliminar\u00eda su etiqueta &lt;a&gt;. Para lograr esto, utilizaremos la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.htmlentities.php\"><span style=\"font-weight: 400;\">htmlentities()<\/span><\/a><span style=\"font-weight: 400;\">. Esta funci\u00f3n convierte caracteres en entidades HTML. Por ejemplo, el car\u00e1cter \u2018&lt;\u2019 se traducir\u00eda a \u2018&amp; lt;\u2019. Aqu\u00ed hay un ejemplo de c\u00f3mo hacemos esto para la secci\u00f3n de comentarios:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( isset( $_POST[ \u2018comment\u2019 ] ) )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$comment = htmlentities ( trim ( $_POST[ \u2018comment\u2019 ] ) , ENT_NOQUOTES );<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Aqu\u00ed, verificamos si el campo de comentarios lleg\u00f3, y si lo hizo, lo asignamos a la variable $comment usando <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.htmlentities.php\"><span style=\"font-weight: 400;\">htmlentities()<\/span><\/a><span style=\"font-weight: 400;\">. Por lo tanto, si se incluyen etiquetas, estas se convertir\u00e1n. Digamos que alguien agrega el enlace:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">&lt;a href=\u201dhttps:\/\/www.dreamhost.com\/\u201d&gt;Awesome Hosting&lt;\/a&gt;<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Despu\u00e9s de que pasa por la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.htmlentities.php\"><span style=\"font-weight: 400;\">htmlentities()<\/span><\/a><span style=\"font-weight: 400;\"> anterior, ser\u00e1 esto:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">&amp;lt;a href=\u201dhttps:\/\/www.dreamhost.com\/\u201d&amp;gt;Awesome Hosting&amp;lt;\/a&amp;gt;<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto est\u00e1 utilizando la opci\u00f3n ENT_NOQUOTES. Si echas un vistazo a esta funci\u00f3n en el sitio web de PHP, hay otras opciones, dependiendo de lo que quieras hacer<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-comprobando-la-longitud-de-las-variables\">Comprobando la longitud de las variables<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto puede no parecer cr\u00edtico, pero verificar la longitud de las variables es bastante importante. Sin verificar las variables, un usuario podr\u00eda causar problemas de desbordamiento del b\u00fafer. No solo eso, sino que si tienes una tabla en tu base de datos con el nombre como comentario, y solo puedes tener 256 caracteres. Si un usuario escribe 356 caracteres, parte de su publicaci\u00f3n se cortar\u00e1. Si verificas la longitud, puedes informar al usuario que necesita acortar su comentario.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Para verificar la longitud de una cadena, usa la funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.strlen.php\"><span style=\"font-weight: 400;\">strlen()<\/span><\/a><span style=\"font-weight: 400;\">. Esta funci\u00f3n te devuelve la longitud de una cadena. Aqu\u00ed hay un ejemplo:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( strlen( $_POST[ \u2018comment\u2019 ] ) &lt;= 256 )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$comment = htmlentities ( trim ( $_POST[ \u2018comment\u2019 ] ) , ENT_NOQUOTES );<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Aqu\u00ed, verificamos si la longitud de $_POST[ \u2018comment\u2019 ] es m\u00e1s corta o igual a 256. Si es as\u00ed, la asignamos a la variable. Otra opci\u00f3n para verificar que la longitud de la cadena es suficiente para ser un comentario es algo como esto:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( strlen( $_POST[ \u2018comment\u2019] ) &gt;= 1 &amp;&amp; strlen( $_POST[ \u2018comment\u2019 ] ) &lt;= 256 )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$comment = htmlentities ( trim ( $_POST[ \u2018comment\u2019 ] ) , ENT_NOQUOTES );<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto verifica que la longitud del comentario sea m\u00e1s de un car\u00e1cter<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-es-el-formato-correcto-desde-usuario\">\u00bfEs el formato correcto desde usuario?<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">Asegurarse de que el formato sea apropiado es importante para verificar que la informaci\u00f3n pueda usarse correctamente m\u00e1s adelante, pero tambi\u00e9n para el control de errores en el sitio. En esta publicaci\u00f3n, usaremos la funci\u00f3n PHP <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.preg-match.php\"><span style=\"font-weight: 400;\">preg_match()<\/span><\/a><span style=\"font-weight: 400;\"> con expresiones regulares para lograr esto.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Antes de entrar en los comandos reales que usaremos, quer\u00eda mencionar que no explicar\u00e9 las expresiones regulares en esta publicaci\u00f3n. Si quieres obtener m\u00e1s informaci\u00f3n, hay tutoriales en l\u00ednea. Para esta publicaci\u00f3n, tomaremos nuestras expresiones regulares de <\/span><a href=\"http:\/\/regexlib.com\/\"><span style=\"font-weight: 400;\">http:\/\/regexlib.com<\/span><\/a><span style=\"font-weight: 400;\">, que tiene bastantes expresiones regulares que puedes usar.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">La funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.preg-match.php\"><span style=\"font-weight: 400;\">preg_match()<\/span><\/a><span style=\"font-weight: 400;\"> busca, en una variable, un patr\u00f3n de expresi\u00f3n regular para ver si coincide. Por ejemplo, verifiquemos si nuestra direcci\u00f3n de correo electr\u00f3nico es v\u00e1lida:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( preg_match( \u2018\/^[w-.]+@([w-]+.)+[w-]{2,4}$\/\u2019, $_POST[ \u2019email\u2019 ] ) )<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$emailAddress = trim( $_POST[ \u2019email\u2019 ] );<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Esto toma una expresi\u00f3n regular, que en este caso es&nbsp; \u2018^[w-.]+@([w-]+.)+[w-]{2,4}$\u2019 , y comprueba el $_POST[ \u2018email\u2019 ] para verificar que coincida con ese patr\u00f3n. Seg\u00fan el sitio regexlib.com, coincidir\u00e1 con los siguientes formatos:<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">joe@aol.com | joe@wrox.co.uk | joe@domain.info<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Si el usuario no usa uno de los formatos anteriores, devolver\u00e1 falso, y la variable $emailAddress no recibir\u00e1 la direcci\u00f3n de correo electr\u00f3nico asignada.&nbsp; <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.preg-match.php\"><span style=\"font-weight: 400;\">preg_match()<\/span><\/a><span style=\"font-weight: 400;\"> permite verificar el formato de cualquier variable, siempre que la expresi\u00f3n regular sea correcta. Para usarlo, puedes hacer lo anterior:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">if ( preg_match( \u2018\/&lt;ENTER EXPRESSION HERE&gt;\/\u2019, &lt;INSERT VARIABLE HERE&gt; ) )<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Cuando lo uses de esta forma, aseg\u00farate de agregar las barras diagonales delante y detr\u00e1s de la expresi\u00f3n regular como se muestra arriba.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Las expresiones regulares son bastante poderosas y se pueden usar para probar muchos patrones diferentes. Puedes probar todo, desde n\u00fameros de tel\u00e9fono hasta los tipos de caracteres. Echa un vistazo a <\/span><a href=\"http:\/\/regexlib.com\/\"><span style=\"font-weight: 400;\">http:\/\/regexlib.com<\/span><\/a><span style=\"font-weight: 400;\"> para ver m\u00e1s patrones que puedes usar<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h2 id=\"h-desinfectar-tus-datos-un-poco-mas-de-informacion\" class=\"wp-block-heading\"><b>Desinfectar tus datos: Un poco m\u00e1s de informaci\u00f3n<\/b><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">La desinfecci\u00f3n de datos es otro elemento esencial de la seguridad de PHP. En nuestra \u00faltima secci\u00f3n, validando la entrada del usuario y algo de desinfecci\u00f3n, desinfectamos un poco como parte de la limpieza. Validamos nuestros datos verificando si coincid\u00edan con los datos que quer\u00edamos. Aqu\u00ed hay dos consejos m\u00e1s para ayudar a proteger tu sitio de los malos<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-inyeccion-mysql\">Inyecci\u00f3n MySQL<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">\u00bfQu\u00e9 es la inyecci\u00f3n de MySQL? B\u00e1sicamente, es cuando los malos intentan manipular tu sitio para agregar SQL a <\/span><span style=\"font-weight: 400;\">t<\/span><span style=\"font-weight: 400;\">u comando SQL para obtener m\u00e1s informaci\u00f3n, modificar o eliminar cosas de tu base de datos. Aqu\u00ed hay un ejemplo de una inyecci\u00f3n SQL simple:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$userID = $_POST[ \u2018user_id\u2019 ]; \/\/&nbsp; This is a value of \u201c\u2018 OR 1\u2032\u201d;<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$query = \u201cSELECT * FROM users WHERE user_id = \u2018$userID\u2019\u201d;<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">\/\/output: SELECT * FROM users WHERE user_id = \u201d OR 1\u201d<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Este ejemplo muestra un script que no se ha protegido, por lo que el creador del script ingres\u00f3 el $_POST[ \u2018user_id\u2019 ] directamente en el SQL del sitio. Alg\u00fan Hacker vino y decidi\u00f3 cambiar el valor en la forma oculta de un n\u00famero a &#8220;OR 1&#8221;. Ahora, si esto se us\u00f3 para consultar a un usuario, en realidad sacar\u00eda a todos los usuarios de la tabla porque cuando cambias el script a WHERE user_id = \u2018\u2019 OR 1, extraer\u00e1 todas las filas de la tabla.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Wow, entonces, \u00bfc\u00f3mo detenemos este truco? Afortunadamente, esta es una gu\u00eda para principiantes, \u00a1as\u00ed que tenemos el m\u00e9todo perfecto para ti!<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">PHP tiene una funci\u00f3n llamada <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.mysql-real-escape-string.php\"><span style=\"font-weight: 400;\">mysql_real_escape_string()<\/span><\/a><span style=\"font-weight: 400;\"> que ayuda a prevenir la inyecci\u00f3n. Antes de usar esta funci\u00f3n, debes validar todos los datos y desinfectarlos para asegurarte de que est\u00e9n limpios. Supongamos que validamos todos los datos para nuestro formulario de comentarios y ahora queremos agregarlos a la base de datos. Pero tambi\u00e9n digamos que soy un tipo malo y trat\u00f3 de inyectar algunas cosas secretas en tu sitio maliciosamente. Por lo tanto, en realidad \u00e9l puso page_ID como \u2018OR 1\u2019, como lo mencionamos anteriormente, y te olvid\u00f3 de desinfectar el page_ID.&nbsp; (S\u00e9 que realmente no te olvidar\u00edas de hacer eso)<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">C\u00f3mo utilizamos nuestra funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.mysql-real-escape-string.php\"><span style=\"font-weight: 400;\">mysql_real_escape_string()<\/span><\/a><span style=\"font-weight: 400;\">, evitamos la inyecci\u00f3n. Aqu\u00ed hay un ejemplo:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$pageID = mysql_real_escape_string( $_POST[ \u2018page_ID\u2019 ] ); \/\/&nbsp; This is a value of \u201c\u2018 OR 1\u2032\u201d;<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">$query = \u201cSELECT * FROM pages WHERE page_id = \u2018$pageID\u2019\u201d;<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">\/\/output: SELECT * FROM pages WHERE page_id = \u2018\u2019 OR 1 \u201d<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Como puedes ver en el resultado de esto, el <\/span><span style=\"font-weight: 400;\">\u2018Or<\/span><span style=\"font-weight: 400;\"> 1<\/span><span style=\"font-weight: 400;\">\u2019<\/span><span style=\"font-weight: 400;\">&nbsp; en realidad se convirti\u00f3 en&nbsp; \u2019 OR 1 .}, lo que impidi\u00f3 la modificaci\u00f3n del d\u00f3nde <\/span><span style=\"font-weight: 400;\">(<\/span><i><span style=\"font-weight: 400;\">WHERE<\/span><\/i><span style=\"font-weight: 400;\">), lo que detuvo que salieran datos adicionales. Nuevamente, este es un primer paso para detener la inyecci\u00f3n y sugiero leer m\u00e1s sobre c\u00f3mo prevenir esto. PHP tiene otros m\u00e9todos para acceder a una base de datos<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/www.dreamhost.com\/blog\/jetpack-premium-dreampress\/\"><b><i>\u00a1Los planes DreamPress Plus y Pro ahora incluyen Jetpack Premium<\/i><\/b><\/a><b><i> y sus incre\u00edbles ventajas de seguridad de WordPress!<\/i><\/b><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-solo-un-poco-de-inyeccion-cruzada\">Solo un poco de inyecci\u00f3n cruzada<\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">Como ya hablamos mucho, quer\u00eda escribir un poco m\u00e1s sobre la inyecci\u00f3n cruzada o <\/span><i><span style=\"font-weight: 400;\">Cross-Site<\/span><\/i><span style=\"font-weight: 400;\">. Es cuando los delincuentes inyectan datos en tu sitio, que luego se enviar\u00e1n al lado del cliente final, para obtener datos de los usuarios de manera malintencionada, modificar tu sitio para cambiar o eliminar datos. La inyecci\u00f3n entre sitios es una gran vulnerabilidad de seguridad. Entonces, \u00bfc\u00f3mo puedes ayudar a evitar que esto suceda?<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Bueno, primero puedes usar esa funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.htmlentities.php\"><span style=\"font-weight: 400;\">htmlentities()<\/span><\/a><span style=\"font-weight: 400;\"> de confianza que usamos anteriormente. El uso de esto garantiza que cualquier dato que haga eco sea m\u00e1s seguro, por lo que los <\/span><a href=\"https:\/\/www.dreamhost.com\/blog\/worried-about-hackers-heres-what-you-can-learn-from-election-cybersecurity-issues\/\"><span style=\"font-weight: 400;\">molestos hackers<\/span><\/a><span style=\"font-weight: 400;\"> no podr\u00e1n inyectarse en tu sitio. Por ejemplo, supongamos que un usuario visita tu sitio, comenta en tu p\u00e1gina y agrega lo siguiente como su c\u00f3digo<\/span><span style=\"font-weight: 400;\">:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">&lt;iframe src=\u201dhttp:\/\/bad-dude-hacker-mafia.com\/xss-injection.php\u201d height=0 width=0 \/&gt;<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Si no hicimos nada para proteger nuestro sitio, y esto se mostrar\u00eda en la p\u00e1gina cada vez que alguien lo viera, podr\u00edan recopilar datos, mostrar informaci\u00f3n en el sitio, etc. Pero, si usamos nuestra funci\u00f3n <\/span><a href=\"http:\/\/php.net\/manual\/en\/function.htmlentities.php\"><span style=\"font-weight: 400;\">htmlentities()<\/span><\/a><span style=\"font-weight: 400;\">, podemos evitar esto:<\/span><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">echo htmlentities ( trim ( $comment ) , ENT_NOQUOTES );<\/span><\/code><\/p>\n\n\n\n<p><code><span style=\"font-weight: 400;\">\/\/Output: &amp;lt;iframe src=\u201dhttp:\/\/bad-dude-hacker-mafia.com\/xss-injection.php\u201d height=0 width=0 \/&amp;gt;<\/span><\/code><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Como puedes ver en el resultado, esto puede mostrarse como texto, pero en realidad no abrir\u00e1 el sitio bad-dude-hacker-mafia.com y no se <\/span><span style=\"font-weight: 400;\">causar\u00edan<\/span><span style=\"font-weight: 400;\"> estragos<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<h2 id=\"h-yoda-para-el-camino\" class=\"wp-block-heading\"><b>Yoda para el camino<\/b><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">\u00a1Bueno! Ahora has aprendido c\u00f3mo proteger tu sitio PHP utilizando validaci\u00f3n, desinfecci\u00f3n, prevenci\u00f3n de inyecci\u00f3n MySQL y algunas habilidades de inyecci\u00f3n entre sitios. Recuerda, esto es solo el comienzo. Hay <\/span><a href=\"http:\/\/www.sitepoint.com\/php-security-blunders\/\"><span style=\"font-weight: 400;\">mucha informaci\u00f3n en l\u00ednea <\/span><\/a><span style=\"font-weight: 400;\">para ayudar a <\/span><a href=\"http:\/\/php.net\/manual\/en\/security.php\"><span style=\"font-weight: 400;\">proteger tu sitio, y cuanto m\u00e1s sepas, m\u00e1s seguro estar\u00e1s<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><span style=\"font-weight: 400;\">Transmite lo que has aprendido<\/span><span style=\"font-weight: 400;\">,<\/span><span style=\"font-weight: 400;\"> Luke<\/span><span style=\"font-weight: 400;\">.<\/span> <span style=\"font-weight: 400;\">H<\/span><span style=\"font-weight: 400;\">ay otro Skywalker<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<\/blockquote>\n\n\n\n<p><span style=\"font-weight: 400;\">\u00a1S\u00ed, Yoda es muy sabio!<\/span><\/p>\n\n\n\n<p class=\"has-text-align-center\"><b>\u00bfTienes problemas con otro proveedor de hosting web? <\/b><a href=\"https:\/\/www.dreamhost.com\/es\/hosting\/\"><b>\u00a1C\u00e1mbiate al galardonado hosting de DreamHost!<\/b><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfPor qu\u00e9 asegurar tu sitio? En la actualidad, el Internet es robusto y se extiende taaaanto, hay personas que quieren fastidiar y son maliciosas. Eso resume bastante bien por qu\u00e9 deber\u00edas asegurar todo. La seguridad de PHP ya no es una opci\u00f3n; es una necesidad. Los sitios son hackeados a diario y a medida que [&hellip;]<\/p>\n","protected":false},"author":1035,"featured_media":19783,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_metadesc":"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP","toc_headlines":"[[\"h-por-que-asegurar-tu-sitio\",\"\u00bfPor qu\u00e9 asegurar tu sitio?\"],[\"h-que-es-la-seguridad-de-php\",\"\u00bfQu\u00e9 es la seguridad de PHP?\"],[\"h-validacion-de-informacion-de-usuario-y-algo-sobre-desinfectar\",\"Validaci\u00f3n de informaci\u00f3n de usuario y algo sobre desinfectar.\"],[\"h-desinfectar-tus-datos-un-poco-mas-de-informacion\",\"Desinfectar tus datos: Un poco m\u00e1s de informaci\u00f3n\"],[\"h-yoda-para-el-camino\",\"Yoda para el camino\"]]","hide_toc":false,"footnotes":""},"categories":[11668],"tags":[],"class_list":["post-27095","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Guia para principiantes sobre seguridad PHP - DreamHost<\/title>\n<meta name=\"description\" content=\"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gu\u00eda para principiantes sobre seguridad PHP: validaci\u00f3n y desinfecci\u00f3n de usuarios\" \/>\n<meta property=\"og:description\" content=\"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-05-22T17:00:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-07T13:38:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DreamHost\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DreamHost\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Guia para principiantes sobre seguridad PHP - DreamHost","description":"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/","og_locale":"en_US","og_type":"article","og_title":"Gu\u00eda para principiantes sobre seguridad PHP: validaci\u00f3n y desinfecci\u00f3n de usuarios","og_description":"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP","og_url":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2013-05-22T17:00:26+00:00","article_modified_time":"2025-01-07T13:38:05+00:00","og_image":[{"width":900,"height":600,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg","type":"image\/jpeg"}],"author":"DreamHost","twitter_card":"summary_large_image","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"DreamHost","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#article","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/"},"author":{"name":"DreamHost","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/46d16fd5c5cafab6b32df1c79391f17e"},"headline":"Gu\u00eda para principiantes sobre seguridad PHP: validaci\u00f3n y desinfecci\u00f3n de usuarios","datePublished":"2013-05-22T17:00:26+00:00","dateModified":"2025-01-07T13:38:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/"},"wordCount":2594,"publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg","articleSection":["Tutoriales"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/","name":"Guia para principiantes sobre seguridad PHP - DreamHost","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#primaryimage"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg","datePublished":"2013-05-22T17:00:26+00:00","dateModified":"2025-01-07T13:38:05+00:00","description":"La seguridad PHP te ayuda a prevenir que los malos ganen acceso desautorizado de los datos de tu sitio. Revisa c\u00f3mo validar y limpiar tu informaci\u00f3n con PHP","breadcrumb":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#primaryimage","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2013\/05\/DreamHost-PHP-Security.jpg","width":900,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/guia-principiantes-seguridad-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dhblog.dream.press\/blog\/"},{"@type":"ListItem","position":2,"name":"Gu\u00eda para principiantes sobre seguridad PHP: validaci\u00f3n y desinfecci\u00f3n de usuarios"}]},{"@type":"WebSite","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website","url":"https:\/\/www-dev.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www-dev.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www-dev.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/46d16fd5c5cafab6b32df1c79391f17e","name":"DreamHost","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2020\/03\/dreamhost-logo-mark-150x150.jpg","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2020\/03\/dreamhost-logo-mark-150x150.jpg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2020\/03\/dreamhost-logo-mark-150x150.jpg","caption":"DreamHost"},"description":"Leaders in web hosting, domain registration, and cloud services for individuals, small businesses, and developers!","url":"https:\/\/www-dev.dreamhost.com\/blog\/author\/dreamhost\/"}]}},"lang":"es","translations":{"es":27095},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/27095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1035"}],"replies":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/comments?post=27095"}],"version-history":[{"count":8,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/27095\/revisions"}],"predecessor-version":[{"id":61004,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/27095\/revisions\/61004"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/19783"}],"wp:attachment":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=27095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=27095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=27095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}