首页博客网络编程
每个编码人员都了解 Web 安全的重要性。违反安全规定可能会造成轻微的不便以及巨大的经济损失和侵犯隐私。这就是为什么PHP表单验证也应该被视为优先事项。
用户提交包含其数据的表单后,验证此输入至关重要。在过去的课程中,我们已经讨论过使用简单和高级的 PHP 过滤器来验证和清理可能从外部到达我们代码的数据。
现在我们将学习将这些知识应用于PHP表单。毕竟,它们专门用于收集您网站访问者提供的外部数据。使用大量的PHP表单验证示例,我们将逐步向您解释。
为了确保您的 PHP 表单是安全的,您需要设置表单验证。
如果您正确设置了 PHP 表单验证,它将保护您的数据库免受 SQL 注入和利用。
要了解 PHP 表单处理的工作原理,让我们首先创建一个表单本身的示例。它将包括三个输入字段:
昵称(必填):只能由字母字符和空格组成。
反馈(可选):多行文本字段。
匿名发帖?(必填):必须选择一个值才能提交表单。
这是我们将使用的完整 HTML 表单 PHP 代码:
例复制
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Nickname: <input name="nickname" type="text"> Feedback: <textarea name="feedback" rows="4" cols="50"></textarea> Post anonymously? <input name="anon" type="radio" value="yes">Yes <input name="anon" type="radio" value="no">No <input name="submit" type="submit" value"submit">Submit</input></form>
现在这是 PHP 表单验证的脚本:
例复制
<?php // define variables and set to empty values $nickname = $anon = $feedback = ''; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $nickname = test_input($_POST['nickname']); $feedback = test_input($_POST['feedback']); $anon = test_input($_POST['anon']); } function proc_input($input) { $input = trim($input); $input = stripslashes($input); $input = htmlspecialchars($input); return $input; }?>
首先,我们传递所有提交的变量,并将所有特殊字符转换为 HTML 实体。它使条目可以安全处理。htmlspecialchars()
其次,我们将使用该函数从输入数据中删除多余的空格、制表符和换行符,然后从输入中删除反斜杠。我们不是为每个输入重复编写这些函数,而是在单个函数中定义它们,并在每个函数上使用它。trim()
stripslashes()
proc_input()
在脚本开始时,我们检查输入是否使用 .假设为 ,则表单已提交并验证。否则,将显示空白表单。$_SERVER["REQUEST_METHOD"]
REQUEST_METHOD
POST
有几个选项可以要求用户输入。最常见的类型之一是文本字段。但是,您也可以使用单选按钮自定义表单。
要创建文本输入字段,我们将使用 HTML 标记并分配 name 属性。这样我们就能够在 PHP 代码中引用输入字段。看一看:<input>
例复制
Nickname: <input name="nickname" type="text" >Feedback: <textarea name="feedback" rows="4" cols="50"></textarea>
当用户必须从提供的选择中选择单个选项时,将使用单选按钮。要创建其中两个,请创建两个具有相似名称属性的输入元素。不要忘记为它们分配各自的值属性!
查看示例以了解代码的外观:
例复制
Post anonymously?<input name="anon" type="radio" value="yes">Yes<input name="anon" type="radio" value="no">No
为了创建一个 HTML 表单 PHP 元素,该元素可以抵抗与 PHP 表单验证和订阅相关的各种攻击,我们将使用该函数将特殊字符(例如尖括号<>)转换为 HTML 实体。我们分配给此表单的方法是 POST,因为我们的目标是上传数据。htmlspecialchars()
这是一个全局变量,我们在使用该函数时使用它来引用我们当前所在的页面:$_SERVER["PHP_SELF"]
htmlspecialchars()
例复制
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
注意:htmlspecialchars() 函数是避免 $_SERVER[“PHP_SELF”] 漏洞利用的绝佳工具,因为它可以防止攻击者输入可能允许他们向您的网站输入代码的特殊字符。
当心名为 的变量。$_SERVER["PHP_SELF"]
通过在当前页面中使用并输入符号,攻击者可以使用跨站点脚本 (XSS) 命令。PHP_SELF
/
注意:跨站点脚本 (XSS) 是大多数 Web 应用程序常见的安全错误。使用 XXS,攻击者可以更改您网站上的客户端脚本。
想象一下,这是我们文件表单中的表单元素.php:
例复制
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
如果输入了一个普通的URL,上面的代码将变成类似于这个PHP表单验证示例的东西:
例复制
<form method="post" action="form.php">
嗯,这通常会发生。但是,有人可以输入如下所示的 URL:
例复制
http://www.example.com/form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
然后,上面的代码将变成这样的东西:
例复制
<form method="post" action="form.php/"><script>alert('hacked lmao')</script>
在这种情况下,URL 输入一个命令,使我们的网站显示一个 JavaScript 警报,指出被黑客入侵。这里的教训是,使用 是一个可能很容易利用的弱点。PHP_SELF
请记住,通过添加代码,黑客可以在您的网站上运行 JavaScript 代码。这种入侵会让他们损害您的数据库或网站。<script>
表单验证至关重要:没有它,您无法完全确定表单是否受到保护。
如果您花时间准备 PHP 验证,则可以避免 SQL 注入和数据库利用。
使用 PHP SELF,如果您跳过关键的 PHP 表单验证步骤,攻击者可能会损坏您的网站。
声明提示:若要转载请务必保留原文链接,申明来源,谢谢合作!
广告位
广告位