sql 注入风险
sql 注入风险
- sql 注入风险
 - 什么是sql注入呢?
 - 查看sql注入风险
- 示列 用户的登录模拟 select * from userinfo;查看数据库信息
 - select * from userinfo where name = '凯歌318' and pwd = 666; 正常情况下
 - select * from userinfo where name = '凯歌318';-- and pwd = '我就是密码';
 - 在sql语言中 -- 表示注释掉后边的语句,所以只要我们知道账户,就能得到想要的结果,这就是sql注入风险
 - 那你可能会想,还要知道账户才行,有没有不需要账户,就能得到想要的结果呢?
 - 当然有 select * from userinfo where name = '我不知道账号' or 1=1;-- and password = '我就是密码';
 - 这种情况也是sql的注入风险
 
 - 如何避免 sql 注入风险
 - pymysql 简单规避注入风险示列
 
什么是sql注入呢?
查看sql注入风险
- 准备材料
 
#创建一个用户表
create table userinfo(id int primary key auto_increment,name char(12) unique not null,pwd int not null);
#写入一个用户信息用于下面实验
insert into userinfo(name,pwd) values('凯歌318',666);
#表结构
mysql> select * from userinfo;
+------+-----------+------+
| id   | name      | pwd  |
+------+-----------+------+
|    1 | 凯歌318   | 666  |
+------+-----------+------+
1 row in set (0.00 sec)
示列 用户的登录模拟 select * from userinfo;查看数据库信息

select * from userinfo where name = '凯歌318' and pwd = 666; 正常情况下

select * from userinfo where name = '凯歌318';-- and pwd = '我就是密码';

在sql语言中 -- 表示注释掉后边的语句,所以只要我们知道账户,就能得到想要的结果,这就是sql注入风险
那你可能会想,还要知道账户才行,有没有不需要账户,就能得到想要的结果呢?
当然有 select * from userinfo where name = '我不知道账号' or 1=1;-- and password = '我就是密码';

这种情况也是sql的注入风险
如何避免 sql 注入风险
 1.永远不要信任用户的输入。对用户的输入进行校验,能够通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。检查输入的数据是否具有所期望的数据格式,严格限制变量的类型,例如使用regexp包进行一些匹配处理,
