服务器端用 mysql_real_escape_string 清洁客户端数据
在服务器端清洁客户端数据是每个程序员经常要做的工作,虽然我们通常会在客户端添加 Javascript 验证,但是,恶意用户很容易自己构造 FORM 提交数据以绕过客户端验证,另外,在客户端禁用 Javascript 时验证同样不能起到作用。因此,服务器端清洁数据必不可少,本文介绍的是用 mysql_real_escape_string 清洁数据的方法,经过清洁的数据可以直接插入到数据库中。
由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。
PHP:
1 <?php
2 // 说明:用 array_map() 调用 mysql_real_escape_string 清理数组
3 // 整理:http://www.codebit.cn
4 function mysqlClean($data)
5 {
6 return (is_array($data))?array_map('mysqlClean', $data):mysql_real_escape_string($data);
7 }
8 ?>
调用方法
PHP:
1 <?php
2 $conn = mysql_connect('localhost', 'user', 'pass');
3
4
5 $_POST = mysqlClean($_POST);
6 ?>
经过清洁的数据可以直接插入数据库。
注意!mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:
mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。
在知道数据类型为字符串时,我们可以在清洁数据的同时限制字符串长度。此方法来自 David Lane, Hugh E. Williams《Web Database Application with PHP and MySQL 》(O'Reilly, May 2004)
PHP:
1 <?php
2 // 说明:用 mysql_real_escape_string 清洁并限制字符长度
3 // 整理:http://www.codebit.cn
4 function mysqlClean($array, $index, $maxlength)
5 {
6 if (isset($array[$index]))
7 {
8 $input = substr($array["{$index}"], 0, $maxlength);
9 $input = mysql_real_escape_string($input);
10 return ($input);
11 }
12 return NULL;
13 }
14 ?>
调用方法:
PHP:
1 <?php
2 $conn = mysql_connect('localhost', 'user', 'pass');
3
4 if(isset($_POST['username']))
5 {
6 $_POST['username'] = mysqlClean($_POST, 'username', 20);
7 echo $_POST['username'];
8 }
9 ?>
将 $_POST 数组中的 'username' 清洁并截取前20位字符。
摘自:http://www.cnblogs.com/labs
分享到:
相关推荐
随着时间的推进,addslashes()被弃用,而mysql_real_escape_string()虽然更为强大,但使用预处理语句才是防范SQL注入的最佳做法。开发者在设计数据库交互的应用时,需要充分考虑这些安全措施,确保系统的健壮性和...
使用mysql_real_escape_string函数 使用addslashes函数 使用mysql bind_param() 本文章向大家详细介绍这三个方法在防止SQL注入攻击中的效果及区别。 mysql_real_escape_string防sql注入攻击 mysql_real_escape_...
语法mysql_real_escape_string(string,connection) 参数 描述 string 必需。规定要转义的字符串。 connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 说明 本函数将 string 中的特殊字符转义...
然而,值得注意的是,`mysql_escape_string()`在PHP 5.3版本后已被废弃,不再推荐使用,而是建议使用更安全的`mysqli_real_escape_string()`或者使用参数绑定的方法,如PDO。 `mysql_escape_string()`函数的基本...
然而,由于`mysql_real_escape_string()`的存在,`mysql_escape_string()`现在已被视为过时,并且应该尽量避免使用。 总结来说,`addslashes()` 适用于简单的单字节字符串处理,而`mysql_real_escape_string()` 是...
本文实例分析了PHP中addslashes与mysql_escape_string的区别。分享给大家供大家参考,具体如下: 1.在插入数据时两者的意义基本一样....而且最好用面向对象的mysqli::real_escape_string, 如果非要用面向过程的
`mysql_escape_string()` - **功能**:对SQL语句中的字符串进行特殊字符转义,防止SQL注入。 - **使用场景**:任何通过用户输入动态生成SQL语句的场合,保障数据安全。 #### 14. `mysql_fetch_field()` - **功能**...
mysql_escape_string() 函数用在SQL语句中的字符串的转义特殊字符。 mysql_fetch_field() 函数返回下一个表字段的类型。 通过本文,我们可以了解如何使用C++语言来操作MySQL数据库,并且掌握了MySQL的API接口函数...
13. `mysql_real_escape_string`:与 `mysql_escape_string` 类似,但会考虑连接的字符集,提供更安全的字符串转义。 14. `mysql_fetch_array` / `mysql_fetch_assoc` / `mysql_fetch_field` / `mysql_fetch_...
19. `mysql_real_escape_string()`:与`mysql_escape_string()`相似,但考虑到当前的字符集设置。 20. `mysql_insert_id()`:返回最后插入行的ID,适用于自增主键。 21. `mysql_fetch_lengths()`:返回每一字段的...
36. `mysql_real_escape_string()`:与`mysql_escape_string()`类似,但考虑了连接的字符集,提供更安全的字符串转义。 37. `mysql_rollback()`:回滚当前事务,取消在事务中所做的更改。 38. `mysql_set_...
使用`mysql_real_escape_string()`函数时,有一个重要的注意事项:应该只对传入SQL语句的字符串参数使用该函数,而不是对整条SQL语句使用。如果对整条SQL语句使用`mysql_real_escape_string()`函数,可能会导致SQL...
C API是MySQL最基础的接口,它是用C语言编写的,因此可以直接在C/C++程序中使用。C API包括了如mysql_init(), mysql_real_connect(), mysql_query(), mysql_fetch_row()等一系列函数,用于初始化连接、建立到MySQL...