如何在PHP中加密用户密码?
请以初学者可以理解的方式解释。我已经有了这个示例代码:
$password = "john856";
$encrypt_password = md5($password);
echo $encrypt_password;
如何将其合并到我当前的代码中,该代码不进行任何加密?
<?php
$con = mysql_connect("localhost","root","");
if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("koro", $con);
$sql="INSERT INTO users
(LNAME, FNAME, MNAME, UNAME, PW)
VALUES
('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$_POST[Pass]')";
if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }
echo "<script>alert('User added! You can now use the system.')</script>";
mysql_close($con)
?>
答案 0 :(得分:3)
让我从更重要的一点开始:
您必须永远直接将$ _POST变量传递给查询。这使您极易受到SQL injections的攻击。</ p>
至少应该在您插入的每个表单值上运行mysql_real_escape_string():
$Lneym = $_POST["Lneym"];
$Lneym_halfway_safe = mysql_real_escape_string($Lneym);
....
$sql="INSERT INTO users
(LNAME, FNAME, MNAME, UNAME, PW)
VALUES
('$Lneym_halfway_safe',
然后您也可以立即合并md5():
$PW = md5($_POST["PW"]); // no escape_string() needed here,
// the md5 checksum is safe
然后为密码字段插入'$PW'
。
最好的方法是使用像PDO这样的数据库类。其参数化查询功能可自动帮助防止SQL注入。也许this tutorial会帮助你。
看到你甚至无法将md5()
添加到你的代码中(没有个人批评,我们都曾在那里开始)我强烈建议你阅读编程基础知识。复制粘贴网络平台的关键安全功能非常危险,很可能会流泪。
答案 1 :(得分:1)
你几乎就在那里。运行你的代码:
$password=$_POST["pass"];
$encrypt_password=md5($password);
然后将$ encrypt_password插入数据库中的密码字段:
$sql="INSERT INTO users
(LNAME, FNAME, MNAME, UNAME, PW)
VALUES
('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$encrypt_password')";
但是,我应该补充一点,MD5是一种哈希算法,它是一个单向进程,它在每个输入上生成一个唯一的字符串(“冲突旁边”)。您将无法恢复用户的密码。这是一件好事,您仍然可以检查登录 - 只需比较md5值。
答案 2 :(得分:0)
答案 3 :(得分:0)
正如其他人所说,逃避所有变数:
$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]));
$lastname = mysql_real_escape_string($_POST[Lneym]);
$firstname = mysql_real_escape_string($_POST[Fneym]);
$midname = mysql_real_escape_string($_POST[Mneym]);
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "INSERT INTO users
(LNAME, FNAME, MNAME, UNAME, PW)
VALUES
('$lastname', '$fistname', '$middlename', '$username', '$encrypt_password')";
然后登录:
$encrypt_password = mysql_real_escape_string(md5($_POST["pass"]))
$username = mysql_real_escape_string($_POST[Uneym]);
$sql = "SELECT LNAME, FNAME, MNAME, UNAME
WHERE UNAME = '$username'
AND PW = '$encrypt_password'";
答案 4 :(得分:-1)