PHP安全登录-密码加密

PHP安全登录-密码加密,php,security,password-protection,login-script,Php,Security,Password Protection,Login Script,下面是要实现安全登录的登录系统/ 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="

下面是要实现安全登录的登录系统/

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>
main_login.php
用户名:
密码:
Checklogin.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();
?>

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

假设密码是
myPassword
,那么不要只存储它,首先使用类似
md5
的算法对其进行散列,然后将散列值
deb1536f480475f7d593219aa1afd74c
存储在数据库中。然后,当用户输入密码时,将其散列并比较两个散列


要获得更安全的方法,请使用。

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

这里有两件事

一,。 如果我是一个哑巴用户,当我注册你的网站时,我必须提供一个密码,我可能会提供与我在其他地方使用的密码相同的密码,因此你的网站应该真正存储密码的散列,而不是真实的密码,这样如果他们被黑客攻击,攻击者就不会获得我在任何地方使用的密码。为此,您将散列存储在members表中,并在检查其有效性的查询中传递散列,而不是真正的散列

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

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

再次匹配以进行登录

$sql=“从$tbl_name中选择*,其中username='$myusername'和password='.md5($mypassword)。”; $result=mysql\u查询($sql)

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

顺便问一下,为什么不使用一些快速php框架,因为这些小东西已经用它们构建好了


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

  • 服务器发送一个挑战-一个随机的strimg
  • 客户端对此质询和密码进行哈希
  • 正在将此哈希发送到服务器
  • 服务器以相同的方式执行哈希,并将两者进行比较
互联网上有很多Javascript MD5哈希算法实现

当然,SSL证书比这种自制的实现更可取


但为了得到正确的答案,您仍然需要澄清您到底想要加密什么以及为什么要加密。你为什么不关心别的事情呢。例如,您的整个数据库

有一段时间的一些注意事项。
您的登录成功代码要么不起作用,要么什么都不保护。
它应该是公正的

if(isset($_SESSION['username'])){
因为没有要比较的$myusername变量。
应该有
退出就在
标题之后(“位置:…


或者客户端将获得受保护的内容

您可以使用md5对密码进行一定程度的加密。您需要在用户注册时和登录md5之前对密码进行md5

例如:

//定义$myusername和$mypassword
$myusername=$_POST['myusername'];
$mypassword=$\u POST['mypassword'];
$mypassword=md5($mypassword);


每当有用户注册时,您也需要使用此选项。

md5是最好的选择。通过md5函数运行密码等输入详细信息,然后插入数据库


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

好的,我在这方面很差,但我想知道,例如,由于某种原因,我无法访问SSL,那么我如何使用哈希方法?我的意思是,我必须使用MD5创建一个注册页面函数和所有,你能解释一下吗…@tune SSL在这里没有任何关系。它是受保护的密码存储,而不是每个人都在谈论的登录系统。请参阅我的编辑-但正如其他人提到的,在尝试实现你自己的cms之前,你应该尝试一些开源cms。你到底想要加密什么,为什么?你应该使用为密码输入字段键入
password
。加密是可逆的;这不是一个好主意。最好使用散列。@tunetosuraj:您是PHP初学者,正在构建CMS?您建议使用您根据他们的需要定制的开源CMS如何?自制的实现可能会被中间人攻击击败。不过,它是安全的,不会被窃听。@Georg为什么会这样?我看不出中间人可以修改发送给客户端的Javascript(例如,删除加密代码)或冒充服务器。真正的SSL安全连接与证书一起工作,以确保与您交谈的服务器确实是您想要交谈的服务器。这是非常不安全的。您应该使用更强大的哈希算法(如bcrypt)。此外,您的代码也容易受到sql注入的攻击。
<?php
session_destroy();

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