SQL预编译防止注入攻击的问题

SQL预编译防止注入攻击的问题

预编译防止了注入攻击,但是正常的查询请求该怎么执行呢

根据我之前数据库中的t_user数据,username = admin

 password = HEX(AES_ENCRYPT('123456','123456'))

http://img1.sycdn.imooc.com//climg/60f4eb35091fea0d09970306.jpg


http://img1.sycdn.imooc.com//climg/60f4eb900919671518310877.jpg

​cursor.execute(sql,(x,))也无法正常查询了啊,而且这个cursor.execute括号里面的这个语法到底是什么意思呢

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!sql语句中的%s是不需要添加引号的。

http://img1.sycdn.imooc.com//climg/60f4f2e909e5445616440085.jpg

cursor.execute(sql,(username,password))第一个参数是需要执行的sql语句,第二个参数是需要向sql语句传递的值。

祝学习愉快!

  • 王给白 提问者 #1

    去掉“”确实能让cursor.execute(sql,(username,password))运行,但是我用cursor.execute(sql%(username,password))就运行不了了。

    而且我用加%s加双引号的语句,username和password再赋值“1 OR 1=1”也会被视作字符串那这样算不算也是预防了注入攻击呢


    2021-07-19 11:48:01
  • 王给白 提问者 #2

    还有一点就是cursor.execute(sql%(username,password))这个语法好像是特地给注入攻击用的一样,因为正常%s不加双引号的语句在我给username赋值‘admin’,password再赋值正确的密码以后直接就会报错了。。

    2021-07-19 11:55:15
  • 王给白 提问者 #3

    说的有点乱,总结一下我的想法就是

    sql语句%s外面不带双引号,用cursor.execute(sql,(username,password)),这样即是预编译,也能防止注入攻击。

    sql语句外面的%s带了双引号的话,cursor.execute(sql%(username,password)),这样应该也能预防注入攻击吧,就是这样写应该不是预编译,效率低一些。


    这样理解正确吗


    顺便说下,视频里面sql语句中%s不带双引号然后配合cursor.execute(sql%(username,password))来使用,有点刻意给注入攻击用的意思。。

    2021-07-19 12:02:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师