什么是SQL注入?

SQL注入是指在你系统防御之外,某人将一段Mysql语句注入到你的数据库。注入通常发生在系统要求用户输入数据的时候,比如用户名的输入,用户可能输入的不是一个用户名,而是一段SQL语句,这个语句可能就会不知不觉地运行在你的数据库中。

SQL注入实例

$name = $_POST['username'];
$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";

如同你看到的,用户输入的值会通过url参数分配给变量$name,然后直接放置到sql语句中。这意味着用户是有可能编辑sql语句的。

$name = "admin' OR 1=1 -- ";
$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";
sql数据库最后会接收到下面的这一段sql语句:
SELECT * FROM `tbl_name` WHERE `name`='admin' OR 1=1 --';
在Mysql中- -表示忽略掉后面所有的内容,就是注释掉后面所有内容。这是有效的SQL语句,而且执行结果不是返回当前用户数据,而是将返回所有数据表(table_name)中的所有数据。这是任何人都不希望在他们的web应用程序中出现。下面将会教你如何防止这种类型的漏洞。
那么,如何简单防止Mysql注入?

这个问题已经被知道了一段时间,PHP有一个特制的功能以防止这些攻击。所有你需要做的就是使用一个函数mysql_real_escape_string()。

mysql_real_escape_string所做的是把一个输入的字符串,在MySQL查询时将它处理为用户输入的真实字符串,来防止SQL注入。有点绕,基本上,就是将用户输入可能引起Mysql安全隐患的字符串比如单引号('),用逃脱引用来表示\ '。

将这个函数应用到上面那个可能被注入的例子中:

$name = mysql_real_escape_string($_POST['username']);
$query = "SELECT * FROM `tbl_name` WHERE `name` = '$name' ";
这里要十分小心的是,mysql_real_escape_string要先成功地通过mysql_connect连接到mysql server上以后才能正常使用,如果数据库
还没连接直接使用这个函数会报错。上面经过函数转化后,$query最后打印出来的语句为:
SELECT * FROM `tbl_name` WHERE `name`='admin\' OR 1=1 -- ';

也就是说上面那个admin后面的单引号(')被转义为真实的输入字符,不再和admin前的字符进行匹配,admin前的单引号将和字符串–后面的单引号进行匹配。

让我们创建一个通用的函数,你可以用任何名字来命名它,在这里,我要将它命名为"mres":

function mres($var){
    if (get_magic_quotes_gpc()){
        $var = stripslashes(trim($var));
    }
    return mysql_real_escape_string(trim($var));
}
现在,可以把函数简化成下面这个样子:
$name = mres($_POST['username']);
$query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";
转自:http://coderschool.cn/1207.html

转载于:https://www.cnblogs.com/wjm956/p/8359129.html

使用php函数防止SQL注入方法相关推荐

  1. concat mysql sql注入_Mysql中用concat函数执行SQL注入查询的方法

    Mysql数据库使用concat函数执行SQL注入查询 SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示 ...

  2. php mysql 防 sql注入_php 防sql注入方法

    php防sql注入的方法:1.使用mysql_real_escape_string方法转义SQL语句中使用的字符串中的特殊字符:2.打开magic_quotes_gpc来防止SQL注入:3.通过自定义 ...

  3. 原理+实战掌握SQL注入方法

    本文首发于先知社区 原理+实战掌握SQL注入方法 前言: SQL注入是web安全中最常见的攻击方式,SQL注入有很多方法,但如果只知道payload,不知道原理,感觉也很难掌握,这次就总结一下我所遇到 ...

  4. php 防注入的方法,PHP防止SQL注入方法

    PHP防止SQL注入方法 2019-08-12 94 我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数: 方法一: function injCheck($sql_ ...

  5. .NET防SQL注入方法

      SQL语句 利用SqlCommand传参数的方法: string strSQL="SELECT * FROM [user] WHERE user_id=@id"; SqlCom ...

  6. c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询

    SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...

  7. Java 防SQL注入方法

    在前面的博客中,我们详细介绍了: sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决 ...

  8. PHP最全防止sql注入方法

    (1)mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count ...

  9. java开发中推荐的防御sql注入方法_SQL 注入防御方法总结

    SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入可以参见:https://en.wikipedia.org/wiki/SQL_injection S ...

  10. java开发中推荐的防御sql注入方法_防御SQL注入的方法总结

    SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致 ...

最新文章

  1. mysql事件调度定时任务_详解MySQL用事件调度器Event Scheduler创建定时任务
  2. ajax常见问题汇总(二)
  3. 【转】hex和bin文件格式的区别
  4. springboot2 cookie的token如何放入请求头_Spring MVC 到底是如何工作的
  5. hdu 5441 Travel(Kruskal+离线)
  6. 如何将多个源文件编译为一个.ko
  7. VC实现多格式图像的转换
  8. micropython入门指南-电子工业出版社-网上书店
  9. 写了一百万行代码是什么体验?
  10. Centos7系统中安装JDK、Tomcat、Mysql
  11. 基于electron和ffmpeg下载rtmp直播流
  12. excel常用函数公式
  13. 第一章 行列式 第六节 行列式按行(列)展开
  14. 广告牌定时器怎么设置时间_定时器怎么调时间
  15. AndroidX迁移
  16. 面试中问到的遇到什么困难的问题,如何解决? 方法论借鉴
  17. 湖南大学ACM——10015.self-numbers
  18. AppleScript 的一些命令
  19. amigo幸运字符什么意思_QQ幸运字符有几个一共多少种 qq幸运字符标识都有哪些介绍...
  20. 高德地图怎么画圈_点标记-覆盖物-教程-地图 JS API | 高德地图API

热门文章

  1. C语言———不定参数标准库 stdarg.h
  2. lepus监控oracle数据库_数据库监控软件Lepus之修改admin密码
  3. 分层模型中数据传输过程
  4. 判断当前用户与审批人是否属于同一个部门
  5. Android图片控件,跟随列表(recyclerView)的上下滚动而同步平移。
  6. 《Spark Cookbook 中文版》一导读
  7. 重新认识java-break和continue的标签你用过么
  8. 测试环境下将centos6.8升级到centos7的操作记录(转)
  9. SQL Server MYSQL 对外键建立索引的必要性
  10. 利用泛型与反射更新实体(ADO.NET Entity Framework)