2017-05-04 20 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

我不知道細節。如果我是從頭開始做的,我不會首先發送密碼,只有星號或一些這樣的掩碼字符。然後單擊將傳輸該特定證書的密碼,並只傳輸該密碼。我假設這是某種內部證書管理系統。即使這樣,密碼也不應該與其他信息一起存儲和顯示。但是,這不是討論的地方。 –