加密的密码输入框扩展(原ACL中的功能)

#1 jake

目前加密的密码输入框已经被移出spAcl类,独立成为一个扩展。
同时修正了密码输入为空时的问题。

请注意:
1. 该密码输入框产生的密码,是经过MD5处理后的字符串,所以,如果从其他途径(未经MD5)提交的密码,需要将此密码进行MD5编码后再和md5password产生的密码进行比对。
2. 使用该扩展,需要理解MD5加密的含义,无法明白此扩展的应用范围,请不要使用该扩展。

使用方法:

1. 将md5password.php放置到SpeedPHP目录中的Extensions中(或是APP_PATH./include中)。
2. 在需要使用该扩展的控制器最前面,或是入口文件的reqire(SP_PATH.'/SpeedPHP.php');和spRun()的中间,放置以下语句:
import('md5password.php');
以加载md5password的类库文件。
3. 在模板中,可以使用:
<{pwinput id=mypw add="class=pwform name=mypwname"}>
来生成该输入框。同时,需要在该输入框所在的表单
标签中加入 来对加密进行激活。完整的一个表单示例如下:
<{pwinput id=mypw add="class=pwform name=mypwname"}>

4. 在提交后的页面中,使用
$value = spClass('md5password')->pwvalue();

来获得提交后的密码的MD5值(注意,并非密码本身)。


扩展下载:md5password.rar

2010-04-30 11:30:55

#2 只是因为

下过来学习学习 做个用户名登陆的哈哈

2010-04-30 11:42:43

#3 jiayan41

我已经全部搞定啦,终于可以畅快体验 speedphp 3 啦

2010-04-30 12:08:17

#4 vsxp

好,做为一个扩展加载进去。

2010-05-04 15:41:35

#5 jeffrey_shou

好东西。

2010-05-04 16:14:35

#6 hbf85435055

学习一下!

2010-05-12 09:40:54

#7 yuanjianhua

终于搞定了,原来有个 aclcode(); 这个方法,唉,晕死

2010-06-06 21:04:10

#8 yuanjianhua

回复 1 jake


    有个问题,就是如果提交了第一次,在没刷新了的情况下,第二次获取的就为空,那怎么解决啊!

2010-06-06 23:19:20

#9 jake

回复  jake


    有个问题,就是如果提交了第一次,在没刷新了的情况下,第二次获取的就为空,那怎么解决 ...
yuanjianhua 发表于 2010-6-6 23:19
你说的这样两次刷新都能提交的情况,就是远程提交攻击的手段。但是这个密码加密框的功能是“避免”这种攻击,所以如果希望“不避免”这种攻击,可以不使用加密输入框即可。

2010-07-28 22:31:05

#10 prince

回复 1 jake


4的代码获取的值是-1,并不是密码框的值,如何获取密码框的值呢?

2010-07-31 14:55:20

#11 jake

回复  jake


4的代码获取的值是-1,并不是密码框的值,如何获取密码框的值呢? ...
prince 发表于 2010-7-31 14:55
-1代表了远程提交、或者是其他不安全的提交方式(比如多窗口提交),如果你的代码正确,而用户又是正常提交的话,就可以获得密码值。
-1是一种状态,用于判断是否用户提交有问题,和findAll等函数返回false代表无法找到相应记录是同理的,当然这也是要建立在代码没写错的前提下。

2010-07-31 16:00:48

#12 prince

回复 11 jake

html文件表单的代码:

                        
                          
                           
                           
                          
                          
                           
                           
                          
                          
                           
                           
                          
                          
                           
                           
                           
                          
                        
                           

                            <{pwinput id=c_pw add="class=pwform name=c_pw"}>
                              
  点击刷新

                              
 

                        

                    
控制器login的代码:
header("content-type:text/html; charset=utf8");
class login extends spController{
        function c_login(){
                $acc_Acc = $this -> spArgs("accouts");
                $acc_Pw = spClass('md5password') -> pwvalue();
                $acc_Acc = $this -> c_chkAcc($acc_Acc);
                //$acc_Pw = $this -> c_chkPw($acc_Pw);
                if ($acc_Acc == 1){
                        $accouts = $this ->spArgs("accouts");
                        echo '$acc_Acc:'.$accouts.'  $acc_Pw:'.$acc_Pw;
                }
                       
               
               
        }

        public function c_chkAcc($Kword_usr){//验证所提交帐户名是否只包含数字、字母和下划线
                return (preg_match('/^[a-zA-Z0-9_]{1,}$/',$Kword_usr)) ? true : false;
                }
        public function c_chkPw($Kword_usr){//验证所提交帐户名是否只包含数字和字母
                return (preg_match('/^[a-zA-Z0-9]{1,}$/',$Kword_usr)) ? true : false;
                }       
        function err_back(){
                $this -> err_msg = spArgs($err_msg);
                $this -> spUrl();
                $this -> display("c_err.html");
                }
               
               
}

2010-07-31 17:09:09

#13 prince

控制器第7行注释掉echo出来的密码框的值是空的?如果不注释掉echo出来是-1,我也没有开多窗口也不是刷新后再提交的,何解?

2010-07-31 17:22:18

#14 jake

控制器第7行注释掉echo出来的密码框的值是空的?如果不注释掉echo出来是-1,我也没有开多窗口也不是刷新后再 ...
prince 发表于 2010-7-31 17:22
不清楚,请仔细检查一下你的代码。

你可以试试在pwvalue之前检查一下$_SESSION["SpAclInputHash"]的值,
同时看看 spClass("spArgs")->get($_SESSION["SpAclInputHash"])的值是多少。这个值就是真正提交上来的密码(MD5后)。


而pwvalue会通过spClass("spArgs")->get($_SESSION["SpAclInputHash"])来获取到密码,同时,在获取后会unset这个session,如果再调用pwvalue只能取得-1,因为pwvalue只能获取一次,防止刷新提交。

2010-07-31 17:36:39

#15 prince

回复 14 jake


login控制器的动作c_login改为:
function c_login(){
                $acc_Acc = $this -> spArgs("accouts");
                //$acc_Pw = spClass('md5password') -> pwvalue();
                $acc_Acc = $this -> c_chkAcc($acc_Acc);
                //$acc_Pw = $this -> c_chkPw($acc_Pw);
                if ($acc_Acc==true){
                        //$accouts = $this ->spArgs("accouts");
                        $all = $this -> spArgs();
                        dump($all);
                }else{
                        $this -> err_msg = '非法信息';
                        $this -> backUrl = spUrl();
                        $this -> display("err.html");
                        }
                       
               
               
        }

dump($all)的值为:
Array
(
    [c] => login
    [a] => c_login
    [accouts] => admin
    [mypwname] => 0000000000000000
    [f149f7747749] => 21232f297a57a5a743894a0e4a801fc3
    [verifycode] => guphb
    [Submit] => 鐧?闄?    [PHPSESSID] => ghstjhob0it8bvd4mf02dss3s3
)

2010-07-31 17:52:16

#16 hitzxl

多谢楼主提供这么好的扩展。
只是碰到一个问题,
一个页面上放着两个密码框的时候(一个用于确认),
只有第二个密码框在提交的瞬间变成加密后字符。
这种情况怎么办?

2010-10-31 21:15:04

#17 jake

多谢楼主提供这么好的扩展。
只是碰到一个问题,
一个页面上放着两个密码框的时候(一个用于确认),
只有 ...
hitzxl 发表于 2010-10-31 21:15
遗憾,目前该扩展不能支持两个密码输入框。

2010-11-01 09:15:05

#18 hitzxl

遗憾,目前该扩展不能支持两个密码输入框。
jake 发表于 2010-11-1 09:15
这样子呀。
谢谢你的回答。

2010-11-03 11:01:07

#19 gnuser

建议把MD5加密文件也一起放到“SpeedPHP 3.1.66”下载文件中吧。这样大家就不用另外下载这个扩展了。

2011-05-22 23:06:51

#20 vsxp

订单编号:77720779941852

2011-05-23 02:26:34

#21 vsxp

建议把MD5加密文件也一起放到“SpeedPHP 3.1.66”下载文件中吧。这样大家就不用另外下载这个扩展了。 ...
gnuser 发表于 2011-5-22 23:06
可以直播用md5函数,所以把它当一种扩展了。

2011-05-23 02:28:15

#22 gnuser

<{pwinput id=mypw add="class=pwform name=mypwname"}>中size大小如何更改?

其中size控制框长度,目前下载程序中的两个框长度不一,用户名的可以直接控制,但密码这个如何控制呢?请大家指导一下。谢谢

2011-05-23 12:21:27

#23 jake

回复 22 gnuser

用CSS

2011-05-23 12:45:32

#24 gnuser

谢谢jake。

2011-05-23 23:52:33

#25 ╰☆君仔^★

谢谢楼主。。。。

2012-12-24 10:19:07

#26 江望雨

我用的是js md5在提交的时候改变文本框的值,一样的哦!

2013-01-05 21:16:00

#27 daixingchen0

我在模板中加了<{pwinput id=mypw add="class=pwform name=mypwname"}>
控制器$value = spClass('md5password')->pwvalue(); 但是模板提示我报错  未知这个属性pwinput

2013-07-23 11:52:25

#28 宁静致远

hello  jake  为什么 要用上这个类库呢  直接用 md5()有什么 缺陷吗 ?

2013-11-01 22:06:01

#29 jake

宁静致远 发表于 2013-11-1 22:06
hello  jake  为什么 要用上这个类库呢  直接用 md5()有什么 缺陷吗 ?
MD5是PHP的函数,而上面说的扩展,是JS的MD5作为页面端加密。和PHP的MD5不是同一个东西。

2013-11-01 23:34:33

#30 宁静致远

jake 发表于 2013-11-1 23:34
MD5是PHP的函数,而上面说的扩展,是JS的MD5作为页面端加密。和PHP的MD5不是同一个东西。
...

  • $value = spClass('md5password')->pwvalue();
  • //compare  to
  • $value=md5(spClass('md5password'));
thanks, jake  我是有点疑惑 例如上面两行代码效果一样 都是MD5加密 一个用了扩展,有什么优势呢

2013-11-02 12:07:24