htmlspecialchars()函数的功能如下:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
- & (和号)成为 &
- " (双引号)成为 "
- ' (单引号)成为 '
- < (小于)成为 <
- > (大于)成为 >
它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
可用的引号类型:
- ENT_COMPAT - 默认。仅编码双引号。
- ENT_QUOTES - 编码双引号和单引号。
- ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!
于是看下面的代码:
<?php
$name = $_GET["name"];
$name = htmlspecialchars($name);
?>
<input type='text' value='<?php echo $name?>'>
轻松绕过:
加上ENT_QUOTES参数:
<?php
$name = $_GET["name"];
$name = htmlspecialchars($name, ENT_QUOTES);
?>
<input type='text' value='<?php echo $name?>'>
发现无法绕过了:
查看源代码:
单引号已经被转换了。