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() 影响的字符或字符范围。

mysql qadir_MySQL 及 SQL 注入相关推荐

  1. pdo mysql防注入_Php中用PDO查询Mysql来避免SQL注入风险的方法

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...

  2. python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击

    目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...

  3. mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题

    前言略,直奔主题.. #{}相当于jdbc中的preparedstatement ${}是输出变量的值 简单的说就是#{}传过来的参数带单引号'',而${}传过来的参数不带单引号. 你可能说不明所以, ...

  4. mysql中防止sql注入

    什么是sql注入 图片来源:百度百科 python 操作mysql产生sql注入问题 不用ORM框架,框架中已经集成了防范sql注入的功能,使用pymysql实践一下: # 导入pymysql模块 i ...

  5. mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险

    当 我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失 去控制.虽然可以用mysql_real_escap ...

  6. mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击

    SQL注入攻击大多数与程序有关系,程序不严谨是导致SQL注入攻击成功的一个原因.安全问题不容忽视,平常的开发中应关注安全问题.下面简单记录PHP中的SQL攻击问题. 什么是SQL注入攻击 SQL注入( ...

  7. mysql 绕过addslashes,SQL注入:Bypass addslashes()

    上次研究了GBK双字节注入,这次就得想办法用于实战,我们知道在很多时候,代码会对我们的输入进行过滤或者转义,过滤的的话我们想办法绕过就行,而转义,就得另想办法了 addslashes() 这是PHP中 ...

  8. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  9. mysql简单防注入_mysql防止sql注入的方法

    mysql防止sql注入的方法 发布时间:2020-08-25 14:07:29 来源:亿速云 阅读:98 作者:小新 这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因 ...

最新文章

  1. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)
  2. Linux-grep命令
  3. Neither spark.yarn.jars nor spark.yarn.archive is set
  4. samba and AD
  5. #pragma pack(push,1)与#pragma pack(1)的区别
  6. Python3 基础学习笔记 C06【用户输入和 while 循环】
  7. DevOps是敏捷在软件开发团队的另一应用
  8. Python标准类型的分类
  9. 2021“数维杯”国际大学生数学建模竞赛C题思路
  10. ROW_NUMBER() OVER的用法
  11. pat A1052:Linked List Sorting静态链表+链表排序
  12. 桌面美化 | win10高仿mac桌面
  13. 网站SEO优化::降低网站跳出率、提高用户粘度网站用户粘度
  14. 笔记本安装固态硬盘ssd教程
  15. 编程队伍队名_关于举办十四所第四届“国睿杯”青年软件技能编程大赛的通知...
  16. map在python中是什么意思_【后端开发】map在python中什么意思
  17. 【解的封闭形式】Abel-Ruffini theorem(阿贝尔-鲁菲尼定理)
  18. 重庆开县7名小学生遭雷击死亡 39人受伤
  19. python 反三角函数下角度与弧度与正弦值的相互转换
  20. 中职计算机基础微课,中职计算机教育微课应用

热门文章

  1. 【任务脚本】0522更新京东618叠蛋糕任务脚本,京东任务自动程序
  2. 关于stm32芯片解锁方法
  3. PDF页眉页脚怎么设置
  4. 自测题的整理(持续更新)
  5. 张学友演唱会成犯罪分子噩梦,阿里云云盾人发布脸对比功能将进一步提升罪犯监察力度...
  6. 2016-2017-2 《Java程序设计》预备作业1 总结
  7. nginx负载均衡集群
  8. Vim 基本配置和经常使用的命令
  9. 《C语言及程序设计》程序阅读——文件操作
  10. Android中Activity之间的数据传递(Intent和Bundle)