当前位置:首页 > 芯闻号 > 充电吧
[导读]定义和用法mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。下列字符受影响:如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。m


定义和用法



mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。


下列字符受影响:


如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。


mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
提示和注释


提示:可使用本函数来预防数据库攻击。
<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }


// 获得用户名和密码的代码


// 转义用户名和密码,以便在 SQL 中使用
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);


$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"


// 更多代码


mysql_close($con);
?>
数据库攻击。本例演示如果我们不对用户名和密码应用 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 ''=''
这意味着任何用户无需输入合法的密码即可登陆。


预防数据库攻击的正确做法:


<?php
function check_input($value)
{
// 去除斜杠
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// 如果不是数字则加引号
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
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);
?>

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

前言sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的改造成本相对于代码来说...

关键字: sql

摘 要:“Apache+php+ MySQL”组成了一套完整的开发B/S架构的网络信息系统的工具。文中以该套工具开发产品售后服务管理系统为例,介绍了开发过程中的技术难点及解决方法。

关键字: Apache php MySQL 产品售后服务管理系统

无论是开发、测试,还是DBA,都难免会涉及到数据库的操作,比如:创建某张表,添加某个字段、添加数据、更新数据、删除数据、查询数据等等。

关键字: 数据库 sql

PHP 7.4.9 版本现已发布,具体更新内容如下:Apache:修复了错误#79030(升级 apache2handler 的 php_apache_sapi_get_request_time 以返

关键字: php

如果使用美国服务器创建网站,则必须在美国服务器系统上创建环境。 今天,我将介绍美国服务器Linux系统的工作方式。

关键字: apache Linux php

近日消息,PHP 8.0将于11月发布,但当这个重要的新版本出现时,它遇到了很大的挫折,Windows将不支持它,原因未知。

关键字: php Windows 微软

前言 上一篇总结了Mysql的锁机制,通过读者的反映和阅读量显示,总体还是不错的,感兴趣的可以阅读一下[大厂面试官必问的Mysql锁机制]。 写了那么多的Mysql文章,有读者问我是不是dba,工作真的需要掌握那么深吗。...

关键字: sql

2020 年 6 月 8 日,PHP 迎来了自己的 25 周岁生日。JetBrains 在博客中梳理了该语言自 1995 年诞生以来的种种历程,这种语言最初是用 C 语言编写的一组通用网关接口(C

关键字: php

前言 前几天有粉丝和我聊到他找工作面试大厂时被问的问题,因为现在疫情期间,找工作也特别难找。他说面试的题目也比较难,都偏向于一两年的工作经验的面试题。 他说在一面的时候被问到Mysql的面试题,索引那块自己都回答比较满意...

关键字: sql

                        我所写的项目是使用Maven开发,在pom.xml中添加如下必要依赖:         添加com.microsoft.sqlserver的mssql-

关键字: server sql 存储过程
关闭
关闭