如何预防 SQL 注入?

标签: 预防 SQL 注入
118人阅读 评论(0) 收藏 举报
分类:

简介

SQL 注入就是通过把 SQL 命令插入到 Web 表单提交或输入页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 语句的目的。

具体来说,SQL 注入就是利用现有应用程序的漏洞,将恶意的 SQL 命令注入到后台数据库引擎,从而执行恶意的 SQL 命令,实现对数据库甚至整个应用程序的攻击。

SQL 注入主要是通过在表单中输入带 SQL 命令的字符串。

SQL 注入的原理

SQL 注入攻击通过构建特殊的输入作为参数传入应用程序,而这些输入大都是 SQL 语法里的一些组合, 这些组合会改变应用程序中原有的 SQL 语句,这样,原本正常的 SQL 就变成了恶意的 SQL。这就是 SQL 注入的原理。

SQL 注入的产生原因

  • 应用程序没有细致地过滤用户输入的数据,导致非法数据侵入系统。
  • 应用程序对数据库的 SQL 操作,本身就存在漏洞。

SQL 注入的示例

下面简单描述一个通过 SQL 注入绕过登录验证的例子。

假如:有一个登录验证的 SQL 为:

SELECT * FROM users WHERE name='user01' AND password=md5('123456')

现在,有一个攻击者,在登录表单的用户名处,直接输入:

' or 1=1 #

然后,随便输入的密码,如 abc123,点击登录。

这时,原先的 SQL 就变成了恶意的 SQL:

SELECT * FROM users WHERE name='' or 1=1 #' AND password=md5('abc123')

注: 在 MySQL 中,# 号表示注释。

可以发现,这个恶意 SQL 的 where 条件永远为真。这样,攻击者就绕过了登录验证,进入了存在 SQL 漏洞的应用程序。

当然,SQL 注入攻击不仅仅是绕过登录验证。

预防 SQL 注入的措施

SQL 注入的危害非常大,我们必须进行预防。

可以结合以下两种措施来有效防止 SQL 注入。

  • 过滤用户的输入。永远不要相信用户的输入,我们必须对用户输入的数据进行细致严格地过滤。比如,可使用 PHP 的 htmlspecialchars() 函数将字符串中的特殊字符转化为 HTML 实体字符。
  • 操作数据库时,使用预处理和参数绑定。推荐使用 PDO 来操作数据库。
查看评论

SQL注入原理以及如何避免注入

SQL注入:到底什么时候会用到SQL呢?回答是访问数据库的时候,也就是说SQL注入-->直接威胁到了数据源,呵呵,数据库都收到了威胁,网站还能正常现实么? 所谓SQL注入,就是通过把SQL命令插入到...
  • jeofey
  • jeofey
  • 2015-07-21 15:43:53
  • 2708

SQL注入的原理,危害及防范

SQL注入在英文中称为SQL Injection,是黑客对Web数据库进行攻击的常用手段之一。在这种攻击方式中,恶意代码被插入到查询字符串中,然后将该字符串传递到数据库服务器进行执行,根据数据库返回的...
  • lifushan123
  • lifushan123
  • 2015-04-23 20:07:49
  • 2193

hibernate防止sql注入的方法

刚刚进入这家公司,项目组给我分配的是一个新的系统的开发工作。当然,作为技术的沉淀,并不是完全的从无到有的。 在整合了框架以后,是将一些久经考验的基础代码给迁移到新项目中。这一次需要将持久层修改为用hi...
  • menger4java
  • menger4java
  • 2017-06-22 15:50:40
  • 374

防sql注入-----预处理,预编译

1 .什么是sql注入(Sql injection)?Sql注入是一种将sql代码添加到输入参数中,传递到Sql服务器解析并执行的一种攻击手法2. 怎么产生的?Web开发人员无法保证所有的输入都已经过...
  • wbj16116
  • wbj16116
  • 2018-02-25 07:45:59
  • 39

如何防止SQL注入攻击

如何防止SQL注入攻击            一、什么是SQL注入式攻击?   所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行...
  • shenxiuwen1989
  • shenxiuwen1989
  • 2015-03-12 17:32:41
  • 1346

PreparedStatement 预编译原理 可防止SQL注入

原文链接:http://www.iteye.com/problems/32029 相关链接:验证preparedStatement防止SQL注入: /ba...
  • csdsxsx
  • csdsxsx
  • 2013-05-09 07:38:13
  • 1932

mybatis 3如何防止SQL注入

现在互联网时代,安全一直是一个长久不衰话题,我们经常用到各种各样的架构,模式,但我们最基础的还是要和数据库打交道,数据才是王道,所以,经常有很多盗取数据之人,故对数据的安全尤为重要。 在平常中,最常...
  • wankwan
  • wankwan
  • 2015-10-06 10:27:28
  • 1869

使用安全json parser防止json注入

今天在网上瞎逛又看到了一个不错的东西。 有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数...
  • cnbird2008
  • cnbird2008
  • 2012-01-29 00:14:44
  • 3478

常见sql注入的防范总结

在平时的开发过程中,我们可能很少会刻意的去为项目做一个sql注入的防范,这是因为你可能因为使用了某些框架,而无意间已经有了对应sql注入的一些防范操作(比如mybatis使用#{XX}传参,属于预编译...
  • yuruixin_china
  • yuruixin_china
  • 2016-12-28 14:55:35
  • 1140

如何在开发中避免SQL注入

如何避免SQL注入攻击可以使用Statement中的子接口实现类PreparedStatement来避免SQL注入攻击PreparedStatement表示预编译的SQL语句的对象,Sql语句是预编译...
  • MerGoing
  • MerGoing
  • 2017-08-01 23:27:44
  • 766
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 37万+
    积分: 5916
    排名: 5416
    钱柜娱乐开户
    最新评论