1>基本用法,类似之前的套接字通信,也就是先建立连接,connect()方法,建立连接肯定需要
主机地址,端口号,登陆的账号密码,数据库名称,指定字符编码等信息了,
再拿到游标,再调取游标的execute()方法执行sql语句,此时得到的结果并不是我们查到的数据记录
而是这个sql的执行结果,若要去数据,要用游标下面的方法去取,
例子如下:
2>其他相关
3>sql注入
先创建一个表
再创建远程登录战账户
字符串拼接的方式,传入用户名和密码,与数据库的进行对比,若一致,也就是sql执行成功,则打印登录成功
否则就打印登录失败。
3.1>绕过密码
如下,在正确的账户后添加一个双引号,空格,-- ,后面接任意字符,就实现了跳过密码登录成功
解析:huang后面的引号跟sql中的前面单个引号刚好组成一对,后面就全部注释了,所以整条sql只进行了
账号校验,并且账号是正确的,所以成功登录了
3.2>绕过账号
解析:账号后面加入用or连接一个永远为真的条件,密码注释,组成的sql就把账号校验也跳过了,成功登录。
3.3>解决之法:
登录网站可以对账户名和密码进行校验,不允许包含这类特殊字符,或者接收后做相应处理
pymysql也有一套处理方法
如上,抓住这了漏洞的缘由就是这这两个%s传值(用户和密码)两边的引号引起的,所以攻击者能自己
“组装”sql语句,去掉占位符的引号不就好了?
原来写法:
改写一下:由游标来传值
验证