php mysql adodb

Estoy usando PHP con adodb pero me encuentro con un problema enorme. Estoy usando adodb para acelerar el desarrollo, así puedo hacer algo como:

$r["Name"] = $_POST['txtName']; if ($_POST["ID"] != "") $conn->AutoExecute("content", $r, 'UPDATE', 'AutoID = ' . $_POST["ID"]); else $conn->AutoExecute("content", $r, 'INSERT'); 

Sin embargo, si ese nombre fuera a tener una comilla simple, se guardará en db con una barra inclinada. Entonces, si el nombre es de Testimonial, se guardará como Testimonial que me está causando problemas masivos, de todos modos puedo evitar esto, pero seguir progtwigndo como arriba porque es muchísimo más rápido que preparar instrucciones de inserción / actualización.

Aclamaciones

La solución correcta y final a este problema se compone de dos partes:

  1. Deshabilita todas las magic_quotes programáticamente en tu código. Esto garantiza que tenga una configuración conocida para trabajar, que no se puede romper si / cuando un administrador cambia estas configuraciones de php.ini.
  2. ¡Valide / cite todas las entradas entrantes del usuario antes de acceder a la base de datos!

Si bien la primera parte es una buena progtwigción, la segunda es absolutamente esencial para escribir una aplicación segura.

Para citar la entrada del usuario hay dos maneras en que puede ir:

  1. Manualmente (use qstr o Quote AdoDB), en cuyo caso debe tener mucho cuidado de no perderse nada. Esto puede ser bastante factible para proyectos pequeños, he viajado así muchas veces en el pasado.
  2. Utilice declaraciones preparadas con variables enlazadas para realizar sus consultas. Esto garantiza que nunca habrá una inyección SQL en su aplicación siempre que especifique los tipos de variables correctamente y sea mucho menos propensa a errores que la primera opción. Esto es lo que estoy haciendo desde hace un tiempo.

Actualizar:

Si va con declaraciones preparadas, puede encontrar que AdoDB no le compra tanto y puede usar PDO durante la mayor parte del trabajo. Cuando necesita algo “automático”, puede escribir algunas funciones específicas para la aplicación usted mismo. En mi experiencia, eso es solo un poco más de trabajo y en general mejor que incluir AdoDB.

Gracias por la entrada, he decidido cambiar las comillas mágicas en tiempo de ejecución con esta función:

 if (get_magic_quotes_gpc()) { function stripslashes_gpc(&$value) { $value = stripslashes($value); } array_walk_recursive($_GET, 'stripslashes_gpc'); array_walk_recursive($_POST, 'stripslashes_gpc'); array_walk_recursive($_COOKIE, 'stripslashes_gpc'); array_walk_recursive($_REQUEST, 'stripslashes_gpc'); } 

Sin embargo, ¿eso es entonces propenso a la inyección de SQL?