Esto depende de lo que something()
está haciendo. En general, no desea que los usuarios puedan pasar datos arbitrarios a sus scripts. Tu código hace esto, ya que no verificas, si la entrada del usuario es la que esperabas que fuera.
Diciendo esto de manera abstracta: ¡Nunca hagas suposiciones sobre lo que obtienes!
Ejemplo: Genera una consulta SQL como esta:
if(isset($_GET["id"])) {
$sql = "SELECT * FROM table WHERE id = ".$_GET["id"].";"
// execute SQL here
// process results here
}
Supongamos que obtiene esta entrada de un formulario, que establece que el campo "id" solo debe rellenarse con un número (o incluso usar el atributo HTML5).
Usuario inconsciente
Este tipo inserta un valor no numérico, como ab"fe;
y envía el formulario. Su solicitud generará un error / excepción de SQL, ya que la consulta resultante es:
SELECT * FROM table WHERE id = "ab"fe;";
SQL inválido
Esto sucedió porque asumiste que solo obtendrías valores numéricos, pero nada impide que un usuario envíe otra cosa. Incluso si utiliza el atributo HTML5, un navegador de usuarios puede ignorarlo o el propio usuario crea una solicitud específica y la envía a su punto final. Veamos un escenario peor.
Usuario malintencionado
Este chico intenta meterse contigo y envía owned"; DROP DATABASE *
donde la declaración SQL resultante es:
SELECT * FROM table WHERE id = "owned"; DROP DATABASE *;
poof, tu base de datos se ha ido ...
En general, siempre desea estar absolutamente seguro de que sabe qué tipo de datos está procesando. Use métodos como is_numeric()
para asegurarse de que los datos contengan lo que usted cree que hace. Este proceso de eliminar datos no deseados y prepararlos para su uso se denomina desinfección .
Además, siempre debe cadenas de escape antes de usarlas en una declaración SQL, para evitar que alguien inyecte caracteres especiales, como ""
o ;
en SQL.
Mala o la falta completa de desinfección de datos es una gran vulnerabilidad, así que tenga cuidado, siempre que use algo que un usuario le envíe. Verifique todo el lado del servidor, no confíe en los formularios de JavaScript que deshabilitan el botón "Enviar", ya que las personas aún pueden enviar solicitudes creadas a su servidor.