点击上方"数据与人", 右上角选择“设为星标”
分享干货,共同成长!


一、SQL注入
1、什么是SQL注入?
SQL注入是比较常见的网络攻击方式之一,主要攻击对象是数据库,针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,篡改数据库。
SQL注入简单来说就是通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。
SQL数据库的操作是通过SQL语句来执行的,这就导致如果我们在代码中加入了某些SQL语句关键字(比如说DELETE、DROP等),这些关键字就很可能在数据库写入或读取数据时得到执行。
2、SQL注入攻击的总体思路
寻找到SQL注入的位置;
判断服务器类型和后台数据库类型;
针对不同的服务器和数据库特点进行SQL注入攻击。
import sqlite3 # 连接数据库 conn = sqlite3.connect('test.db') # 建立新的数据表 conn.executescript('''DROP TABLE IF EXISTS students; CREATE TABLE students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL);'''# 插入学生信息 students = ['Paul','Tom','Tracy','Lily'] for name in students: query = "INSERT INTO students (name) VALUES ('%s')" % (name) conn.executescript(query); # 检视已有的学生信息 cursor = conn.execute("SELECT id, name from students") print('IDName') for row in cursor: print('{0}{1}'.format(row[0], row[1])) conn.close()
# 连接数据库 conn = sqlite3.connect('test.db') # 插入包含注入代码的信息 name = "Robert');DROP TABLE students;--" query = "INSERT INTO students (name) VALUES ('%s')" % (name) conn.executescript(query) # 检视已有的学生信息 cursor = conn.execute("SELECT id, name from students") print('IDName') for row in cursor: print('{0}{1}'.format(row[0], row[1])) conn.close()
上述代码执行其后果可想。


词法和语义解析; 优化sql语句,制定执行计划; 执行并返回结果。
"select*from tablename where username='"+uesrname+"'and password='"+password+"'"
select*from tablename where username=''or true or'' and password=''
select*from tablename where username=? and password=?

觉得本文有用,请转发、点赞或点击“在看” 聚焦技术与人文,分享干货,共同成长 更多内容请关注“数据与人”

文章转载自数据与人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




