PHP内置过滤函数总结

0x01 防止SQL注入

addslashes()

  • 单引号(’)
  • 双引号(”)
  • 反斜杠(\)
  • NULL 进行转义
1
2
3
4
5
6
7
8
9
10
 <?php

$a = $_GET['a'];
$b = addslashes($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);
?>

addslashes

mysql_escape_string()

该函数在php4.3的时候被弃用,在php5.3的时候会产生警告,在php7之后彻底移除。

mysql_escape_string不转义%和_

1
2
3
4
5
6
7
8
9
10
<?php

$a = $_GET['a'];
$b = mysql_escape_string($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);
?>

mysql_escape_string

mysql_real_escape_string()

  • 单引号(’)
  • 双引号(”)
  • 反斜杠(\)
  • \n \r \x00 \x1a

进行转义

mysql_real_escape_string()函数跟mysql_escape_string函数作用相同,但是mysql_real_escape_string接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。

本函数在php5.5已弃用,在php7之后被移除,应使用Mysqli和PDO_Mysql来替代。

mysqli_real_escape_string()

该函数作用与mysql_real_escape_string()函数一样,但是是替代mysql_real_escape_string的。

0x02 防止XSS

htmlspecialchars()

把预定义的字符转换为html实体

1
2
3
4
5
& (& 符号)         &amp;
" (双引号) &quot;,除非设置了 ENT_NOQUOTES
' (单引号) 设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于) &lt;
> (大于) &gt;

默认情况下:

1
2
3
4
5
6
7
8
9
10
11
<?php

$a = $_GET['a'];
$b = htmlspecialchars($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);

?>

htmlspecialchars

htmlentities()

本函数作用跟htmlspecialchars()一样,但是htmlentites()会转换所有拥有实体的字符。

strip_tag()

去除空字符、HTML 和 PHP 标记后的结果,可以添加第二个参数指定不被去除的字符列表

1
2
3
4
5
6
7
8
9
10
11
<?php

$a = $_GET['a'];
$b = strip_tags($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);

?>

strip_tags

1
2
3
4
5
6
7
8
9
10
11
<?php

$a = $_GET['a'];
$b = strip_tags($a, '<a>');

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);

?>

strip_tags

0x03 防止命令执行

escapeshellcmd()

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec()system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&
#
;
`
|
*
?
~
<、>
^
(、)
[、]
{、}
$
\
\x0A
\xFF

仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 %! 字符都会被空格代替。

1
2
3
4
5
6
7
8
9
10
11
<?php

$a = $_GET['a'];
$b = escapeshellcmd($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);

?>

escapseshellarg()

把字符串转码为可以在 shell 命令里使用的参数,escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符

1
2
3
4
5
6
7
8
9
10
11
<?php

$a = $_GET['a'];
$b = escapeshellarg($a);

echo "过滤前 :";
print_r($a);
echo "<br />过滤后 :";
print_r($b);

?>

本文标题:PHP内置过滤函数总结

文章作者:Pino-HD

发布时间:2018年06月10日 - 16:06

最后更新:2018年06月10日 - 16:06

原始链接:https://pino-hd.github.io/2018/06/10/PHP内置过滤函数总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!