PHP 表单验证:在HTML表单提交的的时候,经常会有关键字段需要我们做安全验证,这样对于防范黑客和垃圾邮件很重要。
PHP 表单验证实例
验证字段:
HTML 表单文件,index.php
说明:
$_SERVER["PHP_SELF"] 变量能够被黑客利用,如果你的页面使用了 PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。
跨站点脚本(Cross-site scripting,XSS)是一种计算机安全漏洞类型,常见于 Web 应用程序。XSS 能够使攻击者向其他用户浏览的网页中输入客户端脚本。
比如:上面的form表单中的action为:<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
现在,如果用户进入的是地址栏中正常的 URL:"http://localhost/php/1016/test.php",上面的代码会转换为:
<form method="post" action="test_form.php">到目前,看起来一切正常。
不过,如果有用户在浏览器的地址栏中输入了如下 URL:
http://localhost/php/1017/test.php/%22%3E%3Cscript%3Ealert('我是黑客')%3C/script%3E
在这种情况下,上面的代码会转换为:
<form method="post" action="test.php"/><script>alert('我是黑客')</script>
这段代码加入了一段脚本和一个提示命令。并且当此页面加载后,就会执行 JavaScript 代码(用户会看到一个提示框)。这仅仅是一个关于 PHP_SELF 变量如何被利用的简单无害案例。
因为<script> 标签内能够添加任何 JavaScript 代码!黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等。
如何避免 $_SERVER["PHP_SELF"] 被利用?
通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
所以表单代码改成这样:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出
<form method="post" action="test.php/"><script>alert('hacked')</script>">无法利用,没有危害!
通过 PHP 验证表单数据:我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。
在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:
<script>location.href('http://www.hacked.com')</script>
代码不会执行,因为会被保存为转义代码,就像这样:
<script>location.href('http://www.hacked.com')</script>
现在这条代码显示在页面上或 e-mail 中是安全的。
现在在提交HTML的时候,我们还需要做数据安全验证:trim() 函数去除用户输入数据中不必要的字符(多余的空格、制表符、换行),PHP stripslashes() 函数删除用户输入数据中的反斜杠(\)。
我们可以封装一个函数,避免每次在提交数据都写同样的验证规则。如下:
请注意在脚本开头,我们检查表单是否使用 $_SERVER["REQUEST_METHOD"] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。
不过,在上面的例子中,所有输入字段都是可选的。即使用户未输入任何数据,脚本也能正常工作。
下一节是制作必填输入字段,并创建需要时使用的错误消息。
并附上网址演示。
作者:林路同,转载请注明来源,谢谢。
公众号:林路同
林中多歧路,殊途同归。互联网资讯,名人传记,搞笑段子,笑话故事,社会热点,创业故事,技术分享,如果您觉得不错就关注下树洞吧,树洞会再接再厉的哈。