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. HDU2058

    The sum problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. java中的接口和抽象类是什么?

    抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力.abstract c ...

  3. css实现小三角效果

    <!DOCTYPE html><html><head><meta charset="UTF-8"> <title>新闻标 ...

  4. Oracle sqlplus 语法

    目录: 0. FREFACE 1. 执行一个SQL脚本文件 2. 对当前的输入进行编辑 3. 重新运行上一次运行的sql语句 4. 将显示的内容输出到指定文件 5. 关闭spool输出 6.显示一个表 ...

  5. Mac 下tomcat的安装配置

    首先进去tomcat官网下载选择你要的版本 下载方法 下载完事之后解压到你想放的文件夹.我是把文件夹改名为tomcat.当然随意就好.然后授权命令如下: sudo chmod 你的用户名 Tomcat ...

  6. input上传文件显示图片缩略图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Android ProgressBar SeekBar

    1.ProgressBar 进度条 当水平进度条完成后,隐藏该进度条,并显示一张图片 常用属性: 1. android:max 设置进度条的最大值 2. android:progress 用于指定进度 ...

  8. [Typescript] Introduction to Generics in Typescript

    If Typescript is the first language in which you've encountered generics, the concept can be quite d ...

  9. mysql 变量is null 和 not exists区别

    问题: 使用游标遍历时,发现使用 select var into tmp where var=? 然后判断if tmp is null时,不能走完所有的遍历.经debug发现, 当var为空时,则跳出 ...

  10. struts2,hibernate,spring整合笔记(3)

    struts2,hibernate,spring整合笔记(1) struts2,hibernate,spring整合笔记(2) 配好struts和hibernate就要开始spring了 老规矩,还是 ...