当前位置:首页 > CN2资讯 > 正文内容

php验证php表单验证

2天前CN2资讯
在使用PHP编程的时候,我有一个习惯,不太喜欢使用现成的库文件,例如PHPLib或者其它类似的库,在这个系统中,我也打算自己写一个库文件,它需要处理认证、确认email,更新帐号(密码,email)等事情。
为了在保证该系统安全的同时,不会加重我现有数据库的负担。因此这个新的系统要依赖cookies。这确实是一个两难的选择,因为如果只是设置一个用户名的cookie,是很不安全的,这行不通,但从数据库的负担考虑,我也不能加入一个简单的无序码而***由我的数据库来进行验证。   解决的方法是同时设置两个cookie,一个是用户名的cookie,一个是无序码的cookie。这个无序码实际上是由用户名和一个超级密码(只有程序设计者知道)组合通过md5()函数运算产生的。由于md5()是一个单向的无序码,因此是不可以破解的。在用户更改email时,我也可以用该email和超级密码产生一个无序码,以让用户确认修改。这实际上是一个公匙/私匙类的系统。不明白?不要紧,下面再慢慢说明。   有趣的是,这个系统的扩展能力是可以达到无穷的,因为该系统的主要工作是计算md5()函数的值,而且由web服务器完成,在负载增加时,可以加入其它的服务器来分担负载,虽然认证系统不会拖跨一个数据库,但是这样做就让最终的瓶颈只能出现在数据库上。   以下是该库中的两个函数--记号产生和记号认证函数。   <?php    $hidden_hash_var='your_secret_password_here';    $LOGGED_IN=false;
   unset($LOGGED_IN);    function user_isloggedin() {
    global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;
    file://已经进行无序码的检测了吗     file://如果是的话,返回该变量     if ( isset($LOGGED_IN) ) {      return $LOGGED_IN;      }     file://are both cookies present?     if ($user_name && $id_hash) {     /*      由cookies中得来的用户名和系统超级密码产生一个认证用的无序码如果该无序码与cookie中的无序码一样,则cookies中的变量是可信的,用户已经登录     */      $hash=md5($user_name.$hidden_hash_var);      if ($hash == $id_hash) {       file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候,       file://就无需再次进行md5()运算       $LOGGED_IN=true;       return true;      } else {       file://两个无序码不符合,没有登录       $LOGGED_IN=false;       return false;      }      } else {        $LOGGED_IN=false;        return false;       }      }    function user_set_tokens($user_name_in) {     /*      一旦用户名和密码通过验证,就调用这个函数     */     global $hidden_hash_var,$user_name,$id_hash;      if (!$user_name_in) {       $feedback .= ' ERROR - User Name Missing When Setting Tokens ';       return false;       }     $user_name=strtolower($user_name_in);      file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用      $id_hash= md5($user_name.$hidden_hash_var);      file://设置cookies的有效期为一个月,可设置为任何的值      setcookie('user_name',$user_name,(time()+2592000),'/','',0);      setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);     }   ?> 再来看另一段有趣的代码,用户怎样才能安全地改变他们的email地址呢?他们可以在任何时候改变email地址,但是要进行确认。   <?php     function user_change_email ($password1,$new_email,$user_name) {      global $feedback,$hidden_hash_var;      if (validate_email($new_email)) {        $hash=md5($new_email.$hidden_hash_var);        file://改变数据库中确认用的无序码值,但不改变email        file://发出一个带有新认证码的确认email        $user_name=strtolower($user_name);        $password1=strtolower($password1);        $sql="UPDATE user SET confirm_hash='$hash' WHERE user_name='$user_name' AND password='". md5($password1) ."'";        $result=db_query($sql);        if (!$result || db_affected_rows($result) 〈 1) {         $feedback .= ' ERROR - Incorrect User Name Or Password ';         return false;         } else {          $feedback .= ' Confirmation Sent ';          user_send_confirm_email($new_email,$hash);          return true;          }        } else {          $feedback .= ' New Email Address Appears Invalid ';          return false;         }        }     function user_confirm($hash,$email) {       /*        用户点击认证email的相关连接时,连到一个确认的页面,该页面会调用这个函数,       */      global $feedback,$hidden_hash_var;       file://verify that they didn't tamper with the email address       $new_hash=md5($email.$hidden_hash_var);       if ($new_hash && ($new_hash==$hash)) {         file://在数据库中找出这个记录         $sql="SELECT * FROM user WHERE confirm_hash='$hash'";         $result=db_query($sql);         if (!$result || db_numrows($result) 〈 1) {           $feedback .= ' ERROR - Hash Not Found ';           return false;         } else {           file://确认email,并且设置帐号为已经激活           $feedback .= ' User Account Updated - You Are Now Logged In ';           user_set_tokens(db_result($result,0,'user_name'));           $sql="UPDATE user SET email='$email',is_confirmed='1' WHERE confirm_hash='$hash'";           $result=db_query($sql);           return true;          }         } else {          $feedback .= ' HASH INVALID - UPDATE FAILED ';          return false;         }        }     function user_send_confirm_email($email,$hash) {       /*        这个函数在首次注册或者改变email地址时使用       */        $message = "Thank You For Registering at Company.com".        "\nSimply follow this link to confirm your registration: ".
       "\n\nhttp://www.company.com/account/confirm.php?hash=$hash&email=". urlencode($email). "\n\nOnce you confirm, you can use the services on PHPBuilder.";
mail ($email,'Registration Confirmation',$message,'From: [email][email protected][/email]');       }     ?>   评论:或许我们在用户认证方面不是采用这种方法,而是采用session等方式,不过这篇文章在如何进行加密和确认方面,还是对我们有所启发的。
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/26321.html

    标签: php验证
    分享给朋友:

    “php验证php表单验证” 的相关文章

    最佳Mac SSH连接工具推荐:轻松管理远程服务器

    随着远程工作和云计算的普及,SSH协议成为了连接服务器和管理远程设备的重要工具。在Mac上,有许多SSH连接工具可供选择,让我们来逐一了解它们的特点和应用场景。 SSH协议简介 SSH,即安全外壳协议,是一种用于安全登录远程主机的网络协议。它提供了一条加密的连接通道,确保数据在传输过程中的安全性。通...

    HudsonValleyHost主机服务测评:性价比与稳定性的完美结合

    HudsonValleyHost是一家成立于2014年的国外老牌主机商,已经在行业内稳扎稳打,逐渐树立了自己的品牌形象。这家公司最初的目标是为用户提供高性价比的主机服务,其中以其纽约的KVM VPS服务备受青睐。在我接触的众多主机服务商中,HudsonValleyHost的存在让我感受到了一种稳定与...

    如何使用DigitalOcean优惠码获取200美元免费额度

    DigitalOcean是一家备受赞誉的云计算服务提供商,专门致力于为开发者和初创公司提供一流的云基础设施解决方案。通过其简单易用的界面和高效的性能,DigitalOcean帮助用户轻松地部署和扩展应用程序。我在使用DigitalOcean时,深刻感受到了它为开发者量身定制的便捷性,毫无疑问,这使得...

    AMD Ryzen VPS 性能测评:RackNerd 的优越体验与机房对比

    当我开始使用RackNerd的VPS服务时,我被它的低价和强大性能所吸引。作为一个刚入驻云计算的用户,我知道许多商家提供VPS,但RackNerd以十美元每年的超低价格引起了我的注意。而真正让我印象深刻的是它的稳定性与出色的售后服务。我曾多次遇到技术问题,售后支持总能在第一时间给我回应,这让我感受到...

    如何使用 Linode Backups 保障数据安全与恢复

    在现代数字世界中,数据的安全性与可恢复性至关重要。Linode Backups 正是为此而生的一项服务。Linode Backups 是 Linode 提供的一项付费服务,旨在自动化用户数据的备份过程,能够让用户更加轻松地管理和恢复数据。对我来说,这项服务让人感到安心,尤其是在处理重要项目时,存在这...

    最新hudsonvalleyhost优惠码使用技巧与推荐2023

    hudsonvalleyhost 优惠码介绍 hudsonvalleyhost优惠码是一种可以帮助用户在使用hudsonvalleyhost服务时节省费用的代码。这种优惠码一般由字母和数字组成,用户在进行购买或订阅相关服务时输入该代码,就可以享受到折扣或特定的优惠。每个优惠码的有效期和适用范围可能不...