关于 SQL 注入的问题
拼串 (Statement)方式

1、编译次数多,效率比较低;会出现SQL注入问题(数据安全问题):先传参数再编译。
2、Sql文对应的字符串不一样,需要再次编译。Sql文对应的字符串一样,不会再编译,会从缓存中读取以前编译好的文件发送给数据库。
3、SQL注入问题:拼串的时候把特殊的内容(例如or 1=1)拼接到sql文当中,让它符合我们的编译规则,在缓存中正常编译,绕过正常验证机制,查询出不应该查询的内容。
占位符 (Prepared Statement)方式

1、只编译一次,效率比较高;不会出现SQL注入问题(数据安全问题):先编译再传参数。
2、当sql文编译好后,如果添加特殊内容(例如or 1=1),发送到数据库后,数据库无法识别特殊内容(例如or 1=1),所以就不会产生sql注入问题了。
如何防止SQL注入
总的来说有以下几点:
1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
关于 SQL 注入的问题的更多相关文章
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
		昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ... 
- Web安全相关(五):SQL注入(SQL Injection)
		简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ... 
- 从c#角度看万能密码SQL注入漏洞
		以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ... 
- 浅谈SQL注入风险 - 一个Login拿下Server
		前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ... 
- 揭开SQL注入的神秘面纱PPT分享
		SQL注入是一个老生常谈但又经常会出现的问题.该课程是我在公司内部培训的课程,现在分享出来,希望对大家有帮助. 点击这里下载. 
- 深入理解SQL注入绕过WAF和过滤机制
		知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ... 
- jdbc java数据库连接 8)防止sql注入
		回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象; 写sql 5:执行sql ... 
- Entity Framework关于SQL注入安全问题
		1.EF生成的sql语句,用 parameter 进行传值,所以不会有sql注入问题 2.EF下有涉及外部输入参数传值的,禁止使用EF直接执行sql命令方式,使用实体 SQL 参考: https: ... 
- 关于SQL注入和如何防止
		之前在笔试的时候没有很好的答出这个问题,因此我要总结一下问题,以免日后继续在这个地方跌倒,以下是自己的理解,如有错误请指出 一.什么是SQL注入 SQL注入就是服务器在根据业务去处理数据库的时候,客户 ... 
- Java防止SQL注入2(通过filter过滤器功能进行拦截)
		首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ... 
随机推荐
- 转:java使用Filter过滤器对Response返回值进行修改
			练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过滤器对Response返回值进行修改 有时候在开发过程中会有这样一个 ... 
- redis安装--集群
			redis在3.0之后开始支持集群,实际生产中一般也是会部署集群了 redis官方推出了一个叫redis-trib.rb的redis集群工具(存放在源码文件的src目录下):由于redis-trib. ... 
- 爬虫 1 requests 、beautifulsoup
			1.requests 1.method 提交方式:post.get.put.delete.options.head.patch 2.url 访问地址 3.params 在url中传递的参数,GET p ... 
- 大数据入门到精通7--对复合value做reducebykey
			培训系列7--对复合value做reduce 1.做基础数据准备 val collegesRdd= sc.textFile("/user/hdfs/CollegeNavigator.csv& ... 
- [Solution] 950. Reveal Cards In Increasing Order
			Difficulty: Medium Problem In a deck of cards, every card has a unique integer. You can order the de ... 
- mysql5.5升级到5.7
			一.首先把mysql服务停止,复制mysql5.5中的data文件夹中的内容(你需要的数据库),放在mysql5.7的data文件夹中; 二.启动切换mysql5.7版本,(我这用的是phpwamp, ... 
- 大数据学习笔记1-大数据处理架构Hadoop
			Hadoop:一个开源的.可运行于大规模集群上的分布式计算平台.实现了MapReduce计算模型和分布式文件系统HDFS等功能,方便用户轻松编写分布式并行程序. Hadoop生态系统: HDFS:Ha ... 
- fortitoken
			1.token状态为error,且不能分配给用户使用 解决: 关联有User的token状态是error的原因是:用户一直并未使用. 
- Springboot学习05-自定义错误页面完整分析
			Springboot学习06-自定义错误页面完整分析 前言 接着上一篇博客,继续分析Springboot错误页面问题 正文 1-自定义浏览器错误页面(只要将自己的错误页面放在指定的路径下即可) 1-1 ... 
- Django的rest_framework认证组件之局部设置源码解析
			前言: Django的rest_framework组件的功能很强大,今天来我来给大家剖析一下认证组件 下面进入正文分析,我们从视图开始,一步一步来剖析认证组件 1.进入urls文件 url(r'^lo ... 
