8

这是要实施安全登录的登录系统/

main_login.php

    <form name="form1" method="post" action="checklogin.php">
    Username:<input name="myusername" type="text" id="myusername" /> <br />
    Password:<input name="mypassword" type="password" id="mypassword" />
    <input type="submit" name="Submit" value="Login" />
    </form>

检查登录.php

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="cosmos"; // Database name 
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

login_success.php

<?php
session_start();

if(isset($_SESSION['username']) && ($_SESSION['username'] == $myusername)){
header("location:main_login.php");
}
?>

<html>
<body>
Login Successful. <a href="logout.php">Logout</a>
</body>
</html>

注销.php

<?php
session_destroy();

header("location:main_login.php");
?>

问题是我想通过密码加密或任何其他方法(如果有的话)进行此安全登录。我是 PHP 初学者

4

6 回答 6

6

您可以使用 md5 将密码加密到一定程度。您需要在用户注册时和登录之前 md5 密码 md5....

例子: // Define $myusername and $mypassword $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; $mypassword = md5($mypassword);

每当您有用户注册时,您还需要使用它。

于 2010-08-28T09:35:30.163 回答
3

作为初学者,您很可能不需要任何加密。特别是因为它将是 Javascript,而不是 PHP。
虽然可以做到。
您可以使用散列挑战实现摘要身份验证模式

  • 服务器发送挑战 - 随机字符串
  • 客户端对此挑战和密码进行哈希处理
  • 这个哈希被发送到服务器
  • 服务器以相同的方式进行哈希并比较两者

互联网上有很多 Javascript MD5 散列算法实现。

当然,SSL 证书会比这种自制实现更受欢迎。

但是要获得正确的答案,您仍然需要澄清您想要加密的内容以及原因。你为什么不关心保护其他东西。例如,您的整个数据库。

一段时间的一些笔记。
您的 login_success 代码要么无法工作,要么无法保护任何东西。
应该只是

if(isset($_SESSION['username'])){

因为没有要比较的 $myusername 变量。
并且应该有exit;或者header("location:...
客户无论如何都会得到受保护的内容

于 2010-08-28T09:33:12.377 回答
2

为了使这更安全一点,您应该将加密密码存储在数据库中,然后将加密输入的密码与存储的哈希值进行比较。这样,如果有人以某种方式访问​​成员表,他们就看不到实际的密码。

假设密码myPassword不只是存储它,首先使用一种算法对其进行哈希处理md5,然后将哈希存储deb1536f480475f7d593219aa1afd74c在您的数据库中。然后当用户输入密码时,对其进行散列并比较两个散列。

如需更安全的方法,请使用SSL

于 2010-08-28T09:24:43.800 回答
1

您可以在将注册数据插入表时使用 md5($password) 或 sha1($password)。

再次匹配登录登录

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='".md5($mypassword)."'"; $result=mysql_query($sql);

还有一些其他的方法,可以进一步保护。使用 sha1 和盐的组合。

顺便说一句,你为什么不使用一些快速的 php 框架,因为这些小东西已经用它们构建了。

谢谢

于 2010-08-28T09:28:18.363 回答
0

通常你会在数据库中存储密码的哈希值,见md5但这并不能保证网页和服务器之间的安全 - 为此你需要使用 https。

这里有两件事。

1. 如果我是一个愚蠢的用户,当我注册您的网站时,我必须提供密码,我可能会提供与我在其他地方使用的密码相同的密码,因此您的网站应该真正存储密码的哈希值而不是真实的密码所以如果他们被黑客入侵,攻击者将无法获得我在任何地方都使用过的密码。为此,您将散列存储在您的成员表中,并在检查它是否有效的查询中传递一个散列而不是真实的东西。

2. 在 http 下,密码将从浏览器以纯文本形式发送到服务器。如果这是通过 Internet 并且攻击者可以访问浏览器和客户端之间的任何网络,那么他们可以看到密码 - 如果您在浏览器中使用 javascript 对其进行哈希处理,则攻击者可以获取哈希并可能使用它来登录您的网站。这就是为什么我们有 https。您可以以较低的成本(特别是与开发成本相比)购买可以保护连接的证书。如果您不想这样做,您可以自签名证书并使用它。如果您的主机不允许您使用证书,那么可以创建一个自制解决方案,但最好还是找到其他主机。

于 2010-08-28T09:24:57.927 回答
-2

在这种情况下,md5 将是最好的。通过 MD5 函数运行输入详细信息(例如密码)并插入到您的数据库中。

它几乎不可逆转,因此使用它的唯一方法是在登录时也使用 MD5,并将登录时的 md5 密码与存储在数据库中的版本进行比较。

于 2014-09-24T08:31:41.537 回答