Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/05/2010, 12:12
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: como evitar SQLinjection(novato)

Ejemplo sacado de la santa documentación de python:

Cita:
Iniciado por pydoc
Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack.

Instead, use the DB-API’s parameter substitution. Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method. (Other database modules may use a different placeholder, such as %s or :1.) For example:
Cita:
Iniciado por Traducción
Usualmente tus operaciones SQL necesitaran usar valores de las variables de Python. No debes de ensamblar (construir) tu query usando las cadenas de Python (strings) por que es inseguro; Hace tu programa vulnerable a ataques tipo SQL injection.

En vez de eso, usa la API de la base de datos para sustituir parametros. Pon un ? donde donde quieras usar el valor de la variable y despues enviar una tupla de valores como segundo argumento en el metodo execute() de la variable cursor. (Esto puede variar según la base de datos).
Ejemplo (para sqlite3):
Código Python:
Ver original
  1. # Nunca hagas esto, es inseguro
  2. symbol = 'IBM'
  3. c.execute("... where symbol = '%s'" % symbol)
  4.  
  5. # En vez de eso, haz esto
  6. t = (symbol,)
  7. c.execute('select * from stocks where symbol=?', t)
  8.  
  9. # Ejemplo largo
  10. for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
  11.           ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
  12.           ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
  13.          ]:
  14.     c.execute('insert into stocks values (?,?,?,?,?)', t)

Te recomiendo que cheques la API de la base de datos que estés manejando.

Perdón por la rapida traducción pero tenia prisa :P