mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
语法
mysql_real_escape_string(string,connection)
参数
|
描述
|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
说明
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
例子 1
<?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); ?>
例子 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 = 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); ?>
参考来源:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp 打开链接
相关推荐
### PHP防止SQL注入方法详解 #### 一、引言 SQL注入是一种常见的Web应用程序安全漏洞,攻击者通过在输入字段中插入恶意SQL语句来控制数据库查询,从而获取敏感信息或者破坏数据。本文将深入探讨如何利用PHP语言来...
这是防止SQL注入的最有效方法。 服务器端的代码示例(假设使用PHP和MySQLi): ```php // 使用预处理语句和参数化查询来防止SQL注入 $stmt = $mysqli->prepare("SELECT * FROM users WHERE username=? AND ...
3. **使用安全库或工具类**:这里提到的“防止SQL注入工具类”可能是指一个专门用于处理SQL注入的PHP库。这个工具类可能提供了自动转义或参数化查询的功能,比如`mysqli_real_escape_string`函数,或者更高级的ORM...
php中防止SQL注入的方法,安全,PHP代码编写是一方面,PHP的配置更是非常关键。
为了防止SQL注入,我们需要遵循以下原则: 1. 使用预处理语句:预处理语句(如PDO或mysqli的预处理)可以使SQL语句和参数分离,有效避免注入攻击。 2. 参数化查询:与预处理类似,参数化查询能确保用户输入的数据...
5. **使用安全框架**:现代Web框架如Laravel、Symfony等内置了强大的安全特性,包括防止SQL注入的机制,开发者应充分利用这些框架提供的安全措施。 6. **教育与培训**:定期对开发团队进行安全意识培训,强调SQL...
这两个扩展都支持预处理语句,这是防止SQL注入的有效手段。 **预处理语句与参数绑定** 预处理语句是防止SQL注入的一种最佳实践。它允许开发者在执行SQL查询之前先定义好结构,然后将变量作为参数传递。这样,即使...
方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙
本案例主要在PHP中分别使用PDO的quote()方法和prepare()预处理语句来实现防止sql注入的功能。 所谓sql注入,就是通过把sql命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql...
2. Prepared Statement:使用 Prepared Statement 来防止 SQL 注入攻击。 3. LIMIT 和 OFFSET:使用 LIMIT 和 OFFSET 限制查询结果,防止敏感数据泄露。 4.Least Privilege:使用最小权限原则,限制数据库用户的权限...
### PHP168 SQL注入漏洞分析与利用 #### 背景介绍 PHP168是一款基于PHP语言开发的内容管理系统,被广泛应用于政府网站、企业官网等场景中。然而,在某些版本中,PHP168存在着严重的SQL注入漏洞,攻击者可以利用此...
首先,PHP防止SQL注入的主要方法是使用预处理语句(Prepared Statements)和参数化查询。预处理语句允许开发者提前编译SQL模板,然后在执行时传递变量作为参数,而不是直接拼接在SQL字符串中。这可以确保即使输入的...
1. **参数化查询/预编译语句**:使用参数化查询,如PHP的PDO或MySQLi的预处理语句,可防止SQL注入。 2. **输入验证**:对用户输入进行严格的验证,拒绝不符合规则的数据。 3. **转义特殊字符**:对用户输入进行转义...
SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改...通过深入学习和实践,可以有效地防止SQL注入攻击,保障系统的安全。
以下是对SQL注入漏洞的全面讲解,包括其原理、防范方法以及高级技巧。 1. SQL注入漏洞原理: SQL注入的基础在于,当用户输入的数据直接拼接到SQL查询语句中,而没有经过适当的过滤或转义,攻击者可以构造特定的...
但最好的防御策略不是依赖这些设置,而是采用参数化查询或预编译语句,如PHP的PDO或MySQLi的预处理语句,这些方法能确保用户输入被正确地隔离,从而防止SQL注入。 例如,下面的PHP代码展示了如何使用预编译语句防止...
以下是对PHP防止SQL注入的一些详细方法和策略的分析: 1. **参数化查询与预处理语句**: 使用PDO(PHP Data Objects)或MySQLi的预处理语句可以有效防止SQL注入。例如,使用`PDO::prepare()`创建预处理语句,并...
以下是对防止SQL注入的一些方法的详细分析: 首先,我们来看一个不安全的登录代码示例: ```php $sql = 'select * from test where username = "$username" and password = "$password"'; ``` 这个例子中的`$...
SQL注入是攻击者通过输入恶意的SQL代码,欺骗数据库服务器执行非预期的操作,从而获取、修改、删除或添加数据的一种方法。在PHP环境中,由于不安全的用户输入处理,这种漏洞尤为突出。 二、PHP SQL注入的类型 1. ...
【PHP防止SQL注入的方法】 1. **预处理语句(Prepared Statements)**:使用PDO或MySQLi扩展的预处理语句可以有效地防止SQL注入。预处理语句将查询结构与用户输入的数据分开,确保即使用户输入恶意代码,也无法改变...