编程语言教程-PHP表单验证 PHP表单验证

编程语言教程-PHP表单验证 PHP表单验证

在本章中,我们将介绍如何使用编程语言教程-PHP来验证客户端提交的表单数据。在PHP网站开发中,用户通过表单提交数据信息。为了避免提交的数据是正确的、完整的和安全的,我们需要对PHP表单进行验证。

php由入门到精通-编程语言教程

PHP 表单验证

在处理PHP表单时,我们需要考虑安全性。在这一章中,我们将展示PHP表单的数据安全处理。为了防止黑客和垃圾邮件,我们需要验证表单的数据安全性。

本章介绍的HTML表单包含以下输入字段:可选文本字段、单选按钮和提交按钮:上述表单验证规则如下:

字段验证规则
Name 必须。 +只能包含字母和空格
E-mail 必须。 + 必须是一个有效的电子邮件地址(包含’@’和’.’)
Website必须。如果存在,它必须包含一个有效的URL
Comment必须。 多行输入字段(文本域)
Gender必须。 必须选择一个

文本字段

name, email, 及 website 字段为文本输入元素, comment 字段是textarea。HTML代码如下所示:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">       
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

单选按钮

gender 字段是一个单选按钮,HTML代码如下:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

表单元素

HTML表单代码如下:

<form method="post" action="<?php echo  htmlspecialchars($_SERVER["PHP_SELF"]);?>">
php基础-编程语言教程

该表单使用 method=”post” 方法来提交数据。

什么是$_SERVER[“PHP_SELF”]变量?

$ _ SERVER[“PHP _ SELF”]是一个超级全局变量,返回当前正在执行的脚本的文件名,与文档根目录相关。

什么是 htmlspecialchars()方法?

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。预定义的字符是:

& (和号) 成为 &amp;

” (双引号) 成为 &quot;

‘ (单引号) 成为 &#039;

< (小于) 成为 &lt;

> (大于) 成为 &gt;

PHP表单需要注意什么?

$_SERVER[“PHP_SELF”]变量可能被黑客利用!当黑客利用跨站脚本的HTTP链接进行攻击时,$_SERVER[“PHP_SELF”]服务器变量也会被植入脚本中。原因是跨站脚本附加在执行文件的路径上,所以$ _ SERVER[“PHP _ SELF”]的字符串会包含HTTP链接背后的JavaScript程序代码。

XSS又叫CSS (Cross-Site Script) ,是一种跨站脚本攻击。恶意攻击者将恶意html代码插入到网页中。当用户浏览页面时,网页中嵌入的html代码就会被执行,从而达到恶意用户的特殊目的。

指定以下表单文件名为 “test_form.php”:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

现在,我们用URL来指定提交地址“test_form.php”。上述代码修改如下:

<form method="post" action="test_form.php">

这样做就好了。但是,请考虑用户将在浏览器的地址栏中输入以下地址:

/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

上述URL将被解析为以下代码并执行:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

代码中添加了script 标签,并添加了alert命令。这个Javascript代码将在页面加载时执行(用户将看到一个弹出框)。这只是一个简单的例子,说明PHP_SELF变量可以被黑客利用。请注意,任何JavaScript代码都可以添加到标签中!黑客可以利用这一点将页面重定向到另一个服务器的页面。页面代码文件可以保护恶意代码,代码可以修改全局变量或者获取用户的表单数据。示例:

如何避免$_SERVER[“PHP_SELF”]被利用?

$_SERVER[“PHP_SELF”]可以防止被htmlspecialchars()函数利用。表单代码如下:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Htmlspecialchars()将一些预定义的字符转换成HTML实体。现在,如果用户想要使用PHP_SELF变量,结果将输出如下:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>">

使用 PHP 验证表单数据

首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。当我们使用 htmlspecialchars() 函数时,在用户尝试提交以下文本域:<script>location.href(‘http://www.w3cschool.cn’)</script>- 该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:&lt;script&gt;location.href(‘http://www.w3cschool.cn’)&lt;/script&gt;以上代码是安全的,可以正常在页面显示或者插入邮件中。当用户提交表单时,我们将做以下两件事情,:

1.使用PHP trim()函数删除用户输入数据中不必要的字符(如空格、制表符、换行符)。

2.使用PHP stripslashes()函数从用户输入数据中删除反斜杠(\)。

接下来,我们把这些过滤后的函数写在一个自己定义的函数里,这样可以大大提高代码的复用性。将函数命名为test_input()。现在,我们可以通过test_input()函数检测$_POST中的所有变量。脚本代码如下:

<?php
// 定义变量并默认设置为空值
$name =  $email = $gender = $comment = $website = "";

if  ($_SERVER["REQUEST_METHOD"] == "POST")
{
  $name =  test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
    $website = test_input($_POST["website"]);
  $comment =  test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}
 
function test_input($data)
{
  $data = trim($data);
  $data =  stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
 }
?>
计算机-编程语言教程

总结:当我们执行上面的脚本时,我们将检查表单是否通过$ _ SERVER[“REQUEST _ METHOD”]提交。如果REQUEST_METHOD是POST,那么表单将被提交——数据将被验证。如果表单未提交,将跳过验证,并显示一个空格。上述示例中使用的输入项是可选的,即使用户没有输入任何数据,也可以正常显示。

版权-四川之姿博客
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容