Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL哈希列密码+脚本bash_Mysql_Bash_Sha1_Openvpn - Fatal编程技术网

MySQL哈希列密码+脚本bash

MySQL哈希列密码+脚本bash,mysql,bash,sha1,openvpn,Mysql,Bash,Sha1,Openvpn,我有个小问题 我创建了一个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 '

我有个小问题

我创建了一个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中输入的密码相同

我不知道该怎么做,在我的脚本中,我输入的密码被转换为加密密码,用于检查数据库


Rhank you

bash脚本不会散列密码。因此,您将密码与密码的散列进行比较

你说这是一个SHA1散列,它方便地作为。改变

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

应该能解决你眼前的问题

我想提出您的代码的另外两个问题-不幸的是,这些是非常常见的错误:

您似乎没有使用salt作为密码哈希。您应该这样做-这将使攻击者更难从散列中找出您的密码。请阅读。 您的登录脚本易受SQL注入攻击。如果攻击者放入像admin'这样的字符串怎么办;选择*FROM user_encrypted WHERE 0 AND'或类似的内容作为用户名?请阅读。
bash脚本不会散列密码。因此,您将密码与密码的散列进行比较

你说这是一个SHA1散列,它方便地作为。改变

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

应该能解决你眼前的问题

我想提出您的代码的另外两个问题-不幸的是,这些是非常常见的错误:

您似乎没有使用salt作为密码哈希。您应该这样做-这将使攻击者更难从散列中找出您的密码。请阅读。 您的登录脚本易受SQL注入攻击。如果攻击者放入像admin'这样的字符串怎么办;选择*FROM user_encrypted WHERE 0 AND'或类似的内容作为用户名?请阅读。
请注意:它是散列的,不是加密的。后者可以解密,前者不能。另一个注意:你应该在散列之前。只是一个注意:它是散列的,不是加密的。后者可以被解密,前者不能。另一个提示:你应该在散列之前解密。嗨,斯奈德·多尔科,谢谢你的回答。我很快就发布了我的问题,因为经过几分钟的思考,我自己解决了它。这个案例可以关闭,也可以在sysadmin Jr不知道如何操作时使用;再次感谢。嗨,斯奈德·多尔科,谢谢你的回答。我很快就发布了我的问题,因为经过几分钟的思考,我自己解决了它。这个案例可以关闭,也可以在sysadmin Jr不知道如何操作时使用;又来了。