Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # Prevención de SQL injection
- #
- import sqlite3
- conn = sqlite3.connect("base.sqlite")
- cursor = conn.cursor()
- cursor.execute("CREATE TABLE IF NOT EXISTS personas (nombre TEXT, edad NUMERIC)")
- conn.commit()
- nombre = input("Ingrese un nombre: ")
- edad = int(input("Ingrese una edad: "))
- # forma correcta
- #cursor.execute("INSERT INTO personas VALUES (?,?)",(nombre,edad))
- # conn.commit()
- # forma incorrecta, susceptible a SQL injection
- # Supongamos que ingreso lo siguiente:
- # >> Ingrese un nombre: Eva',22); DELETE FROM personas; --
- # >> Ingrese una edad: 22
- # Lanza un Warning (estoy intentando hacer 2 consultas)
- """
- Consulta real a ejecutar:
- "INSERT INTO personas VALUES ('Eva',22); DELETE FROM personas; --',22)"
- Consulta 1: INSERT INTO personas VALUES ('Eva',22); --> Agrega (Eva,22)
- Consulta 2: DELETE FROM personas; --> borra todos los datos de la tabla personas
- Consulta 3: --',22 --> no es nada, comentarios
- EL PROBLEMA ES QUE SI TENGO DESHABILITADOS LOS WARNINGS, SE EJECUTARIA
- """
- # cursor.execute(f"INSERT INTO personas VALUES ('{nombre}',{edad})")
- # conn.commit()
- # puedo ejecutar mas de una consulta con executescript. Si al
- # codigo de abajo le hago el mismo ataque, borro todo
- cursor.executescript(f"INSERT INTO personas VALUES ('{nombre}',{edad})")
- conn.commit()
- cursor.execute("SELECT * FROM personas")
- datos = cursor.fetchall()
- print(datos)
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement