• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 浅析MySQL的注入安全问题

浅析MySQL的注入安全问题

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了浅析我国妇女就业问题,浅析我国女性就业问题,浅析我国周边安全问题,浅析青少年犯罪问题,浅析南海问题等相关知识,希望本文的分享对您有所帮助

如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开。这一课将教如何帮助防止这种情况的发生,并帮助保护脚本和MySQL语句。

注入通常发生在处理一个用户输入,如他们的名字,而不是一个名字,他们给一个会在不知不觉中你的数据库上运行的MySQL语句。

永远不要信任用户提供的数据,只能验证后处理这些数据,作为一项规则,这是通过模式匹配。在下面的例子中,用户名被限制为字母数字字符加下划线的长度在8到20个字符之间 - 根据需要修改这些规则。

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
  $result = mysql_query("SELECT * FROM users 
             WHERE username=$matches[0]");
}
 else 
{
  echo "username not accepted";
}

</div>

为了说明这个问题,认为这是摘要:

// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

</div>

函数调用应该是从用户表中的名称列的名称相匹配用户指定的检索记录。在正常情况下,名称只包含字母数字字符或空间,如字符串髂骨。但在这里,给$name通过附加一个全新的查询,调用数据库变成灾难:注入DELETE查询删除用户的所有记录。

幸运的是,如果使用MySQL,在mysql_query()函数不会允许查询堆叠,或在一个单一的函数调用执行多个查询。如果尝试到堆放查询则调用失败。

其他PHP数据库扩展,如SQLite和PostgreSQL则愉快地进行堆查询,执行在一个字符串中的所有的查询,并创建一个严重的安全问题。
防止SQL注入:

可以处理所有的转义字符巧妙的脚本语言,比如Perl和PHP。 PHP的MySQL扩展提供的函数mysql_real_escape_string()输入到MySQL的特殊字符进行转义。

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

</div>

LIKE困境:

为了解决的LIKE问题,一个自定义的转义机制必须用户提供的%和_字符转换成文字。使用addcslashes()函数,让可以指定一个字符范围转义。

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

</div>


</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 浅析MySQL的注入安全问题

相关文章

  • 2018-12-05MySQL数据表损坏的正确修复方案
  • 2018-12-05有关mysql中ROW_COUNT()的小例子
  • 2018-12-05Mysql导出数据的正确方法
  • 2018-12-05Oracle Enterprise Linux 5.2安装Oracle 10g数据库
  • 2017-05-11Mysql联合查询UNION和UNION ALL的使用介绍
  • 2018-12-05SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Upd
  • 2018-12-05MySQL的嵌套事务实现
  • 2018-12-05sqlserver 批量删除存储过程和批量修改存储过程的语句
  • 2018-12-05关于mysql的mycat中间件安装与使用详解
  • 2018-12-05关于MySQL5.7.18主从复制搭建一主一从实例详解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySql学习心得之存储过程
    • 格式导致的Excel导入sql出现异常的解决方法
    • 数据库分页存储过程代码
    • SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
    • 利用mysql事务特性实现并发安全的自增ID示例
    • Fedora 17源码安装mysql-5.1.58
    • Mysql(MyISAM)的读写互斥锁问题的解决方法
    • Access数据库的压缩与修复
    • 如何使用MySQL Workbench?
    • MySQL前缀索引导致的慢查询分析总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有