Abstract: 本周写的新闻管理系统未对用户输入做出相应的判断,存在大量的漏洞,这篇文章特地总结了php内置过滤函数。

一、SQL注入过滤函数

1. addslashes()

定义和用法

addslashes(string)函数返回在预定义的字符前添加反斜杠的字符串。

预定义字符是:

  • 单引号(‘)

  • 双引号(“)

  • 反斜杠()

  • NULL

参数 描述
string 必需。规定要转移的字符串。
1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
$str = addslashes($id);
echo $str;

?>

2. mysql_escape_string()

在PHP5.3中已经弃用mysql_escape_string()

mysql_escape_string()并不转义%_

1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
@$str = mysql_escape_string($id);
echo $str;

?>

3. mysql_real_escape_string()

定义和用法

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

受影响的字符:

  • \x00
  • \n
  • \r
  • \
  • \x1a

若成功,返回被转义的字符串,否则,返回false

参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定MySQL连接。未规定,则使用上一个连接。
1
2
3
4
5
6
7
8
9
<?php

$id=$_GET["id"];
if(@$str = mysql_real_escape_string($id))
echo $str;
else
echo 'false';

?>

二、XSS过滤函数

1. htmlspecialchars()

定义和用法

htmlspecialchars()函数把预定义的字符转换成HTML实体。

1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
$str = htmlspecialchars($id);
echo $str;

?>
参数 描述
string 必需。规定要转义的字符串。

2. strip_tag()函数

定义和用法

strip_tags(string, allow) 函数剥去字符串中的HTMLXML 以及PHP的标签。

参数 描述
string 必需。规定要检查的字符串。
allow 可选。规定允许的标签。这些标签不会被删除。
1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
$str = strip_tags($id);
echo $str;

?>

三、命令执行过滤函数

1. escapeshellcmd()

定义和用法

在Windows下过滤方式是在字符前面加上一个^符号;在Linux是在字符前加上反斜杠(\)

1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
$str = escapeshellcmd($id);
echo $str;

?>

2. escapeshellarg()

定义和用法

给所有参数加上一对双引号,强制为字符串。

1
2
3
4
5
6
7
<?php

$id=$_GET["id"];
$str = escapeshellarg($id);
echo $str;

?>

参考博文