PHP 安全手册 第五条 输出转义 最好的MYSQL 转义函数 mysql_real_escape_string
来源:互联网 发布:穿越到唐朝的小说 知乎 编辑:程序博客网 时间:2024/05/18 03:16
过滤的延深 就是转义,有些数据是无法进行过滤,但还必须存在的时候,就要进行转义
尤其在数据库中查找,或是写入的时候,很重要
作为一项应用的开发者,你必须知道每一个向外部系统输出的地方。它们构成了输出。
象过滤一样,转义过程在依情形的不同而不同。过滤对于不同类型的数据处理方法也是不同的,转义也是根据你传输信息到不同的系统而采用不同的方法。
对于一些常见的输出目标(包括客户端、数据库和URL)的转义,PHP中有内置函数可用。如果你要写一个自己算法,做到万无一失很重要。需要找到在外系统中特殊字符的可靠和完整的列表,以及它们的表示方式,这样数据是被保留下来而不是转译了。
最常见的输出目标是客户机,使用htmlentities( )在数据发出前进行转义是最好的方法。与其它字符串函数一样,它输入是一个字符串,对其进行加工后进行输出。但是使用htmlentities( )函数的最佳方式是指定它的两个可选参数:引号的转义方式(第二参数)及字符集(第三参数)。引号的转义方式应该指定为ENT_QUOTES,它的目的是同时转义单引号和双引号,这样做是最彻底的,字符集参数必须与该页面所使用的字符集相必配。
为了区分数据是否已转义,我还是建议定义一个命名机制。对于输出到客户机的转义数据,我使用$html数组进行存储,该数据首先初始化成一个空数组,对所有已过滤和已转义数据进行保存。
CODE:
<?php $html = array( ); $html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$html['username']}.</p>"; ?>
小提示
htmlspecialchars( )函数与htmlentities( )函数基本相同,它们的参数定义完全相同,只不过是htmlentities( )的转义更为彻底。
通过$html['username']把username输出到客户端,你就可以确保其中的特殊字符不会被浏览器所错误解释。如果username只包含字母和数字的话,实际上转义是没有必要的,但是这体现了深度防范的原则。转义任何的输出是一个非常好的习惯,它可以戏剧性地提高你的软件的安全性。
另外一个常见的输出目标是数据库。如果可能的话,你需要对SQL语句中的数据使用PHP内建函数进行转义。对于MySQL用户,最好的转义函数是mysql_real_escape_string( )。如果你使用的数据库没有PHP内建转义函数可用的话,addslashes( )是最后的选择。
下面的例子说明了对于MySQL数据库的正确的转义技巧:
CODE:
<?php $mysql = array( ); $mysql['username'] = mysql_real_escape_string($clean['username']); $sql = "SELECT * FROM profile WHERE username = '{$mysql['username']}'"; $result = mysql_query($sql); ?>
- PHP 安全手册 第五条 输出转义 最好的MYSQL 转义函数 mysql_real_escape_string
- php的几个转义函数
- 一个登陆安全的函数PHP mysql_real_escape_string() 函数
- php安全:深度防范、最小权限、过滤输入、转义输出
- PHP安全编程之对输出要进行转义
- PHP安全编程:对输出要进行转义
- php常用转义函数
- PHP转义函数
- PHP 转义与反转义函数
- PHP 转义与反转义函数
- PHP 安全攻防,实体转义
- 转义字符的输出
- php转义 与 编码 的函数
- PHP常用的转义函数有哪些
- PHP中常用的转义函数
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符,可使用本函数来预防数据库攻击。
- php的转义字符串
- php的转义字符串
- 转 -- 用sharding技术来扩展你的数据库
- base-OS/2-privilege levels
- Android控件位置控制
- linux下的C语言开发(进程创建)
- Blog小技巧之五-在Blog上添加邮件图标
- PHP 安全手册 第五条 输出转义 最好的MYSQL 转义函数 mysql_real_escape_string
- Android导入导出txt通讯录工具(源码共享)
- 如何在beamer中添加其它语言的描述性源代码【方法二】
- Android深入浅出之Binder机制
- Android Binder设计与实现 – 设计篇
- Windows网络编程附书代码(简单的服务器与客户端)
- 一个关于底层与上层开发话题讨论的片段
- PHP 安全手册 第六条 表单 不希望变动的数据要设置为常量 使用session 进行跟踪
- 利用DOM读取XML文件