python pymysql 安全查询,防注入

性能第二,安全第一

尽量不要使用字符串拼接调用方式,或者能保证数据安全(提前做好验证处理)的时候可以使用拼接

基本点:存入数据库的字符串做转义,将标点和特殊符号全换成html实体,例如,

<转换为&lt;    >转换为&gt;

在必要的时候反向转换或不转换

1,参数化语句防止注入

sql = "select user,pwd,sex,birthday,add_time,group from User where user='%s' and pwd='%s'" 
dbre = cursor.execute(sql,(name,pwd))

2,调用存储过程

delimiter \\
DROP PROCEDURE IF EXISTS proc_sql \\
CREATE PROCEDURE proc_sql (
  in nid1 INT,
  in nid2 INT,
  in callsql VARCHAR(255)
  )
BEGIN
  set @nid1 = nid1;
  set @nid2 = nid2;
  set @callsql = callsql;
    PREPARE myprod FROM @callsql;
--   PREPARE prod FROM 'select * from tb2 where nid>? and nid<?';  传入的值为字符串,?为占位符
--   用@p1,和@p2填充占位符
    EXECUTE myprod USING @nid1,@nid2;
  DEALLOCATE prepare myprod;
 
END\\
delimiter ;
以上为定义存储过程,为摘抄
sql="select * from User where nid>? and nid<?"
cursor.callproc('proc_sql', args=(11, 15, mysql))

依照我的习惯,第一种使用的比较多

猜你喜欢

转载自blog.csdn.net/u012902518/article/details/106131177