9Python全站之路系列之MySQL SL注入

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

Python全栈之路系列之MySQL SQL注入


SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等。

SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL语句。

SQL注入是网站渗透中最常用的攻击技术,但是其实SQL注入可以用来攻击所有的SQL数据库。


SQL注入的实现

创建SQLdb数据库

CREATE DATABASE SQLdb;

创建user_info

1
2
3
4
5
6
CREATE TABLE `user_info` (
   ` id int ( 11 ) NOT NULL AUTO_INCREMENT,
   `username` varchar( 32 ) DEFAULT NULL,
   `password` varchar( 32 ) DEFAULT NULL,
   PRIMARY KEY (` id `)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

插入一条用户数据

测试的用户名是ansheng,密码as

1
insert into user_info(username,password) values( "ansheng" , "as" );

Python代码

app.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  tornado.ioloop
import  tornado.web
import  pymysql
 
class  LoginHandler(tornado.web.RequestHandler):
     def  get( self * args,  * * kwargs):
         self .render( 'login.html' )
     def  post( self * args,  * * kwargs):
         username  =  self .get_argument( 'username' None )
         pwd  =  self .get_argument( 'pwd' None )
         conn  =  pymysql.connect(host = '127.0.0.1' , port = 3306 , user = 'root' , passwd = 'as' , db = 'sqldb' )
         cursor  =  conn.cursor()
         temp  =  "select username from user_info where username='%s' and password = '%s'"  % (username, pwd,)
         effect_row  =  cursor.execute(temp)
         result  =  cursor.fetchone()
         conn.commit()
         cursor.close()
         conn.close()
         if  result:
             self .write( '登录成功' )
         else :
             self .write( '登录失败' )
             
application  =  tornado.web.Application([
     (r "/login" , LoginHandler),
])
 
 
if  __name__  = =  "__main__" :
     application.listen( 8888 )
     tornado.ioloop.IOLoop.instance().start()

HTML代码

login.htmlapp.py文件在同级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html lang = "en" >
<head>
     <meta charset = "UTF-8" >
     <title>Title< / title>
< / head>
<body>
<form action = "/login"  method = "post" >
     < input  type = "text"  name = "username"  placeholder = "用户名"  / >
     < input  type = "text"  name = "pwd"  placeholder = "密码"  / >
     < input  type = "submit"  / >
< / form>
< / body>
< / html>

演示效果

打开浏览器,输入地址http://127.0.0.1:8888/login

填写内容如下:

用户名:asas ' or 1 = 1-- asd
密码:随便填写一串字母

如图:

sql-injection-01

当点击提交的时候是否会跳转到登陆成功页面?如果你的代码和我一样,那么就会跳转到登陆成页面

为什么出现这种问题?

出现这个问题的主要原因就是因为我们使用了字符串拼接的方式来进行SQL指令的拼接。

SQL指令拼接代码

1
temp  =  "select username from user_info where username='%s' and password = '%s'"  % (username, pwd,)

这是一个正常的SQL拼接出来的结果

1
select username  from  user_info where username = 'ansheng'  and  password  =  'as'

这是一个非正常的SQL拼接出来的结果

select username from user_info where username='asas' or 1 = 1  -- asd' and password = 's'

聪明的你是否已经看到其中的玄机了呢?--

如何防止?

通过Pythonpymysql模块来进行SQL的执行,在pymysql模块内部会自动把”'“(单引号做一个特殊的处理,来预防上述的错误

1
2
3
......
effect_row  =  cursor.execute( "select username from user_info where username='%s' and password = '%s'" , (username, pwd))
......

#Python全栈之路 #Sql注入










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925919,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 安全 关系型数据库
mysql注入-字符编码技巧
通过字符编码技巧,攻击者可以在SQL注入中绕过常见的输入验证机制,成功攻击数据库。因此,理解这些技巧及其可能的攻击路径,对防御SQL注入至关重要。开发者应采取多层次的安全措施,确保应用程序在不同字符集和编码环境下都能有效防御注入攻击。通过强制使用统一编码、严格的输入验证、预编译语句以及多层次的编码检查,可以有效地提高系统的安全性,防止SQL注入攻击带来的风险。
182 72
|
10月前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
2048 0
|
5月前
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
|
7月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
840 15
|
9月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
134 1
|
10月前
|
SQL 关系型数据库 MySQL
30天拿下Python之使用MySQL
30天拿下Python之使用MySQL
100 0
|
10月前
|
关系型数据库 MySQL 数据管理
pymysql:Python操作MySQL数据库的又一利器
pymysql:Python操作MySQL数据库的又一利器
84 0
|
10月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
406 0
|
20天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
145 1
|
2月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!

热门文章

最新文章

推荐镜像

更多