2017-05-04 64 views
-3

我有一个7列的表。其中一个包含密码(pw)。修改密码输入字段的HTML按钮

我不想在我的网站上显示密码:我想在表格中有一些“点击展开”来显示它。

下面是包含该表的脚本的一部分:

... 

push @certlist, { 
    state  => $cert[0], 
    'expire' => $date, 
    'subject' => $cert[5], 
    'cn'  => $cn, 
    'ip'  => $ccd_ips->{$cn}, 
    'dl'  => '', 
    're'  => '', 
    'pw'  => $password->{$cn} 
}; 

...

return $q->table(
    { 'class' => 'certs' }, 
    $q->Tr(
     [ 
      $q->th(
       [ 'Status', 'Common Name', 'D',   'Password', 
        'Date', 'Subject',  'IP-Adress', 'R' 
       ] 
      ) . "\n", 
      map { 
        $q->td({ 'class' => $_->{'state'} }, $states{ $_->{'state'} }) . 
        $q->td([ @$_{qw(cn dl pw expire subject ip re)} ]) . "\n" 
      } @certlist 
     ] 
    ) 
) . "\n"; 

... 
+1

您需要以某种方式包含密码。你希望他们被掩盖的原因是什么?先考虑一下。你是否在乎它们是否在网站的源代码中以明文形式存在,这样你就不会一眼就看到它们,用户需要努力获得一个?或者这是一个安全问题? – simbabque

+0

它有安全原因 – tso

+1

呵呵。这很棘手。你通过SSL/https提供该页面吗?你担心有人会听吗?请各位具体__。我试图缩小你想要做的事。现在你的问题太广泛了。这更多的是关于过程而不是编程。这段代码看起来也很可怕。我可以解释它的作用,但这不会有帮助。所以你的代码不是问题,因为它似乎你真的不知道该怎么做。 (也许还没有做到这一点,但这就是重点,这一点无关紧要)。 – simbabque

回答

3

只应添加一类,说password-container到包含密码的元素。将初始内容设置为蒙版。

即:

push @certlist, { 
    state  => $cert[0], 
    'expire' => $date, 
    'subject' => $cert[5], 
    'cn'  => $cn, 
    'ip'  => $ccd_ips->{$cn}, 
    'dl'  => '', 
    're'  => '', 
    'pw'  => '*' x 8, 
}; 

添加JavaScript代码的页面添加一个onclick处理程序与password-container类处理的触发的所有元素。

return $q->table(
    { 'class' => 'certs' }, 
    $q->Tr(
     [ 
      $q->th(
       [ 'Status', 'Common Name', 'D',   'Password', 
        'Date', 'Subject',  'IP-Adress', 'R' 
       ] 
      ) . "\n", 
      map { 
        $q->td({ 'class' => $_->{'state'} }, $states{ $_->{'state'} }) . 
        $q->td([ @$_{qw(cn dl)} ]) . 
        $q->td({ 'class' => 'password_container' }, $_->{pw}) . 
        $q->td([ @$_{qw(expire subject ip re)} ]) . "\n" 
      } @certlist 
     ] 
    ) 
) . "\n"; 

或一些类似的垃圾。

这再一次显示了不使用CGI.pm生成HTML的价值。而是使用模板。这只是对未来的建议,我假设你无法修复现有的代码库。

BTW,这里是从CGI.pm documentation相关位:内CGI.pm

所有的HTML生成函数不再被保留。任何问题,错误或补丁都将被拒绝,除非它们与基本上损坏的页面渲染有关。

这样做的基本原理是CGI.pm的HTML生成函数最多只会造成混淆,最糟糕的情况是维护噩梦。您应该使用模板引擎来更好地分离问题。有关使用CGI.pmTemplate::Toolkit模块的示例,请参阅CGI::Alternatives

这些函数和它们的perldoc被认为已被弃用,它们不再被维护,也不会接受它们的修复或功能。但是,它们将继续存在于CGI.pm中,并且不存在任何弃用警告(“软”弃用),因此如果您真的想要,可以继续使用它们。所有这些功能的文档已被移至CGI::HTML::Functions

+1

大概你会发现JavaScript会将输入类型从'password'改为'text'? – Borodin

+5

我不知道细节。如果我是从头开始做的,我不会首先发送密码,只有星号或一些这样的掩码字符。然后单击将传输该特定证书的密码,并只传输该密码。我假设这是某种内部证书管理系统。即使这样,密码也不应该与其他信息一起存储和显示。但是,这不是讨论的地方。 –