php过滤器

       Web程序后台处理请求时,不能相信客户端的输入,要把一切输入都看做带有恶意数据。

对用户输入的内容要进行各种过滤,确保程序在按照指定的路径运行。PHP自带了一些过滤函数。

  • filter_var() - 通过一个指定的过滤器来过滤单一的变量

  • filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量

  • filter_input - 获取一个输入变量,并对它进行过滤

  • filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

下面使用filter_var()来验证一个整数:

<?php
$int=123;
              
if(filter_var($int, FILTER_VALIDATE_INT)) //FILTER_VALIDATE_INT是整数过滤器
echo "数字有效";
else
echo "数字非法";
?>

filter_input() 函数用来过滤输入的数据,filter_input()可以获取输入的变量,如下代码:

<?php
if(!filter_has_var(INPUT_GET,"email")) //INPUT_GET用于获取全局变量,这里用来获取用GET方法提交的数据,参见:<A href='http://www.51cto.com/art/200710/58950.htm">http://www.51cto.com/art/200710/58950.htm'>http://www.51cto.com/art/200710/58950.htm">http://www.51cto.com/art/200710/58950.htm</A>
echo "数据不存在";
else
{
if(!filter_input(INPUT_GET,"email",FILTER_VALIDATE_EMAIL)) //用FILTER_VALIDATE_EMAIL过滤器来验证用户输入的邮箱是否合法
echo "邮箱非法";
else
echo "邮箱合法";
}
?>

将上面代码保存成checkmail.php放到服务器上,然后我们再简单编写一个form表单,用于提交邮箱,如下:

<html>
<body>
<form method="get" action="checkmail.php">
<input type="text" name="email" >
<input type="submit">
</form>
</body>
</html>

将上面代码保存成submitmail.php放到服务器上,直接访问即可。

  FILTER_SANITIZE_URL用来过滤输入的URL,如下代码:

<?php
if(!filter_has_var(INPUT_POST, "url")) //检查是否获取到post过来的url数据
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
echo $url;
}
?>

上面代码保存为checkurl.php,然后编写form表单如下:

<html>
<body>
<form method="post" action="checkurl.php">
<input type="text" name="url"> <!--这里可以输入非法的url,例如 <A href="http://ye汉字etrack.com">http://ye汉字etrack.com</A> -->
<input type="submit" value="submit">
</form>
</body>
</html>

同样保存到服务器,直接访问即可。
       我们还可以自定义过滤器,如下,下面的代码将单引号前面加上,取消其特殊意义,常用来防御sql注入。

<?php
function myFilter($string)
{
return str_replace("'", "'", $string);
}
     
$string = "admin' or 1=1-- ";
     
echo filter_var($string, FILTER_CALLBACK, array("options"=>"myFilter"));
?>
版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=111