防止SQL注入问题

1 oracle数据库SQL参数化
import cx_Oracle,os
def get_sql(sql,key):
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' # 编码问题
conn = cx_Oracle.connect('apps', 'apps', '10.32.170.109:1531/XABK')
cur = conn.cursor()
cur.execute(sql,key)
res = cur.fetchall()
cur.close()
conn.close()
return res
name = "' or 1=1 --"
password = "123456"
#使用列表 :s传参数 也可以使用 :变量名
sql = "select * from python.python_user where name=:s and password=:s"
res = get_sql(sql,[name,password])
#使用字典 :name(变量名)传参数 也可以使用:s
#sql = "select * from python.python_user where name=:name and password=:password"
#res = get_sql(sql,{'name':name,'password':password})
print(res)

2 mysql数据库SQL参数化
import pymysql
def get_sql(sql,key):
coon=pymysql.connect(host='localhost',port=3306,user='root',password='root')
cur = coon.cursor(cursor=pymysql.cursors.DictCursor)#括号里的参数是让数据以字典形式展示,也可以不要
cur.execute(sql,key)#执行sql语句
res= cur.fetchall()#获取sql查询结果
cur.close()
coon.close()
return res
name = "' or 1=1 --"
password = "123456"
#使用列表 传参数
sql = "select * from python.python_user where name=%s and password=%s"
res = get_sql(sql,[name,password])
print(res)

posted @ 2018-09-10 10:33  音量  阅读(619)  评论(0编辑  收藏  举报