PHP mysql_real_escape_string() 函数
  PHP MySQL 函数
  定义和用法
  mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
  下列字符受影响:
  \x00\n\r\'"\x1a
  如果成功,则该函数返回被转义的字符串。如果失败,则返回 false.
  语法
  mysql_real_escape_string(string,connection)
  参数 描述
  string 必需。规定要转义的字符串。
  connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。
  说明
  本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
  提示和注释托福答案 www.yztrans.com
  提示:可使用本函数来预防数据库攻击。
  例子
  例子 1
  <?php
  $con = mysql_connect("localhost", "hello", "321");
  if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
  // 获得用户名和密码的代码
  // 转义用户名和密码,以便在 SQL 中使用
  $user = <CODE>mysql_real_escape_string($user)</CODE>;
  $pwd = <CODE>mysql_real_escape_string($pwd)</CODE>;
  $sql = "SELECT * FROM users WHERE
  user='" . $user . "' AND password='" . $pwd . "'"
  // 更多代码
  mysql_close($con);
  ?>
  例子 2
  数据库攻击。本例演示如果我们不对用户名和密码应用 mysql_real_escape_string() 函数会发生什么:
  <?php
  $con = mysql_connect("localhost", "hello", "321");
  if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
  $sql = "SELECT * FROM users
  WHERE user='{$_POST['user']}'
  AND password='{$_POST['pwd']}'";
  mysql_query($sql);

  // 不检查用户名和密码
  // 可以是用户输入的任何内容,比如:
  $_POST['user'] = 'john';
  $_POST['pwd'] = "' OR ''='";
  // 一些代码…
  mysql_close($con);
  ?>
  那么 SQL 查询会成为这样:
  SELECT * FROM users
  WHERE user='john' AND password='' OR ''=''
  这意味着任何用户无需输入合法的密码即可登陆。
  例子 3
  预防数据库攻击的正确做法:
  <?php
  function check_input($value)
  {
  // 去除斜杠
  if (get_magic_quotes_gpc())
  {
  $value = <code>stripslashes($value)</CODE>;
  }
  // 如果不是数字则加引号
  if (!is_numeric($value))
  {
  $value = "'" . <CODE>mysql_real_escape_string($value)</CODE> . "'";
  }
  return $value;
  }
  $con = mysql_connect("localhost", "hello", "321");
  if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
  // 进行安全的 SQL
  $user = check_input($_POST['user']);
  $pwd = check_input($_POST['pwd']);
  $sql = "SELECT * FROM users WHERE
  user=$user AND password=$pwd";
  mysql_query($sql);
  mysql_close($con);
  ?>

php如何做数据库攻击的更多相关文章

  1. 谈一下我们是怎么做数据库单元测试(Database Unit Test)的

    作者水平有限,如有错误或纰漏,请指出,谢谢. 背景介绍 最近在团队在做release之前的regression,把各个feature分支merge回master之后发现DB的单元测试出现了20多个失败 ...

  2. 探究Go-YCSB做数据库基准测试

    本篇文章开篇会介绍一下Go-YCSB是如何使用,然后按照惯例会分析一下它是如何做基准测试,看看它有什么优缺点. 转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.l ...

  3. Hibernate和jsp做数据库单表的增删改查

    虽然很基础,但是我转牛角尖了~~~~这是几个文件 1.最重要的.Java文件 package com.chinasofti.hibb.struts; import org.hibernate.Sess ...

  4. 用mybatis做数据库处理 代码中的字段大小写 要和mapper映射设置的大小写一致(这TM不废话么,原谅我渣!~~)

    简单描述情况:其实这个问题怎么说呢,有人给你说,你肯定能意识到,必须大小写对应的嘛.emmmm我现在才意识到是因为:自己在下边敲代码,配的mapper文件并没有把属性变量,和数据库里的段单独提出来做映 ...

  5. .Net core使用EF Core Migration做数据库升级

    ---恢复内容开始--- (1)VS Code下创建含有授权功能的并且使用localdb作为数据库的命令 dotnet new -au individual -uld --name identityS ...

  6. 使用GTID给Galera集群做数据库异步复制

    一.为什么要做Galera集群异步复制 Galera集群解决了数据库高可用的问题,但是存在局限性,例如耗时的事务处理可能会导致集群性能急剧下降,甚至出现阻塞现象.而不幸的是,类似报表等业务需求就需要做 ...

  7. Spring Boot 实用MyBatis做数据库操作

    前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...

  8. SQL2014做数据库主从镜像备份(也可以用于高可用)备忘(非域控)。

    部份内容参考原始文章链接:https://www.cnblogs.com/stragon/p/5643754.html ,同时比较有参考价值的文章:https://blog.csdn.net/sqls ...

  9. Laravel中如何做数据库迁移

    总的来说,做一次独立数据库迁移只需要三步,分别是创建迁移文件.修改迁移文件.运行迁移 1.创建数据库迁移文件php artisan make:migration create_articles_tab ...

随机推荐

  1. Children of the Candy Corn (bfs+dfs)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8120   Accepted: 3547 Description The c ...

  2. 在vim里每行增加//注释

    1.ctrl+v选择区域块 ,可以选到每一行的第一个word 2. shift+i 3. 光标会定位在第一行, 输入一个// 4. 按esc, 被选择的所有行就加上了//

  3. cannot be resolved to a type in same package 问题解决

    在 STS 上,一个类引用在相同 package 中另一个类,但是报 cannot be resolved to a type 错误. 解决方法 : Alternatively, you can hi ...

  4. AES - Rijndael 算法(一)

    1997年1月,美国标准技术协会NIST开始遴选数据加密标准(Data Encryption Standard,简称DES)替代者的工作,称为高级加密标准[1’2](Advanced Enerypti ...

  5. C - Building a Space Station - poj 2031

    空间站是有一些球状的房间组成的,现在有一些房间但是没有相互连接,你需要设计一些走廊使他们都相通,当然,有些房间可能会有重合(很神奇的样子,重合距离是0),你需要设计出来最短的走廊使所有的点都连接. 分 ...

  6. python学习笔记(集合的使用)

    集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知 ...

  7. 多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

    遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都 ...

  8. 提交表单时的等待(loading)效果

    $(document).ready(function () { $("body").prepend('<div id="overlay" class=&q ...

  9. 你的第一个Windows程序——绘制窗口

    MSDN原文(英文) 绘制窗口 你已经创建了你的窗口,现在你想在它里面显示东西.在WIndows术语里,这就是所谓的绘制窗口.混合隐喻,一个窗口是一个空白画布,等待你去填充它. 有时你的程序将启动绘制 ...

  10. Cocos2D-X2.2.3学习笔记12(瞬间动作)

    到眼下我们已经学习了有 坐标系统 内存管理 UI系统 事件处理 几何图形 今天我们来学习动作管理OK 我们来看看类结构图 CCAction   全部动作的基类 以下派生了三个子类:CCFiniteTi ...