• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

sql注入问题(mysql)

python 搞java代码 3年前 (2022-05-21) 12次浏览 已收录 0个评论

mysql中的sql注入问题

1、为什么会出现这种问题?

  利用特殊符号注释语法来绕过sql校验

 

  演示:校验用户输入的用户名和密码来使用数据库校验

<span style="font-family:"><span>import</span><span> <a href="https://www.gaodaima.com/tag/pymysql" title="查看更多关于pymysql的文章" target="_blank">pymysql</a>

</span><span>#</span><span> 与MySQL数据库建立连接</span>
conn =<span> py<a href="https://www.gaodaima.com/tag/mysql" title="查看更多关于mysql的文章" target="_blank">mysql</a>.connect(
    host</span>=<span>"</span><span>127.0.0.1</span><span>"</span><span>,
    port</span>=3306<span>,
    user</span>=<span>"</span><span>root</span><span>"</span><span>,
    passwd</span>=<span>"</span><span>123</span><span>"</span><span>,
    db</span>=<span>"</span><span>data</span><span>"</span><span>,
    charset</span>=<span>"</span><span>utf8</span><span>"</span><span>,
    autocommit</span>=<span>True
)

</span><span>#</span><span> 获取游标对象</span>
cursor_obj = conn.cursor(cursor=<span>pymysql.cursors.DictCursor)

</span><span>#</span><span> 用户输入的用户名和密码</span>
username = input(<span>"</span><span>请输入用户名>>> </span><span>"</span><span>).strip()
password </span>= input(<span>"</span><span>请输入密码>>> </span><span>"</span><span>).strip()

</span><span>#</span><span> 提交数据并检验用户名密码</span>
sql = <span>"</span><span>select * from userinfo where username="%s" and password="%s"</span><span>"</span> % (username, password)  <span>#</span><span> 根据用户名和密码来查询是否存在这条数据</span>
<span>print</span><span>(sql)
cursor_obj.execute(sql)
res </span>=<span> cursor_obj.fetchall()
</span><span>if</span><span> res:
    </span><span>print</span><span>(res)
</span><span>else</span><span>:
    </span><span>print</span>(<span>"</span><span>用户名或密码错误!</span><span>"</span><span>)

</span><span>#</span><span> 关闭游标</span>
<span>cursor_obj.close()
</span><span>#</span><span> 关闭客户端连接</span>
conn.close()</span>

www#gaodaima.com来源gaodai$ma#com搞$代*码*网搞代码

 

  演示第一种执行结果(在知道用户名、不知道密码的情况下,获取该用户的信息):

  这样看sql语句可能看不出来什么,那么将这一串输出的sql语句放到Navicat中来看一下:

 

   同一份代码,演示第二种执行结果(在不知道用户名、也不知道密码的情况下,获取所有用户的信息):

   将这一串输出的sql语句放到Navicat中来看一下:

 

 

2、解决方法

  关键性的数据,不要自己手动去拼接,而是交给execute()去做拼接

<span style="font-family:"><span>import</span><span> pymysql

</span><span>#</span><span> 与MySQL数据库建立连接</span>
conn =<span> pymysql.connect(
    host</span>=<span>"</span><span>127.0.0.1</span><span>"</span><span>,
    port</span>=3306<span>,
    user</span>=<span>"</span><span>root</span><span>"</span><span>,
    passwd</span>=<span>"</span><span>123</span><span>"</span><span>,
    db</span>=<span>"</span><span>data</span><span>"</span><span>,
    charset</span>=<span>"</span><span>utf8</span><span>"</span><span>,
    autocommit</span>=<span>True
)

</span><span>#</span><span> 获取游标对象</span>
cursor_obj = conn.cursor(cursor=<span>pymysql.cursors.DictCursor)

</span><span>#</span><span> 用户输入的用户名和密码</span>
username = input(<span>"</span><span>请输入用户名>>> </span><span>"</span><span>).strip()
password </span>= input(<span>"</span><span>请输入密码>>> </span><span>"</span><span>).strip()

</span><span>#</span><span> 提交数据并检验用户名密码</span>
sql = <span>"</span><span>select * from userinfo where username=%s and password=%s</span><span>"</span>  <span>#</span><span> 这里只能用%s来格式化数据,因为后面的execute()只能识别语句中的%s</span>
<span>print</span><span>(sql)
<span><strong>cursor_obj.execute(sql, (username, password))  </strong></span></span><strong><span>#</span><span> 在execute()方法中传入username, password参数</span></strong>
res =<span> cursor_obj.fetchall()
</span><span>if</span><span> res:
    </span><span>print</span><span>(res)
</span><span>else</span><span>:
    </span><span>print</span>(<span>"</span><span>用户名或密码错误!</span><span>"</span><span>)

</span><span>#</span><span> 关闭游标</span>
<span>cursor_obj.close()
</span><span>#</span><span> 关闭客户端连接</span>
conn.close()</span>

 

  演示第一种执行结果(在知道用户名、不知道密码的情况下,获取该用户的信息):

 

  演示第二种执行结果(在不知道用户名、也不知道密码的情况下,获取所有用户的信息):

 

 

   正确演示:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:sql注入问题(mysql)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址