Php 在代码中登录将仅使用md5加密密码登录

Php 在代码中登录将仅使用md5加密密码登录,php,security,md5,Php,Security,Md5,我已经创建了一个登录+注册站点。注册页面工作正常,除了当我必须输入密码时,我必须输入加密版本,md5。。。 我已经在注册页面中完成了,这样他们的密码就会被加密。我怎样才能在登录页面中输入密码,这样他们就不需要写md5密码,而只需要写他们的普通密码 register.php看起来像: <? $reg = @$_POST['reg']; //declaring variables to prevent errors $fn = ""; //First Name $ln = ""; //Las

我已经创建了一个登录+注册站点。注册页面工作正常,除了当我必须输入密码时,我必须输入加密版本,md5。。。 我已经在注册页面中完成了,这样他们的密码就会被加密。我怎样才能在登录页面中输入密码,这样他们就不需要写md5密码,而只需要写他们的普通密码

register.php看起来像:

<?

$reg = @$_POST['reg'];
//declaring variables to prevent errors
$fn = ""; //First Name
$ln = ""; //Last Name
$un = ""; //Username
$em = ""; //Email
$em2 = ""; //Email 2
$pswd = ""; //Password
$pswd2 = ""; // Password 2
$d = ""; // Sign up Date
$u_check = ""; // Check if username exists
//registration form
$fn = strip_tags(@$_POST['fname']);
$ln = strip_tags(@$_POST['lname']);
$un = strip_tags(@$_POST['username']);
$em = strip_tags(@$_POST['email']);
$em2 = strip_tags(@$_POST['email2']);
$pswd = strip_tags(@$_POST['password']);
$pswd2 = strip_tags(@$_POST['password2']);
$d = date("Y-m-d"); // Year - Month - Day

if ($reg) {
if ($em==$em2) {
// Check if user already exists
$u_check = mysql_query("SELECT username FROM users WHERE username='$un'");
// Count the amount of rows where username = $un
$check = mysql_num_rows($u_check);
if ($check == 0) {
//check all of the fields have been filed in
if ($fn&&$ln&&$un&&$em&&$em2&&$pswd&&$pswd2) {
// check that passwords match
if ($pswd==$pswd2) {
// check the maximum length of username/first name/last name does not exceed 25   characters
if (strlen($un)>25||strlen($fn)>25||strlen($ln)>25) {
echo "The maximum limit for username/first name/last name is 25 characters!";
}
else
{
// check the maximum length of password does not exceed 25 characters and is not less   than 5 characters
if (strlen($pswd)>30||strlen($pswd)<5) {
echo "Your password must be between 5 and 30 characters long!";
}
else
{
//encrypt password and password 2 using md5 before sending to database
$pswd = md5($pswd);
$pswd2 = md5($pswd2);
$query = mysql_query("INSERT INTO users VALUES       ('','$un','$fn','$ln','$em','$pswd','$d','0')");
die("<h2>Welcome to InstaWord!</h2>Login to your account to get started ...");
}
}
}
else {
echo "Your passwords don't match!";
}
}
else
{
echo "Please fill in all of the fields";
}
}
else
{
echo "Username already taken ...";
}
}
else {
echo "Your E-mails don't match!";
}
}
?>
<table class="homepageTable">
   <tr>
       <td width="60%" valign="top">
        <h2>Share your texts!</h2>
        <img src="img/animation.gif" width="930">
       </td>
       <td width="40%" valign="top">
        <h2>Sign up</h2>
       <form action="#" method="post">
       <input type="text" size="25" name="fname" placeholder="First Name" value="<? echo   $fn; ?>">
       <input type="text" size="25" name="lname" placeholder="Last Name" value="<? echo $ln; ?>">
       <input type="text" size="25" name="username" placeholder="Username" value="<?   echo $un; ?>">
       <input type="text" size="25" name="email" placeholder="Email" value="<? echo $em; ?>">
       <input type="text" size="25" name="email2" placeholder="Repeat Email" value="<? echo $em2; ?>">
       <input type="password" size="25" name="password" placeholder="Password">
       <input type="password" size="25" name="password2" placeholder="Repeat Password">  <br />
       <input type="submit" name="reg" value="Sign Up!">
       </form>
       </td>
      </tr>
     </table>
   </body>
 </html>

在检查正确的登录详细信息的同时,将详细信息传递到sql查询时,使用md5()加密输入密码

$password_encrypt = md5($password);
$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password_encrypt '");

