day7,防止sql注入和批量执行
1、sql注入:安全测试中的一种
利用sql语句中的:‘,有以下两种情况;
1),sql语句:sql="select *from (表名) where username='%s';"%name
当username=" ' or '1'='1 "
2)select *from(表名) where username='' or '1'='1' 这个能查询出表中的所有结果,因为1=1表示永远为真
当username=" ';show tables;-- " '--'在sql语句中表示注释
select *from(表名) where username='';show tables;--'
# # # 没有',可以防止sql注入
# # sql = "select * from st_stu where name=%s",(name,sex)
# # # 可以sql注入
# # sql ="select * from st_stu where name='%s'",(name,sex)
2、防止SQL注入sql的写法 利用*data的可变参数
import pymysql
conn=pymysql.connect(...)
yb=conn.cursor()
def test1(sql,*data):
print(sql)
print(data) -->元组('lyj',)
yb.execute(sql,data) -->'select *from 表 where name=%s',('lyj')
print(yb.fetchall())
sql='select * from 表 where name=%s'
name='lyj'
3、sql的批量执行
import pymysql
conn=pymysql.connect(...)
yb=conn.cursor()
sql=insert into .....
all_data=[
[
'12','01,02,03,04'],
['13','09,10,11,12'],
['08','11','12''01','07']
]
yb.executemany(sql,all_data)
print(yb.fetchall())
其他代码见 day7的先登录后支付,未完