PHP es un excelente lenguaje de desarrollo web y un lenguaje flexible, pero vemos algunos errores que los programadores de PHP cometen una y otra vez. Hice la siguiente lista de 10 errores comunes cometidos por los programadores de PHP, la mayoría de los cuales están relacionados con la seguridad. Vea qué tipo de errores ha cometido:
1. No ignore las entidades html
Un sentido común básico: todas las entradas que no sean de confianza (especialmente los datos enviados por los usuarios desde formularios) deben cambiarse antes de generarlas.
echo $_GET['nombre de uso'];
Este ejemplo puede generar:
<script>/*Script para cambiar la contraseña de administrador o establecer cookies*/</script>
Este es un riesgo de seguridad obvio a menos que se asegure de que sus usuarios escriban correctamente.
Cómo solucionarlo:
Necesitamos convertir "< ", ">", "y", etc. en una representación HTML correcta (<, >' y "). Las funciones htmlspecialchars y htmlentities() hacen exactamente esto.
El método correcto: echo htmlspecialchars ( $_GET['username'], ENT_QUOTES);
2. No ignore la entrada de SQL. Una vez hablé de este tema en un artículo La forma más sencilla de prevenir la inyección de SQL (php+mysql) y me dio un método simple. ya tienen magic_quotes activado en php.ini para que no tengan que preocuparse por esto, pero no todas las entradas provienen de $_GET, $_POST o $_COOKIE
.
Como en la forma más sencilla de evitar la inyección de SQL (php+mysql), sigo recomendando
la forma correcta de utilizar la función mysql_real_escape_string():
<?php
$sql = “ACTUALIZAR usuarios SET
nombre='.mysql_real_escape_string($nombre).'
DONDE id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. Uso incorrecto de funciones relacionadas con el encabezado HTTP: header(), session_start(), setcookie()
¿Alguna vez se ha encontrado con esta advertencia?" Advertencia: No se puede agregar información de encabezado: los encabezados ya se enviaron [....]
Cada vez que se descarga una página web del servidor, la salida del servidor se divide en dos partes: encabezados y cuerpo.
El encabezado contiene algunos datos no visuales, como cookies. La cabeza siempre llega primero. La parte de texto incluye HTML visual, imágenes y otros datos.
Si output_buffering está configurado en Off, se deben llamar todas las funciones relacionadas con el encabezado HTTP antes de que haya salida. El problema es que cuando desarrolla en un entorno y lo implementa en otro entorno, la configuración del buffer de salida puede ser diferente. Como resultado, la redirección se detuvo y la cookie y la sesión no se configuraron correctamente...
Cómo solucionarlo:
Asegúrese de llamar a las funciones relacionadas con el encabezado http antes de generar y configurar output_buffering = Off
.
4. Exija o incluya archivos que utilicen datos no seguros. Nuevamente: no confíe en datos que no haya declarado explícitamente usted mismo. No incluya ni requiera archivos obtenidos de $_GET, $_POST o $_COOKIE.
Por ejemplo:
index.php
<?
//incluyendo encabezado, configuración, conexión a base de datos, etc.
include($_GET['nombre de archivo']);
//incluido pie de página
?>
Cualquier hacker ahora puede usar: http://www.yourdomain.com/index.php?filename=anyfile.txt
para obtener su información confidencial, o ejecutar un script PHP.
Si enable_url_fopen=On, estás muerto:
Pruebe esta entrada:
http://www.yourdomain.com/index.… n.com%2Fphphack.php
Ahora su página web contiene la salida de http://www.youaredoomed.com/phphack.php . Los piratas informáticos pueden enviar spam, cambiar contraseñas, archivos eliminados, etc. Todo lo que puedas imaginar.
Cómo solucionarlo:
Debe controlar qué archivos se pueden incluir en las directivas include o require.
Aquí hay una solución rápida pero no completa:
<?
//Incluir sólo los archivos permitidos.
$archivospermitidos = array('archivo1.txt','archivo2.txt','archivo3.txt');
if(in_array((cadena)$_GET['nombre de archivo'],$archivospermitidos)) {
include($_GET['nombre de archivo']);
}
demás{
salir('no permitido');
}
?>
5. Errores gramaticales Los errores gramaticales incluyen todos los errores léxicos y gramaticales que son tan comunes que tengo que enumerarlos aquí. La solución es estudiar detenidamente la sintaxis de PHP y tener cuidado de no omitir ningún corchete, llave, punto y coma o comillas. Además, busque un buen editor y no utilice el Bloc de notas.
6. Se utilizan pocos o ningún proyecto orientado a objetos. Muchos proyectos no utilizan la tecnología orientada a objetos de PHP. Como resultado, el mantenimiento del código requiere mucho tiempo y trabajo. PHP admite cada vez más tecnologías orientadas a objetos y está mejorando cada vez más. No hay ninguna razón por la que no debamos utilizar tecnologías orientadas a objetos.
7. No usar marco
El 95% de los proyectos PHP hacen las mismas cuatro cosas: crear, editar, enumerar y eliminar. Ahora hay muchos marcos MVC que nos ayudan a completar estas cuatro cosas, ¿por qué no los usamos?
8. No conozco la funcionalidad que ya está disponible en PHP.
El núcleo de PHP contiene muchas funciones. Muchos programadores reinventan la rueda una y otra vez. Mucho tiempo perdido. Antes de codificar, busque PHP mamual y busque en Google. ¡Puede encontrar nuevos descubrimientos! exec() en PHP es una función poderosa que puede ejecutar cmd shell y devolver la última línea del resultado de la ejecución en forma de cadena. Por razones de seguridad, puede utilizar EscapeShellCmd()
9. Utilice una versión anterior de PHP
Muchos programadores todavía usan PHP4. El desarrollo en PHP4 no puede aprovechar al máximo el potencial de PHP y todavía existen algunos riesgos de seguridad. Cambie a PHP5, no requiere mucho esfuerzo. La mayoría de los programas PHP4 se pueden migrar a PHP5 con pocos o incluso ningún cambio en las declaraciones. Según una encuesta realizada por http://www.nexen.net, sólo el 12% de los servidores PHP utilizan PHP5, por lo que el 88% de los desarrolladores de PHP siguen utilizando PHP4
10. Cambia las comillas ' o aparecen en la web. page '"? Esto generalmente se debe a que magic_quotes está desactivado en el entorno del desarrollador, pero magic_quotes=on en el servidor implementado. PHP ejecutará repetidamente addlashes() en los datos en GET, POST y COOKIE.
Texto original:
Es una cadena de
citas mágicas sobre:
Es una cuerda
Corre de nuevo
agrega pestañas():
Es una cadena
de salida HTML:
Es una cadena
Otra situación es que el usuario ingresa información de inicio de sesión incorrecta al principio. Después de que el servidor detecta la entrada incorrecta, genera el mismo formulario y requiere que el usuario ingrese nuevamente, lo que hace que la entrada del usuario cambie dos veces.