把字符转换为 HTML 实体
<?php
$a = $_GET[fname];
$a1 = htmlentities($a);
echo '
<form action="form.php" method="get" align="center">
<h3>过滤测试</h3>
<input type="text" name="fname" value="'.$a1.'">
<br/>
<input type="submit" value="提交">
<h3>'.$a1.'</h3>
</form>';
?>
表单输入<script>alert(1);</script>后,可以发现<>被转义(当然还可以输入其他的,只要是字符就会转变成HTML实体)
<script>alert(1);</scrpit>
把一些预定义的字符转换为 HTML 实体
<?php
$a = $_GET[fname];
$a1 = htmlspecialchars($a);
echo '
<form action="form.php" method="get" align="center">
<h3>过滤测试</h3>
<input type="text" name="fname" value="'.$a1.'">
<br/>
<input type="submit" value="提交">
<h3>'.$a1.'</h3>
</form>';
?>
表单输入"<script>alert(1);</scrpit>,可以发现预定义的字符被转义
"<script>alert(1);</scrpit>
替换字符串中的一些字符(不区分大小写)
<?php
$a = $_GET[fname];
$a1 = str_ireplace("script", "scr_ipt", $a);
echo '
<form action="form.php" method="get" align="center">
<h3>过滤测试</h3>
<input type="text" name="fname" value="'.$a1.'">
<br/>
<input type="submit" value="提交">
<h3>'.$a1.'</h3>
</form>';
?>
表单输入<script>alert(1);</script>后,可以发现,script已经被过滤成scr_ipt了(当然你还可以设置过滤掉其他字符,这只是其中一个例子)
PS:该函数不区分大小写,所以输入SCRIPT也是一样的结果。
<scr_ipt>alert(1);</scrpit>
替换字符串中的一些字符(区分大小写)
与str_ireplace() 函数一样,本函数区分大小写,这里不做过多解释
剥去字符串中的 HTML、XML 以及 PHP 的标签
<?php
$a = $_GET[fname];
$a1 = strip_tags($a);
echo '
<form action="form.php" method="get" align="center">
<h3>过滤测试</h3>
<input type="text" name="fname" value="'.$a1.'">
<br/>
<input type="submit" value="提交">
<h3>'.$a1.'</h3>
</form>';
?>
表单输入<script>alert(1);</script>后,可以发现,HTML标签都被过滤了
alert(1);
目前只测试了这几种,更安全的方法还是推荐用正则表达式以及前端JavaScript第一次过滤,后端PHP再次过滤及加密来保证安全。如有错误,欢迎指出!
本文已放博客: 行云博客