MySQL 及 SQL 注入

  如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。

  本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符。

  所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

  我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。

  以下实例中,输入的用户名必须为字母、数字及下划线的组合,且用户名长度为 8 到 20 个字符之间:

  if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))

  {

  $result = mysql_query("SELECT * FROM users

  WHERE username=$matches[0]");

  }

  else

  {

  echo "username 输入异常";

  }

  让我们看下在没有过滤特殊字符时,出现的SQL情况:

  // 设定$name 中插入了我们不需要的SQL语句

  $name = "Qadir'; DELETE FROM users;";

  mysql_query("SELECT * FROM users WHERE name='{$name}'");

  以上的注入语句中,我们没有对 $name 的变量进行过滤,$name 中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。

  在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是在 SQLite 和 PostgreSQL 是可以同时执行多条SQL语句的,所以我们对这些用户的数据需要进行严格的验证。

  防止SQL注入,我们需要注意以下几个要点:

  1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。

  2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

  3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

  v 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

  5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

  6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

  防止SQL注入

  在脚本语言,如Perl和PHP你可以对用户输入的数据进行转义从而来防止SQL注入。

  PHP的MySQL扩展提供了mysql_real_escape_string()函数来转义特殊的输入字符。

  if (get_magic_quotes_gpc())

  {

  $name = stripslashes($name);

  }

  $name = mysql_real_escape_string($name);

  mysql_query("SELECT * FROM users WHERE name='{$name}'");

  Like语句中的注入

  like查询时,如果用户输入的值有"_"和"%",则会出现这种情况:用户本来只是想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"等等;用户要查询"30%"(注:百分之三十)时也会出现问题。

  在PHP脚本中我们可以使用addcslashes()函数来处理以上情况,如下实例:

  $sub = addcslashes(mysql_real_escape_string("%something_"), "%_");

  // $sub == \%something\_

  mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

  addcslashes() 函数在指定的字符前添加反斜杠。

  语法格式:

  addcslashes(string,characters)

  参数描述

  string必需。规定要检查的字符串。

  characters可选。规定受 addcslashes() 影响的字符或字符范围。

  具体应用可以查看:PHP addcslashes() 函数

  本文转载自:w3cschool

  (编辑:雷林鹏 来源:网络 侵删)

转载于:https://www.cnblogs.com/linpeng1/p/10936781.html

雷林鹏分享:MySQL 及 SQL 注入相关推荐

  1. mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  2. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...

  3. mysql 防注入 php_PHP+mysql防止SQL注入的方法小结

    本文实例讲述了PHP+mysql防止SQL注入的方法.分享给大家供大家参考,具体如下: SQL注入 例:脚本逻辑 $sql = "SELECT * FROM user WHERE useri ...

  4. decimal转为string sql_PHP+Mysql防止SQL注入的方法

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一:[1] mysql_real_escape_ ...

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

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

  6. 三十一、MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  7. 好程序员Java分享MySQL之SQL入门(一)

    好程序员Java分享MySQL之SQL入门(一)前言:各种版本的数据库中,有一种通用的语言用于管理数据库中的数据,它就是SQL,本章我们将学习基本的SQL语句. SQL的概述 Structured Q ...

  8. 好程序员分享MySQL之SQL入门(一)

    好程序员分享MySQL之SQL入门(一)前言:各种版本的数据库中,有一种通用的语言用于管理数据库中的数据,它就是SQL,本章我们将学习基本的SQL语句. SQL的概述 Structured Query ...

  9. php mysql 插入多条数据_雷林鹏分享:PHP MySQL 插入多条数据

    使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyGuests" 表添加了三 ...

最新文章

  1. 双稳态电路的两个稳定状态是什么_振荡器基础4——什么是多谐振荡器(又称:弛张振荡器)?...
  2. android 沉浸式状态栏的三种方法
  3. 如何理解IIS 7的两种应用程序池的管道模式(Managed Pipeline Mode)
  4. [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接
  5. Python 列表推导 、生成器表达式与声明式编程
  6. 基于8086CPU微处理器的汇编学习之内存空间的编辑
  7. C++中STL容器利用迭代器删除元素小结
  8. OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画圆
  9. 【SNA】社会网络分析二 Gephi 功能详解
  10. Java基础语法之变量、运算符、流程控制、数组和方法等基础语法
  11. mysql 按照中文拼音首字母排序
  12. 信息安全产品体系的介绍
  13. Weex 修改安卓生成apk默认的启动页面
  14. 浅析敏捷项目管理中的5大阶段
  15. 网易云刷歌python
  16. java 三点_[Java教程]三点运算符使用方法
  17. 单片机控制74hc595驱动4个单数码管计数显示
  18. 2013年5月中国数码相机市场分析报告
  19. 金花关键词工具-金花关键词软件-自动金花关键词软件下载
  20. 夜影:Near协议中的分片设计

热门文章

  1. Python3中装饰器介绍
  2. windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例
  3. 【linux】Valgrind工具集详解(十四):Cachegrind(缓存和分支预测分析器)
  4. java程序ssh置顶_使用shell脚本启动远程(SSH)Java应用程序不会返回本地提示
  5. python cv2 轮廓的包络 面积_Python 基于FIR实现Hilbert滤波器求信号包络详解
  6. python nginx部署_Python 应用 uWSGI + Nginx 部署
  7. Java学习总结:19
  8. ffmpeg java linux水印,Linux环境用FFmpeg给视频加水印详细步骤
  9. java servlet applet,详解Java Servlet与Applet比较
  10. 编写五子棋的完整python代码_python制作简单五子棋游戏