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. web references是在.NET下的一个东东?它有什么用呢?和“引用”有什么区别!

    WEB引用的意思啊 在.net中有类库和WEB SERVICE这两种类型的项目, 前者编译出来的DLL就是我们普通使用的引用中的类库, 后都编译出来的,在服务器IIS上为其提供服务,我们调用时就要用到 ...

  2. Ubuntu环境下NFS服务器搭建

    看到鸟哥私房菜对NFS的介绍,就想试试玩一下.看起来步骤也很简单. 1.背景名词. NFS(Network File System) 作用:让所有的Unix-like 机器通过网络共享彼此的文件 局限 ...

  3. N - 畅通工程再续 - hdu 1875

    Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题 ...

  4. ORACLE的RMAN

    1.什么是RMAN? RMAN可以用来备份和还原数据库文件.归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. 注意:RMAN不能用于备份初始化参数文件和口令文件. RMAN启动数据库上的 ...

  5. linux关于readlink函数获取运行路径的小程序

    http://blog.csdn.net/djzhao/article/details/8178375   相关函数: stat, lstat, symlink表头文件: #include <u ...

  6. jquery append

    将已经存在的一个dom对象A,通过jquery append插入另一个dom对象B,将会改变dom树结构--即A成为了B的子元素. 举个例子: js: $(".table-container ...

  7. Spring 3 来创建 RESTful Web Services

    Spring 3 创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参考实现 ...

  8. Android ProgressDialog 加载进度

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  9. 高性能MySql进化论(一):数据类型的优化_上

    在数据库的性能调优的过程中会涉及到很多的知识,包括字段的属性设置是否合适,索引的建立是否恰当,表结构涉及是否合理,数据库/操作系统 的设置是否正确…..其中每个topic可能都是一个领域. 在我看来, ...

  10. Android 4.2 通知通过PendingIntent启动Activity失败的问题

    今天突然发现在Android 4.2手机上点击通知消息无法打开Activity的问题,具体Logcat信息如下: 01-09 11:37:43.733: WARN/ActivityManager(92 ...