或者使用strconv包对字符串转化成其他基本类型的数据进行判断。
2.永远不要使用动态拼装sql,能够使用參数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每一个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放。加密或者hash掉password和敏感的信息。对进入数据库的特殊字符('"\尖括号&*;等)进行转义处理,
或编码转换
5.应用的异常信息应该给出尽可能少的提示,最好使用自己定义的错误信息对原始错误信息进行包装,避免网站打印出SQL错误信息,
比如类型错误、字段不匹配等,把代码里的SQL语句暴露出来,以防止攻击者利用这些错误信息进行SQL注入。
6.sql注入的检測方法一般採取辅助软件或站点平台来检測。软件一般採用sql注入检測工具jsky,站点平台就有亿思站点安全平台检測工具。
MDCSOFT SCAN等。採用MDCSOFT-IPS能够有效的防御SQL注入。XSS攻击等。
7.严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害。
8.在应用发布之前建议使用专业的SQL注入检测工具进行检测,以及时修补被发现的SQL注入漏洞。网上有很多这方面的开源工具,
例如sqlmap、SQLninja等。
9.所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中,
即不要直接拼接SQL语句。例如使用database/sql里面的查询函数Prepare和Query,或者Exec(query string, args ...interface{})。
pymysql 简单规避注入风险示列
#错误示范  不要自己去拼接账户和密码
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', password='318', database='ftp')
cur = conn.cursor()
username = input('user >>>')
password = input('passwd >>>')
sql = "select * from userinfo where name = %s and password =  %s ;"% (username, password)
cur.execute(sql)
print(cur.fetchone())
cur.close()
conn.close()
user >>>'我不知道账号' or 1=1;--
passwd >>>我也不知道密码
(1, '凯歌318', '666')
Process finished with exit code 0
#正确方法   cur.execute(sql, (username, password)) 把密码和账户交给 execute去拼接
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', password='318', database='ftp')
cur = conn.cursor()
username = input('user >>>')
password = input('pwd >>>')
sql = "select * from userinfo where name = %s and pwd = %s"
cur.execute(sql, (username, password))
print(cur.fetchone())
cur.close()
conn.close()
user >>>'我不知道账号' or 1=1;--
pwd >>>也不知道密码
None
Process finished with exit code 0
user >>>凯歌318
pwd >>>666
(1, '凯歌318', '666')
Process finished with exit code 0
sql 注入风险的更多相关文章
- 浅谈SQL注入风险 - 一个Login拿下Server
		
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
 - 浅谈SQL注入风险 - 一个Login拿下Server(转)
		
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
 - 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!
		
当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...
 - MySQL防范SQL注入风险
		
MySQL防范SQL注入风险 0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本 ...
 - JDBC之Statement 接口的测试(存在sql注入风险)
		
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
 - 同事都说有SQL注入风险,我非说没有
		
前言 现在的项目,在操作数据库的时候,我都喜欢用ORM框架,其中EF是一直以来用的比较多的:EF 的封装的确让小伙伴一心注重业务逻辑就行了,不用过多的关注操作数据库的具体细节.但是在某些场景会选择执行 ...
 - Statement 接口的应用(存在sql语句的注入风险)
		
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
 - Web安全相关(五):SQL注入(SQL Injection)
		
简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...
 - Entity Framework关于SQL注入安全问题
		
1.EF生成的sql语句,用 parameter 进行传值,所以不会有sql注入问题 2.EF下有涉及外部输入参数传值的,禁止使用EF直接执行sql命令方式,使用实体 SQL 参考: https: ...
 
随机推荐
- 第10组Alpha冲刺(1/4)
			
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 学习Android studio和Java,基本了解APP前端的制作 完善项目APP原型 展示GitHu ...
 - GPU性能越来越强大,为何直到现在还是不能取代CPU?
			
从思路上说,GPU相当于火车,一个车头带几十节车厢,一下子把成千上万吨货全给你拉目的地:CPU相当于汽车,拉货旅游样样能干.因此,如果单纯比运力,一列火车比得过成百上千辆汽车:但如果几百人有几百个 ...
 - 手把手教你 GitLab 的安装及使用
			
前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这两个工具之间的差异,已经在使用 git 的路上越走越远. 于是,跟上级强烈建议让我在公司推行 git ...
 - 【idea】idea学习手册
			
学习笔记:https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-q3ke2coy.html 断点调试:https://www.cnb ...
 - beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本
			
beyond compare解决特殊字符无法输出.多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本 ' XLS_to_CSV.vbs ' ' Converts an Exce ...
 - matlab学习笔记8 基本绘图命令-初级二维绘图/交互式绘图
			
一起来学matlab-matlab学习笔记8 基本绘图命令_5 初级二维绘图/交互式绘图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...
 - PAT 甲级 1077 Kuchiguse (20 分)(简单,找最大相同后缀)
			
1077 Kuchiguse (20 分) The Japanese language is notorious for its sentence ending particles. Person ...
 - Aspose.Words操作Word.PDF,让图片和文本垂直居中,水平居中解决方案
			
x 环境 { "Aspose.Words": {"Version":"18.x"} } 需求与难题 生成试卷的时候,如果数学题目中有特殊符号 ...
 - windows中怎么添加定时任务
			
linux中有crontab定时任务,很方便 其实windows也有类似的 需求:定时执行python脚本 1.Windows键+R,调出此窗口,输入compmgmt.msc 2. 每分钟都执行一次脚 ...
 - Python3 列表list合并的4种方法
			
方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'pythontab.com'] cList = aList + bList ...