2010-12-06 12 views
6

Esto es sobre un sitio web de anuncios clasificados ... Uso PHP y MySql para insertar registros en un db.¿Debo verificar la inyección sql incluso en entradas validadas?

Tengo un formulario HTML y los usuarios deben completar este formulario para continuar.

A continuación se muestra las entradas de formulario y la validación realizada en cada entrada (javascript):
Nombre (Sólo se permiten letras)
Tel (Sólo números permitidos)
correo electrónico (correo electrónico especial -regexp partido)
Título (No se permiten caracteres especiales, todo lo demás está bien. Por caracteres especiales me refiero a !(#)<> etc. Longitud máxima de 35 caracteres.)
texto (Igual que el título, simplemente no hay límite en la longitud)
Precio (Sólo números permitidos)

hago mysql_real_escape_string() en el Encabezado y texto, pero nada más.

Mi pregunta es simple, ¿es esto suficiente?

Tengo ninguna otra medida de seguridad mide en absoluto.

ACTUALIZACIÓN

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s\-]+$/; 
var numExp = /^(?=(?:\D*\d){0})[\d -]{0,20}$/; 
var num_only = /^[0-9]+$/; 
var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; 
var textExp = /^\s*([\wåäö\-\*][^\w]*){3}.*$/gmi; 
var headlineExp = /^[\s\da-zA-ZåäöÅÄÖ&()+%\/*$€é:,.'"-]*$/; 
+4

¿Qué sucede si un usuario desactiva JavaScript? –

+3

"La coincidencia especial de correo electrónico-expresiones regulares" me aterroriza, ya que muchas personas lo malinterpretan. Y solo permitir letras en el nombre es incorrecto. –

+0

Las expresiones regulares están en la actualización ... Tenía un significado en general, pero compruebe las expresiones regulares si son correctas, por favor ... –

Respuesta

8

Todas las medidas de seguridad que se implementan en Javascript se pueden eludir por el usuario, por ejemplo apagándolo, eliminando oyentes o jugando con el código. ¡No confíes en el cliente allí!

+4

+1 o incluso omitiendo su código JavaScript por completo y elaborando manualmente una solicitud POST con valores de entrada falsos. –

+1

+1 también @David Gelhar tamperdata o curl. – rook

3

Todo lo que proviene del usuario que se va a comprobar. Ejecución de JavaScript antes de que el usuario lo envíe. No necesito ejecutar su código JavaScript para enviar una solicitud POST.

1

En casi todos los casos, la respuesta predeterminada a "Realmente necesito ..." cuando se trata de cuestiones de seguridad es "Sí, absolutamente".

<?php 
/* Execute a prepared statement by passing an array of values */ 
$sql = 'SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'; 
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array(':calories' => 150, ':colour' => 'red')); 
$red = $sth->fetchAll(); 
$sth->execute(array('calories' => 175, 'colour' => 'yellow')); 
$yellow = $sth->fetchAll(); 
?> 

El código anterior es de this page en la biblioteca PHP. No se moleste más con mysql_real_escape_string(), e intente incorporar declaraciones preparadas con sus consultas SQL.

5

No tengo otras medidas de seguridad de ningún tipo.

La seguridad debe implementarse en capas. Muchas veces, los programadores no entienden esto porque está fuera de su alcance (la mayoría tiene el mantra "si compila, envía"). Debe implementar la seguridad en todos los puntos razonables. Nunca se puede confiar en la información del usuario, especialmente si se ve con Wild Wild Web.Las comprobaciones de expresiones regulares, las comprobaciones de inyección conocidas y el endurecimiento de servidores y aplicaciones son esenciales.

Tenga en cuenta que hay una norma de razonabilidad adjunta. A veces es fácil tener un teatro de seguridad o un exceso. Depende de usted y de las otras partes interesadas del proyecto determinar qué niveles de precaución son necesarios implementar. El tiempo y los materiales tienen costos asociados, por lo que si gastas $ 100,000 en implementación de seguridad pero solo obtienes un retorno de $ 80,000, entonces es contraproducente.

1

Mucha gente aquí hablar sin pasar por sus javascript pero yo quiero ir un paso más allá y cómo se hace mostrar, desde el contexto que marca la diferencia. Aquí hay un complemento de Firefox que me encanta usar cuando hago pruebas de penetración o algo por el estilo: Groundspeed.

Como se ha dicho un millón de veces, las validaciones del lado del cliente son buenas porque puede usarlas para evitar que los usuarios con buen comportamiento accedan a su servidor con malas solicitudes, pero cada validación del lado del cliente debe reflejarse en el servidor bien. Y sí, las declaraciones preparadas son tu amigo. Además, desinfecte cualquier cosa que salga de su base de datos, ya que es un paso que mucha gente olvida.

Cuestiones relacionadas