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. Delphi String 与wideString 的完美转换

    一般来说,String与widestring 的转换是系统自动进行的,但是,考虑如下字符串 s:=#2+#3+#0+#10+#0+#1+#164+#59;,显然S的长度为8,然后执行如下代码 var ...

  2. Linux下的getline函数

    最近在做国嵌的mp3项目,在mp3主控程序中用到了这个函数,挺好使的,在这里记录一下.注意是linux下的,不是C++中的. 函数原型 ssize_t getline(char **lineptr, ...

  3. Android新浪微博客户端(四)——添加多个账户及认证

    原文出自:方杰| http://fangjie.info/?p=75转载请注明出处 二.获取用户信息并保存数据库 上面说到加载AuthActivity有两种情况,其中一种就是授权成功回调,在授权回调成 ...

  4. 几何学中的欧拉公式:V-E+F = 2

    几何学中的欧拉公式:V-E+F = 2,V.E.F表示简单几何体的顶点数.边数.面数. 证明: 它的证明有多种,这里呈现一种递归证法. 对于任意简单几何体(几何体的边界不是曲线),我们考察这个几何体的 ...

  5. IMPLEMENTED IN PYTHON +1 | CART生成树

    Introduction: 分类与回归树(classification and regression tree, CART)模型由Breiman等人在1984年提出,CART同样由特征选择.树的生成及 ...

  6. Maven可继承的POM 元素

    groupId :项目组 ID ,项目坐标的核心元素: version :项目版本,项目坐标的核心元素: description :项目的描述信息: organization :项目的组织信息: in ...

  7. python:numpy(文件存取)

      NumPy提供了多种存取数组内容的文件操作函数.保存数组数据的文件可以是二进制格式或者文本格式.二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型. 一,tofile()和from ...

  8. 【Hibernate步步为营】--继承映射具体解释

    上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...

  9. android常用http框架介绍

    测试数据 1.HttpURLConnection:在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择.而在Android 2.3版本及以后,HttpURLC ...

  10. PullToRefresh下拉刷新 加载更多 详解 +示例

    常用设置 项目地址:https://github.com/chrisbanes/Android-PullToRefresh a. 设置刷新模式 如果Mode设置成Mode.PULL_FROM_STAR ...