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
近期评论