如何利用python防止sql注入攻击源代码
时间: 2023-06-05 13:47:11 浏览: 85
防止SQL注入攻击的一种常用方法是使用预处理语句 (Prepared Statements)。在使用预处理语句时,您可以在SQL语句中包含占位符 (Placeholder),而不是直接插入用户输入的数据。
举个例子,假设我们要执行一个SELECT语句,查询用户输入的用户名和密码是否正确,我们可以这么写:
```
import mysql.connector
# 连接数据库
cnx = mysql.connector.connect(user='username', password='password', host='hostname', database='dbname')
cursor = cnx.cursor()
# 用户输入
username = input("Enter your username: ")
password = input("Enter your password: ")
# 创建预处理语句
query = "SELECT * FROM users WHERE username = %s AND password = %s"
cursor.execute(query, (username, password))
# 获取结果
result = cursor.fetchone()
# 关闭连接
cursor.close()
cnx.close()
if result:
print("Welcome, " + username)
else:
print("Invalid username or password.")
```
这样就可以防止SQL注入攻击。
还可以使用 ORM (Object-relational mapping) 库,如SQLAlchemy,来简化操作。
举个例子
```
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 创建连接
engine = create_engine('mysql+pymysql://username:password@hostname/dbname', echo=True)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 查询
username = input("Enter your username: ")
password = input("Enter your password: ")
user = session.query(User).filter_by(username=username, password=password).first()
if user:
print("Welcome, " + username)
else:
print("Invalid username or password.")
session.close()
```
这样就可以防止SQL注入攻击。需要注意的是,如果使用了ORM库,需要确保使用预处理语句或是使用类似于filter_by()这样的函数来防止SQL注入。