2010-03-26 20 views
5

Solo quería saber cuáles son algunas de las técnicas básicas de seguridad de PHP que debería usar al crear una página web que acepte artículos.pregunta de seguridad de PHP?

Soy bastante nuevo en PHP y me preguntaba qué es lo que mantendrá la fortaleza hasta que sea un experto en seguridad.

Respuesta

1

Esto es muy amplio, tal vez deberías tratar de reducirlo un poco.

¿Qué tipo de seguridad? Para contraseñas? ¿Quieres restringir algunas cosas? SQL Injection? Inyección de HTML? Cross domain security?

+0

digamos presentación datos como nombres de personas, contenido, etc. – pHp

0

Hay mucho que saber, y debe comenzar tan pronto como sea posible.

Por un lado, si acepta artículos (y probablemente use un WYSIWYG y acepte HTML), use algo para analizar el contenido y quitar cosas que podrían dejarlo vulnerable a XSS y cosas por el estilo.

Un ejemplo es HTML Purifier.

5

Hay dos frentes a considerar cuando se acepta el texto generado por el usuario que luego se mostrará.

En primer lugar, debe proteger su base de datos de los ataques de inyección. Hay una función PHP simple para esto: mysql_real_escape_string() generalmente será suficiente para proteger su base de datos de la inyección al pasar esta cadena para almacenarla como un valor de campo.

A partir de ahí, debe tener cuidado con su pantalla, ya que un usuario que puede cargar código HTML puede hacer cosas desagradables a otros usuarios cuando se muestra ese código. Si está haciendo artículos de texto plano, simplemente puede htmlspecialchars() el texto resultante. (también es probable que desee convertir nuevas líneas en etiquetas
). Si está utilizando una solución de formato, como el motor de reducción utilizado en este sitio, esas soluciones generalmente proporcionarán desinfección de HTML como una función del motor, pero será Asegúrese de leer la documentación y asegúrese.

Oh, asegúrese de que también está verificando las variables GET/POST utilizadas para enviar los artículos. Eso es evidente, y la verificación realizada tendrá que ajustarse a lo que su sitio está haciendo con su lógica.

+0

Nota: Estoy asumiendo una base de datos MySQL, existen funciones equivalentes para otros tipos de bases de datos. –

+3

consultas con parámetros deben ser usados ​​en lugar de 'mysql_real_escape_string()' - http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements –

+1

mysql_real_escape_string() no protege nada. Es simplemente una función de escape simple, y funciona solo cuando se combina con comillas. Por lo tanto, la regla debe ser como "escapar de sus datos con mysql_real_escape_string() ** y ** encerrar entre comillas". El resto esta bien. –

1

Bueno, como se menciona en las otras respuestas, hay varios frentes diferentes en los que sus scripts PHP pueden verse comprometidos.

Éstos son sólo un par:

Hay varias maneras de tratar con cada uno. Aquí hay algunas cosas que ver:

0

Podría ser aconsejable comenzar con un marco como Drupal o CakePHP.De esta forma, ambos pueden aprender de la forma en que implementaron la seguridad y aprovechar el hecho de que ya se hizo. La curva de aprendizaje es bastante empinada y sin tener que desplegar sus propios mecanismos de autenticación etc.

-1

Cuando el proyecto está listo para el uso público, por lo general es una buena idea establecer error_reporting (0);

No va a proporcionar más seguridad, pero lo hace mucho más difícil (por lo general) para los chicos malos para encontrar posibles problemas de seguridad con su sitio.

+0

Recomendación terrible. No se debe confundir el informe de errores ** ** nivel, que debe ser siempre lo más alto posible, con la presentación de informes de error ** ** destino, que debe ser cambiada de pantalla para iniciar sesión en un servidor de producción. –

+0

Bueno, sí, mi idea era más bien, que el usuario normal no vería los mensajes de error. ¿Qué hacer con los mensajes de error de everyones I propia decisión, pero como usted ha dicho, lo mejor es guardarlos. – Mikk

0

tal vez dos consejos podrían ayudarle a obtener sitios web más seguros

  • crear dos usuarios en su base de datos, solo lectura cuenta para hacer sólo selecciona y conteos, y escribir en cuenta cuando se tiene que hacer actualizaciones, inserciones o eliminaciones .
  • cuando se tiene que insertar en la base de datos o eliminar, desinfectar las entradas, el uso de MySQL preparado estados o hacer valer los valores que llegan por correo o reciben de esta manera:

    if(!empty($_GET["integer_like_id_value"]){ 
        $integer_id_value = (int)$_GET["integer_like_id_value"]; 
    }else{ 
        // that stuff seems not to be legit, die application, log error ? whatever 
        die(); 
    }