簡體   English   中英

MySQL哈希列密碼+腳本bash

[英]MySQL hashed column password+script bash

我有點問題。

我創建了一個MySQL表,其中的密碼列已使用SHA1加密。

mysql> CREATE TABLE IF NOT EXISTS user_encrypted (
    username varchar(50) COLLATE utf8_unicode_ci NOT NULL PRIMARY KEY DEFAULT 'username',
    hashed_password varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'password',
    user_mail varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL DEFAULT 'your@email.com',
    user_phone varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL DEFAULT '+33 1 23 45 67 89',
    user_online tinyint(1) NOT NULL DEFAULT '0',
    user_enable tinyint(1) NOT NULL DEFAULT '1',
    user_max_connection tinyint(1) NOT NULL DEFAULT '2',
    user_start_date date NOT NULL DEFAULT '2015-05-01',
    user_end_date date NOT NULL DEFAULT '0000-00-00',
    KEY  hashed_password (hashed_password)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

結果

Query OK, 0 rows affected (0.01 sec)

我要編寫一個腳本,該腳本調用MySQL表:

#!/bin/bash
. /etc/openvpn/script/config.sh

#New Encrypted_password
#username=$(mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -sN -e "select username from user_encrypted where username = '$username' AND hashed_password = '$password' AND user_enable=1 AND user_max_connection=2 AND user_start_date != user_end_date AND TO_DAYS(now()) >= TO_DAYS(user_start_date) AND (TO_DAYS(now()) <= TO_DAYS(user_end_date) OR user_end_date='0000-00-00')")

##Check user
[ "$username" != '' ] && [ "$username" = "$username" ] && echo "user : $username" && echo 'authentication ok.' && exit 0 || echo 'authentication failed.'; exit 1

問題是,當我使用腳本並且OpenVPn要求我提供用戶名/密碼時,我使用Test和Test1234,但是系統拒絕密碼。 似乎“非加密”密碼無法轉換為加密密碼,無法檢查該表的密碼是否與我在客戶端OpenVPN中輸入的密碼相同。

我不知道該怎么辦,在我輸入的密碼的腳本bash中,“轉換”為加密的密碼,以便與數據庫進行檢查...

謝謝你

您的bash腳本不會對密碼進行哈希處理。 因此,您正在將密碼與密碼的哈希值進行比較。

您說這是SHA1哈希, 在MySQL中很方便地作為內置函數存在。 更改

where username = '$username' AND hashed_password = '$password' ...

where username = '$username' AND hashed_password = SHA1('$password') ...

應該解決您的直接問題。

我想在您的代碼中提出另外兩個問題-不幸的是,這是很常見的錯誤:

  1. 看來您沒有使用鹽作為密碼哈希。 您應該-它將使攻擊者更難從哈希中找出您的密碼。 請閱讀
  2. 您的登錄腳本容易受到SQL注入的攻擊。 如果攻擊者輸入admin'; SELECT * FROM user_encrypted WHERE 0 AND '這樣的字符串怎么辦? admin'; SELECT * FROM user_encrypted WHERE 0 AND ' (或類似的意思)作為用戶名? 請閱讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM