1. 使用参数化查询

使用参数化查询可以使得用户输入的数据作为参数传递给 SQL 语句,而不是直接拼接到 SQL 语句中。这样可以防止 SQL 注入攻击。

例如,使用 Python 的 sqlite3 模块进行参数化查询:

import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

# 使用参数化查询,将用户输入的数据作为参数传递给 SQL 语句
username = 'admin'
password = 'password'
c.execute('SELECT * FROM users WHERE username=? AND password=?', (username, password))

# 处理查询结果
rows = c.fetchall()
for row in rows:
    print(row)

conn.close()
  1. 过滤用户输入

对用户输入进行过滤,例如限制输入的字符类型、长度等,可以降低 SQL 注入攻击的风险。

例如,限制用户名只能包含字母和数字:

import re

def is_valid_username(username):
    if not re.match('^[a-zA-Z0-9]+$', username):
        return False
    return True

username = input('Enter your username: ')
if not is_valid_username(username):
    print('Invalid username')
else:
    # 使用参数化查询
    password = input('Enter your password: ')
    c.execute('SELECT * FROM users WHERE username=? AND password=?', (username, password))
    # 处理查询结果
    rows = c.fetchall()
    for row in rows:
        print(row)
  1. 使用 ORM 框架

使用 ORM 框架可以将数据库操作抽象成对象操作,避免直接操作 SQL 语句,进而防止 SQL 注入攻击。

例如,使用 Python 的 Django 框架进行 ORM 操作:

from django.contrib.auth.models import User

# 使用 ORM 框架查询用户
username = 'admin'
password = 'password'
user = User.objects.filter(username=username, password=password).first()

if user:
    print(user)
else:
    print('Invalid username or password')
Python 防御 SQL 注入攻击:最佳实践指南

原文地址: https://www.cveoy.top/t/topic/n3hP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录