Advertisement
teslariu

SQL Injection

Aug 29th, 2022
2,452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Prevención de SQL injection
  5. #
  6.  
  7. import sqlite3
  8.  
  9. conn = sqlite3.connect("base.sqlite")
  10. cursor = conn.cursor()
  11.  
  12.  
  13. cursor.execute("CREATE TABLE IF NOT EXISTS personas (nombre TEXT, edad NUMERIC)")
  14. conn.commit()
  15.  
  16. nombre = input("Ingrese un nombre: ")
  17. edad = int(input("Ingrese una edad: "))
  18.  
  19. # forma correcta
  20. #cursor.execute("INSERT INTO personas VALUES (?,?)",(nombre,edad))
  21. # conn.commit()
  22.  
  23. # forma incorrecta, susceptible a SQL injection
  24. # Supongamos que ingreso lo siguiente:
  25. # >> Ingrese un nombre: Eva',22); DELETE FROM personas; --
  26. # >> Ingrese una edad: 22
  27. # Lanza un Warning (estoy intentando hacer 2 consultas)
  28. """
  29. Consulta real a ejecutar:
  30. "INSERT INTO personas VALUES ('Eva',22); DELETE FROM personas; --',22)"
  31. Consulta 1: INSERT INTO personas VALUES ('Eva',22);  --> Agrega (Eva,22)
  32. Consulta 2: DELETE FROM personas; --> borra todos los datos de la tabla personas  
  33. Consulta 3: --',22  --> no es nada, comentarios
  34.  
  35. EL PROBLEMA ES QUE SI TENGO DESHABILITADOS LOS WARNINGS, SE EJECUTARIA
  36.  
  37. """
  38. # cursor.execute(f"INSERT INTO personas VALUES ('{nombre}',{edad})")
  39. # conn.commit()
  40.  
  41. # puedo ejecutar mas de una consulta con executescript. Si al
  42. # codigo de abajo le hago el mismo ataque, borro todo
  43. cursor.executescript(f"INSERT INTO personas VALUES ('{nombre}',{edad})")
  44. conn.commit()
  45.  
  46.    
  47. cursor.execute("SELECT * FROM personas")
  48. datos = cursor.fetchall()  
  49. print(datos)
  50. conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement