Estoy aprendiendo PHP por mi cuenta y me he dado cuenta de las strip_tags () función. Es esta la única manera de aumentar la seguridad?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

Pregunta

Soy nuevo en PHP y estoy siguiendo un tutorial aquí: Enlace

Es bastante miedo de que un usuario puede escribir código PHP en una entrada y, básicamente, atornillar su sitio, ¿verdad?

Bueno, ahora estoy un poco paranoico y prefiero aprender las mejores prácticas de seguridad de la derecha del palo que trate de meter en una vez que tengo algunos hábitos en mí.

Desde que estoy totalmente nuevo a PHP (literalmente lo recogió hace dos días), puedo aprender casi cualquier cosa fácilmente sin confundirse.

De qué otra forma puedo evitar travesuras en mi sitio? : D

¿Fue útil?

Solución

Hay varias cosas a tener en cuenta al desarrollar una aplicación PHP, strip_tags() sólo ayuda con uno de esos. En realidad strip_tags(), aunque son eficaces, incluso podría hacer más de lo necesario:. Convertir caracteres posiblemente peligrosas con htmlspecialchars() debe incluso ser preferible, dependiendo de la situación

En general, todo se reduce a dos sencillas reglas: a filtrar toda la entrada, escapar toda la salida Ahora tiene que entender lo que constituye exactamente entrada y salida..

La salida es fácil, todo lo que su aplicación envía al navegador es de salida, a fin de utilizar htmlspecialchars() o cualquier otra función escapar cada vez que los datos de salida que no escribe usted mismo.

de entrada están disponibles datos no codificados en el código PHP: las cosas que viene de una forma a través de POST, a partir de una cadena de consulta a través de GET, de las galletas, todos los debe ser filtrado en la forma más adecuada en función de sus necesidades. Incluso los datos procedentes de una base de datos deben considerarse potencialmente peligrosos; sobre todo en servidor compartido nunca se sabe si la base de datos se ha visto comprometida en otro lugar de una manera que podría afectar a su aplicación también.

Existen diferentes maneras de filtrar los datos: listas blancas para permitir únicamente los valores seleccionados, validación basado en el formato de entrada expcted y así sucesivamente. Una cosa que nunca le sugiero es tratar la fijación de los datos que recibe de los usuarios:. Tener que jugar por sus reglas, si no obtiene lo que espera, rechazar la solicitud en vez de intentar limpiarlo

especial atención, si usted trata con una base de datos, se debe prestar a las inyecciones SQL: ese tipo de ataque se basa en no construir adecuadamente las cadenas de consulta se envía a la base de datos, por lo que el atacante puede falsificar ellos tratando de ejecutar la instrucción maliciosa . Siempre debe utilizar una función de escape como mysql_real_escape_string() o, mejor, usar comandos preparados con rel="nofollow la mysqli extensión o usando PDO .

Hay más que decir sobre este tema, pero estos puntos debe empezar.

HTH

Editar : para aclarar, por "entrada de filtrado" Me refiero a decidir lo que es bueno y lo que es malo, no modifica los datos de entrada de ninguna manera. Como ya he dicho que nunca había modifico los datos del usuario a menos que sea salida al navegador.

Otros consejos

strip_tags no es el mejor que se puede utilizar en realidad, no protege en todos los casos.

HTML Purificar: http://htmlpurifier.org/

es una verdadera buena opción para el procesamiento de los datos de entrada, sin embargo, sí todavía no se atienden a todos los casos de uso -. Pero definitivamente es un buen punto de partida

Tengo que decir que el tutorial usted ha mencionado es un poco engañoso por la seguridad :

  

Es importante tener en cuenta que nunca se quiere trabajar directamente con el $ _GET y $ _POST valores. Siempre envíe su valor a una variable local, y trabajar con él allí. Hay varias implicaciones de seguridad involucrados con los valores cuando se accede directamente (o   salida) $ _GET y $ _POST.

Esto no tiene sentido. Copia de un valor a una variable local no es más seguro que usar directamente las variables $ _GET o $ _POST.

De hecho, no hay nada inherentemente inseguro acerca de los datos. Lo que importa es lo que haces con él . Hay razones perfectamente legítimas por las que pueda tener una variable $ _POST que contiene ; rm -rf /. Esto está muy bien para la salida en una página HTML o almacenar en una base de datos, por ejemplo.

El único momento en que no es seguro es cuando se está utilizando un comando como system o exec. Y ese es el tiempo que necesita para preocuparse por lo que las variables que está utilizando. En este caso, lo que probablemente desee utilizar algo así como una lista blanca, o al menos ejecutar sus valores a través de escapeshellarg.

Del mismo modo, con el envío de consultas a bases de datos, enviando a los navegadores HTML, y así sucesivamente. Escapar de los datos correctos antes de enviarlo a otro lugar, utilizando el método de escape adecuada para el destino.

strip_tags elimina todas las piezas de html. soluciones más sofisticadas se basan en listas blancas (es decir, permitiendo que las etiquetas HTML específicas). una buena biblioteca de listas blancas es htmlpurifyer http://htmlpurifier.org/

y por supuesto en el lado de la base de datos de las cosas utilizar funciones como mysql_real_escape_string o pg_escape_string

Bueno, probablemente estoy equivocado, pero ... En toda la literatura, que he leído, la gente decir que es mucho mejor usar htmlspellchars.

Además, en lugar necesario convertir los datos de entrada. (Por int por ejemplo, si está seguro de que es id de usuario).

Bueno, de antemano, cuando se comenzará a utilizar la base de datos -. Mysql_real_escape_string uso en lugar de mysql_escape_string para evitar inyecciones SQL (en algunos libros antiguos se mysql_escape_string siendo escrito)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top