举例说明PHP表单验证功能
PHP表单验证
提示:处理PHP表单要注意安全!
这些页面将展示如何安全地处理PHP表单。正确验证HTML表单数据对于防止黑客和垃圾邮件非常重要!
我们稍后将使用的HTML表单包含各种输入字段:必填和可选文本字段、单选按钮和提交按钮:
上述表单使用以下验证规则:
字段验证规则名称是必需的。必须包含字母和空格。需要电子邮件。必须包含有效的电子邮件地址(包括@和。).网站是可选的。如果可选,您必须包含有效的网址。注释可选。多行输入字段(文本框)。性别是必需的。您必须选择一个项目。首先,让我们看看这个表单的纯HTML代码:
文本字段
名称、电子邮件和网站属于文本输入元素,注释字段是文本框。HTML代码是这样的:
名称:输入类型='文本'名称='名称'电子邮件:输入类型='文本'名称='电子邮件'网站:输入类型='文本'名称='网站'注释3360文本区域名称='注释'行=' 5 '列=' 44
性别字段是一个单选按钮,HTML代码如下:
Gender:输入类型=' radio '名称='性别'值='女性'女性输入类型=' radio '名称='性别'值='男性'男性形式元素
表单的HTML代码如下:
form方法='post' action='?PHP echo html specialchars($ _ SERVER[' PHP _ SELF ']);'提交此表单时,通过方法='post '发送表单数据。
$_SERVER['PHP_SELF']变量是什么?
$_SERVER['PHP_SELF']是一个超全局变量,返回当前正在执行的脚本的文件名。
因此,$_SERVER['PHP_SELF']将表单数据发送到页面本身,而不是跳转到另一个页面。这样,用户可以在表单页面上获得错误消息。
什么是htmlspecialchars()函数?
函数HTMLspecialchars()将特殊字符转换为html实体。这意味着像和这样的HTML字符将被和替换。这可以防止攻击者通过向表单中注入HTML或JavaScript代码来利用代码(跨站点脚本攻击)。
PHP表单安全性的重要提示
变量$_SERVER['PHP_SELF']可被黑客利用!
如果你的页面使用PHP_SELF,用户可以输入下划线,然后执行跨站点脚本(XSS)。
提示:跨站点脚本(XSS)是一种计算机安全漏洞,在Web应用程序中很常见。XSS允许攻击者将客户端脚本输入到其他用户浏览的网页中。
假设我们在名为“test_form.php”的页面中有以下表单:
form方法='post' action='?PHP echo $ _ SERVER[' PHP _ SELF '];'现在,如果用户在地址栏中输入正常的网址:“http://www.example.com/test _ form . PHP”,上面的代码将被转换为:
form method=' post ' action=' test _ form . PHP ',到目前为止,一切正常。
但是,如果用户在地址栏中键入以下网址:
http://www.example.com/test _ form.php/"> <脚本>警报(“黑客”)脚本>在这种情况下,上述代码将被转换为:
form方法=' post ' action=' test _ form . PHP '/script alert(' hacked ')/script添加一个脚本和一个提示命令。当这个页面被加载时,JavaScript代码将被执行(用户会看到一个提示框)。这只是一个关于PHP_SELF变量如何使用的简单而无害的案例。
您应该知道,任何JavaScript代码都可以添加到脚本标签中!黑客可以将用户重定向到另一台服务器上的文件,文件中的恶意代码可以更改全局变量或将表单提交到其他地址以保存用户数据,等等。
如果$_SERVER['PHP_SELF']被阻止使用?
通过使用htmlspecialchars()函数,可以避免使用$_SERVER['PHP_SELF']。
表单代码如下:
form方法='post' action='?PHP echo html specialchars($ _ SERVER[' PHP _ SELF ']);'函数HTMLspecialchars()将特殊字符转换为html实体。现在,如果用户尝试使用PHP_SELF变量,将会得到以下输出:
form method=' post ' action=' test _ form.php/'scriptalert('黑客')/script '不能使用,所以没有坏处!
通过PHP验证表单数据
我们需要做的第一件事是通过PHP的htmlspecialchars()函数传递所有的变量。
在我们使用htmlspecialchars()函数之后,如果用户试图在文本字段中提交以下内容:
script location . href(' http://www . hacked.com ')/script-代码不会被执行,因为它将被保存为转义码,如下所示:
现在,该代码可以安全地显示在页面或电子邮件中。
当用户提交表单时,我们还有两件事要做:
用户输入数据中不必要的字符(多余的空格、制表符、换行符)被删除(通过PHP trim()函数),用户输入数据中的反斜杠(\)被删除。然后我们创建一个检查函数(这比反复编写代码更有效)。
我们将函数test_input命名为()。
现在,我们可以通过test_input()函数检查每个$_POST变量。剧本是这样的:
例子
?Php//定义变量并将其设置为null值$ name=$ email=$ gender=$ comment=$网站=' ';if($ _ SERVER[' REQUEST _ METHoD ']==' POST '){ $ name=test _ input($ _ POST[' name ']);$ email=test _ input($ _ POST[' email ']);$网站=test_input($_POST['网站']);$ comment=test _ input($ _ POST[' comment ']);$ gender=test _ input($ _ POST[' gender ']);} function test _ input($ data){ $ data=trim($ data);$ data=strip slashes($ data);$ data=html specialchars($ data);返回$数据;}?请注意,在脚本的开始,我们检查表单是否使用$_SERVER['REQUEST_METHOD']提交。如果REQUEST_METHOD是POST,那么表单已经提交了——并且应该被验证。如果未提交,则跳过验证,并显示一个空白表单。
但是,在上面的示例中,所有输入字段都是可选的。即使用户没有输入任何数据,脚本也可以正常工作。
下一步是制作必需的输入字段,并创建错误消息,以便在必要时使用。
版权声明:举例说明PHP表单验证功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。