在检查正确的登录详细信息的同时,将详细信息传递到sql查询时,使用md5()加密输入密码

$password_encrypt = md5($password);
$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password_encrypt '");

登录时您没有使用md5进行检查

使用$password=md5($_请求['password']);在您的
登录函数()中

这将使用普通密码,并使用数据库中的加密版本进行检查,然后用户将成功登录


希望这能有所帮助。

您登录时没有使用md5进行检查

使用$password=md5($_请求['password']);在您的
登录函数()中

这将使用普通密码,并使用数据库中的加密版本进行检查,然后用户将成功登录


希望这有帮助。

您不应该对
$\u POST['password']
应用
strip\u tags()
,只需将传入值输入密码哈希函数即可

要保护用户的密码,您需要做得比
md5
散列密码更好。 你需要

  • 一种更好的散列算法:BCrypt散列
  • 添加一个随机的盐值
  • 好消息是,您可以使用drop-in库并使用:


    您不应该将
    strip_tags()
    应用于
    $\u POST['password']
    ,只需将传入值提供给密码哈希函数即可

    要保护用户的密码,您需要做得比
    md5
    散列密码更好。 你需要

  • 一种更好的散列算法:BCrypt散列
  • 添加一个随机的盐值
  • 好消息是,您可以使用drop-in库并使用:



    当用户登录到我不存在的网站时,数据库有md5密码,登录页面使用md5($password)检查md5;如果md5($password)=$passindatabase{//logincode.*请使用正确的变量名。*请缩进您的代码。*请不要使用mysql_*函数。*您的脚本很容易受到SQL注入攻击。请不要限制用户的最大密码长度!没有理由将长度限制为30个字符。如果您想限制它,请将最大长度设置为1000个字符r那么。但是谁想要一个超过30个字符的密码呢?也可以这样理解:当用户登录到我不存在的网站时,数据库有md5密码,登录页面使用md5($password)检查md5;如果md5($password)=$passindatabase{//logincode.*请使用正确的变量名。*请缩进您的代码。*请不要使用mysql_*函数。*您的脚本很容易受到SQL注入攻击。请不要限制用户的最大密码长度!没有理由将长度限制为30个字符。如果您想限制它,请将最大长度设置为1000个字符r那么。但是谁想要一个超过30个字符的密码呢?也许也可以这样读:而且欢迎…:)应该是…:d这是不安全的!a:MD5被认为是既快又加密的,不应该再用于任何与安全相关的东西。b:你应该在哈希中添加一个salt值!@Jacco问题的本质是wh面临的问题ile登录。这不是密码哈希的最佳实践……因为这个问题与安全相关,所以我认为,您应该始终指出最佳实践。这个问题清楚地表明,这将按原样实施。因此,这个问题可能是我们程序员社区帮助OP在还有一个不安全的登录脚本上线了。欢迎…:)它应该是…:d这是不安全的!a:MD5被认为是既快又加密的,不应该再用于任何与安全相关的东西。b:你应该在哈希中添加一个salt值!@Jacco问题的本质是登录时遇到的问题。这不是最佳做法对于密码散列…因为这个问题与安全相关,在我看来,你应该始终指出最佳实践。这个问题清楚地表明,这将按原样实施。因此,这个问题可能是我们程序员社区帮助OP建立一个更安全的网站的最后机会,而不是另一个不安全的登录脚本t上线。这是一个不安全的示例;散列检查应该在PHP代码中完成。在您的示例中,密码散列可以显示在MySQL查询日志中。此外,MD5对于密码存储来说不够好,应该在散列函数中添加一个salt值。@Jacco感谢您提供的提示。我将从现在开始处理这个问题。这是一个不安全的示例示例;散列检查应该在PHP代码中完成。在您的示例中,密码散列可以显示在MySQL查询日志中。此外,MD5对于密码存储来说不够好,应该在散列函数中添加一个salt值。@Jacco感谢您提供的提示。我将从现在开始处理这个问题。
    require('PasswordHash.php');
    
    $pwdHasher = new PasswordHash(8, FALSE);
    
    // $hash is what you would store in your database
    $hash = $pwdHasher->HashPassword( $_POST['password'] );
    
    // $hash would be the $hashed stored in your database for this user
    $checked = $pwdHasher->CheckPassword($_POST['password'], $hash);
    if ($checked) {
        echo 'password correct';
    } else {
        echo 'wrong credentials';
    }