以下PHP内置函数能增加PHP代码的安全性:

类型转换(非函数)
(int), (integer) - 转换为整数
(bool), (boolean) - 转换为布尔值
(float), (double), (real) - 转换为浮点数
(string) - 转换为字符串
(array) - 转换为数组

//防止sql注入
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符( NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.),并考虑到连接的当前字符集。不转义 % and _.
mysqli::real_escape_string —(mysqli_real_escape_string) 转义特殊字符( NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.)到一个字符串中用于SQL语句,考虑到当前编码的连接.不转义 % and _.

//防止上传漏洞
exif_imagetype 判断一个图像的类型
getimagesize 函数将测定任何图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

finfo_file — 返回一个文件的信息(PHP 5 >= 5.3.0

escapeshellcmd — 过滤用作命令的字符串中的特殊字符(转义shell元字符)转义( #&;`|*?~<>^()[]{}$\, \x0A and \xFF. ' and ")

stream_filter_append — 为数据流添加过滤器(附加一个过滤器到一个数据流)
stream_filter_prepend — 为数据流预备添加过滤器(附加一个过滤器到一个数据流)
stream_filter_register — 注册一个用户定义的数据流过滤器

rawurldecode — 对已编码的 URL 字符串进行解码
rawurlencode — 按照 RFC 3986 对 URL 进行编码
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱
urldecode — 解码已编码的 URL 字符串
urlencode — 编码 URL 字符串 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

str_replace子字符串替换

preg_filter — 执行一个正则表达式搜索和替换(PHP 5 >= 5.3.0)
preg_grep — 返回匹配模式的数组条目(返回与模式匹配的数组单元)
preg_match_all — 执行一个全局正则表达式匹配
preg_match — 执行一个正则表达式匹配
preg_quote — 转义正则表达式字符 正则表达式特殊字符有. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调函数进行替换
preg_replace — 执行一个正则表达式的搜索和替换

htmlentities — 转换所有合适的字符为HTML实体
htmlspecialchars — 转换特殊字符为HTML实体(转换',",<,>,&)

quotemeta — 引用元字符(在. \ + * ? [ ^ ] ( $ )前添加反斜杠)
addcslashes — 以 C 语言风格使用反斜线转义字符串中的指定字符(转义自定义字符)
addslashes — 使用反斜线转义字符串(在',",\,NUL前添加反斜杠)
strip_tags — 从字符串中去除 HTML 和 PHP 标记

array_filter — 用回调函数过滤数组中的元素
array_map — 将回调函数作用到给定数组的单元上
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
array_walk — 对数组中的每个成员应用用户函数

ctype_alnum — 检测是否符合字母数字格式
ctype_alpha —检测是否都是字母
ctype_cntrl — 是否都是控制字符
ctype_digit — 是否都是数字
ctype_graph — 检测是否都是可以显示的字符(不包含空格)
ctype_print — 检测是否都是可以显示的字符(包含空格)
ctype_punct — 检测是否是可以显示的字符,但是不包含字母数字和空格(注:是否都是键盘上的标点符号和特殊字符)

//数据筛选 可验证:布尔值,email,整数,浮点数,IP,url,正则等。
filter_has_var — 检查是否存在指定类型的变量
filter_input_array — 从脚本外部获取多项输入,并进行过滤(得到多个外部变量并选择性地过滤它们)
filter_input — 从脚本外部获取输入,并进行过滤(获得一个特定的外部变量的名称,并选择性地过滤它)
filter_list — 返回一个所有支持的过滤器的列表
filter_var_array — 得到多个变量并选择性地过滤它们
filter_var — 用一个指定过滤器过滤一个变量

gettype — 获取变量的类型*
intval — 获取变量的整数值 var 可以是任何标量类型。 intval() 不能用于 array 或 object。
floatval — 获取变量的浮点值 var 可以是任何标量类型。你不能将 floatval() 用于数组或对象。
strval — 获取变量的字符串值 var 可以是任何标量类型。不能将 strval() 用于数组或对象。
is_array — 检测变量是否是数组
is_bool — 检测变量是否是布尔型
is_float — 检测变量是否是浮点型
is_int — 检测变量是否是整数
is_null — 检测变量是否为 NULL
is_numeric — 检测变量是否为数字或数字字符串
is_scalar — 检测变量是否是一个标量
is_string — 检测变量是否是字符串
settype — 设置变量的类型

转载请说明出处:

来自Lenix的博客

http://blog.p2hp.com/archives/803

最后更新于 2014年2月22日

PHP安全相关函数
标签: