在使用之前验证接收的值

时间:2013-12-23 22:05:43

标签: php post get verification

验证接收到的参数是否有意义,该参数仅用作比较器?

假设我收到了用户的电子邮件地址,我想检查它是否存在于数据库中。

我首先可以检查它是否真的是一个电子邮件地址,然后尝试在数据库中找到它。 E.g:

$email = trim($_POST["email"]);

if (isEmail($email)) {
   if (isRegisteredEmail($email)) { // Will execute a SQL query
      echo "Email address registered";
   }
   else {
      echo "Email address is not registered";
   }
}
else {
   echo "This is not an email address";
}

或者我可以简单地做这样的事情:

if (isRegisteredEmail(trim($_POST["email"])) { // Will execute a SQL query
   echo "Email address registered";
}
else {
   echo "Email address is not registered";
}

我认为这可能更像是一个用户体验问题,但是......

4 个答案:

答案 0 :(得分:0)

实际上,这取决于您的客户“谁支付您的工作”的要求。

但通常是的,你应该验证所有内容。如果您不关心用户发送给您的内容,可能会发生许多奇怪的事情。我的意思是在你的情况下,例如可以在数据库中插入多个电子邮件地址,如果这是一个新闻通讯应用程序,给定的用户可以收到多个邮件。这可能是令人烦恼和不专业的。他们可以认为这是垃圾邮件。一般来说,做任何看起来像垃圾邮件的事情都不好。他们可以将您的服务器置于黑名单中,同时拒绝有效的邮件通信。

否则输入验证是系统中的第一道防线。如果您正确验证所有内容,则可以拒绝许多不同的攻击。 (不同类型的注入技术,跨站点脚本等)

答案 1 :(得分:0)

您如何检查是否已注册?

如果您正在使用SQL查询进行检查,并且$ email来自不受信任的来源,那么在将其用于任何SQL查询之前,应对其进行过滤以防止SQL注入攻击。

因此,在这种情况下,您必须在调用SQL以查看它是否已注册之前将其验证为有效或合理有效的电子邮件地址。

如果您正在查看是否通过短名单注册,例如从初始化文件中注册,那么您不需要检查它。

答案 2 :(得分:0)

您无法实际检查电子邮件是否有效(因为它属于该人或存在),但您可以检查它是否符合电子邮件标准。我会使用filter_var函数执行此操作,如下所示;

 if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
      // Email conforms
 } else {
      // Email does not conform
 }

要打击验证电子邮件的所有权,您可以要求用户首先通过向他们注册帐户的电子邮件地址发送唯一代码来验证它。为了让他们激活帐户,他们需要这个唯一的代码,当然会将其发送到他们的电子邮件中。

另一种方法是向电子邮件发送一个随机密码,以便他们第一次登录该帐户,然后强制他们在首次登录时进行更改。

下面的内容是如何运作

$email = $_POST['email'];

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
      // Mysql query here for email matches
      // Check row count
      if ($rowCount) {
          echo 'Email is taken';
      } else {
          // Sign up the email sending them a random code
          echo 'We have sent a unique code to your email address which you need to enter at the address...';
      }
 } else {
      // Email does not conform
      echo 'The email you supplied is invalid';
 }

当然,您需要将发送电子邮件地址的代码存储在数据库中。我通常将其存储为以减值记录的次数,并使用它来比较它,从而节省数据库列。

希望这会有所帮助。

答案 3 :(得分:0)

如果您想查看有效的电子邮件格式,可以轻松使用HTML 5电子邮件字段。

< input type =“email”name =“email”>

http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_input_type_email

它将检查name@something.com

之类的格式

或者您必须使用正则表达式。 这可能有所帮助 How to validate an Email in PHP?