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))

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值