teslariu

ejemplo SQL injection

Jul 11th, 2023
1,627
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.33 KB | None | 0 0
  1. #!/usr/b#in/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. '''
  5. SQL lenguaje de consultas estructuras
  6. paradigma declarativo
  7.  
  8. crear una base de datos llamada prueba:
  9. CREATE DATABASE estacionMetereologica;
  10.  
  11. quiero ver todos los registros de una tabla Clima_DIA
  12. SELECT * FROM Clima_DIA
  13.  
  14. motor de base de datos:
  15. MySQL, MariaDB, PostgreSQL, SQLite  --> soft libre
  16. SQL Server, Oracle --> soft propio
  17.  
  18. DB-API: API estandar de Python
  19.  
  20. MySQL: mysql-connector-python, PyMySQL, MySQLdb
  21. PostgreSQL psycopg, pg8000
  22. SQLite: sqlite3 (ya viene instalada)
  23. SQL Server: pymssql, pyodbc
  24. Oracle: cx_Oracle
  25. """
  26. # el mismo ejemplo para MYSQL
  27. # previamente instalar python -m pip install pymysql
  28.  
  29. """
  30. import pymysql
  31.  
  32. # se conecta a la base
  33. conn = pymysql.connect(
  34.     host='localhost',
  35.     user='usuario',
  36.     passwd='password',
  37.     db='mi_base.db')
  38.  
  39. # para hacer una consulta SDL necesito un cursor
  40. cursor = conn.cursor()
  41.  
  42. # puedo ejecutar una consulta SQL: crear una tabla
  43. cursor.execute("CREATE TABLE IF NOT EXISTS personas(nombre VARCHAR(45), edad INT)")
  44.  
  45. # como modifique la base debo "guardar los datos"
  46. conn.commit()
  47.  
  48. # creo una tupla de datos
  49. datos = (
  50.     ("Juan",30),
  51.     ("Luis",11),
  52.     ("Vicky",25),
  53. )
  54.  
  55. for nombre, edad in datos:
  56.     cursor.execute("INSERT INTO personas VALUES(%s,%s?)",(nombre,edad))
  57.  
  58. conn.commit()
  59.  
  60. # quiero imprimir
  61. cursor.execute("SELECT * FROM personas")
  62. personas = cursor.fetchall()
  63. print(personas)
  64.  
  65. # cierro la conexion
  66. conn.close()
  67. '''
  68.  
  69. # SQL Injection
  70. # >> Ingrese un nombre: Alejandro',22); DELETE FROM personas; --
  71. # >> Ingrese la edad: 30
  72. # INSERT INTO personas VALUES('Alejandro',22); DELETE FROM personas; --,30)
  73.  
  74.  
  75. import sqlite3
  76.  
  77. conn = sqlite3.connect("mi_base.sqlite")
  78.  
  79. cursor = conn.cursor()
  80.  
  81. nombre = input("Ingrese un nombre: ")
  82. edad = int(input("Ingrese la edad: "))
  83.  
  84. # condición correcta (resiste SQL Injection)
  85. # cursor.execute("INSERT INTO personas VALUES(?,?)",(nombre,edad))
  86.  
  87. # condición peligrosa: si están habilitados los warnings resiste, si no, NO
  88. # lanza
  89. # sqlite3.Warning: You can only execute one statement at a time.
  90. # no da error, dice que solo ejecuta una instrucción a la vez
  91. # cursor.execute(f"INSERT INTO personas VALUES('{nombre}',{edad})")
  92.  
  93. # condicion LETAL: borra la tabla
  94. cursor.executescript(f"INSERT INTO personas VALUES('{nombre}',{edad})")
  95.  
  96. conn.commit()
  97. conn.close()
  98.  
Advertisement
Add Comment
Please, Sign In to add comment