我正在使用php登录系统。登录和注册本身是有效的,但我登录后是这样的,页面使用php打印带有用户名和密码的隐藏输入的html表单,并且提交按钮将这些输入发布到'profile'php页面,显示来自该用户的消息,并允许用户发布新消息。 的login.php:
<html>
<head>
<title>Login</title>
<?php
if(isset($_POST['submit1'])){
$canconnect=false;
$user_name="root";
$password="";
$database="users";
$server="localhost";
$user=$_POST['username'];
$pass=$_POST['pass'];
$db_handle=mysql_connect($server,$user_name,$password);
$db_found=mysql_select_db($database,$db_handle);
if($db_found){
$SQL="SELECT * FROM users";
$result=mysql_query($SQL);
while($db_field=mysql_fetch_assoc($result)){
if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
$canconnect=true;
}
}
mysql_close($db_handle);
if($canconnect){
print("Welcome, ".$user."<br><form name='ftoprof' method='post' action='profile.php'><input type='hidden' name='hiduser' value='<?php echo $user;?>'/><input type='hidden' name='hidpass' value='<?php echo $pass;?>'/><input type='submit' name='profsub' value='View Profile'/></form>");
}else{
print("Username or password incorrect, please try again.");
}
}else{
print("Users Database not found.");
mysql_close($db_handle);
}
}else{
print("Enter Username and corresponding Password.");
}
?>
</head>
<body>
<form name="form1" method="post" action="login.php">
<input type="text" name="username" value="User"/>
<input type="text" name="pass" value="password"/>
<input type="submit" name="submit1" value="Submit"/>
</form>
Don't have an account? <a href="signup.php">Sing Up</a>
</body>
</html>
我不知道问题是在这里还是在profile.php上:
<html>
<head>
<title>Profile</title>
<?php
if(isset($_POST['profsub'])){
$user=$_POST['hiduser'];
$pass=$_POST['hidpass'];
$canconnect=false;
$username="root";
$password="";
$server="localhost";
$database="users";
$db_handle=mysql_connect($server,$username,$password);
$db_found=mysql_select_db($database,$db_handle);
if($db_found){
$SQL="SELECT * FROM users";
$result=mysql_query($SQL);
while($db_field=mysql_fetch_assoc($result)){
if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
$canconnect=true;
}
}
$SQL="SELECT * FROM messages";
$result=mysql_query($SQL);
while($db_field=mysql_fetch_assoc($result)){
print($db_field['message']."<br><br>");
}if($canconnect){
print("<form name='mesform' method='post' action='profile.php'><input type='hidden' name='user' value='<?php echo $user; ?>'/><input type='text' name='message' value='message'/><input type='submit' name='messub' value='submit'/></form>");
}
}else{
print("Database not found");
}
}elseif(isset($_POST['messub'])){
$mes=$_POST['message'];
$user=$_POST['user'];
$server="localhost";
$username="root";
$password="";
$database="users";
$db_handle=mysql_connect($server,$username,$password);
$db_found=mysql_select_db($database,$db_handle);
if($db_found){
$SQL="INSERT INTO messages (User, Message) VALUES ('{$user}','{$mes}')";
$result=mysql_query($SQL);
}else{
print("Database not found");
}
}else{
print("No user's profile to display");
}
?>
</head>
<body>
</body>
</html>
我在登录页面输入用户名和密码,然后会弹出一个“查看个人资料”按钮。用户数据库表具有用户名密码电子邮件和电源(管理员)。消息数据库表只有消息和用户(发布它)。 当我点击“查看个人资料”按钮时,它会将我带到个人资料页面,但在该页面上根本没有显示,我无法分辨出问题是什么,我无法分辨出任何可能导致的情况在这。请告诉我我需要对我的代码做些什么来完成这项工作。顺便说一下,我在我的电脑上运行一个带有wamp的“服务器”,因此我使用了localhost。这是我的第一个php项目,所以我没想到在没有任何帮助的情况下第一次尝试是完美的,是的我知道密码使用文本我会改变它,如果我让它工作(输入类型=“密码”右?) 谢谢你提前
答案 0 :(得分:2)
print("Welcome, $user <br><form name='ftoprof' method='post' action='profile.php'><input type='hidden' name='hiduser' value='$user'/><input type='hidden' name='hidpass' value='$pass'/><input type='submit' name='profsub' value='View Profile'/></form>");
替换
之后的行if($canconnect){
上面的行可能会解决问题
答案 1 :(得分:1)
请!为了安全的爱,请不要使用此代码!
正如@TimG在评论中所说的“PDO,PDO,PDO”
为了帮助教育你,让我提一下这段代码的两个主要问题:
<强> ISSUE1 强>
此select语句要求所有用户,然后循环访问它们。数据库查询应该使用WHERE
子句来限制它移动的数据量。
$SQL="SELECT * FROM users";
while($db_field=mysql_fetch_assoc($result)){
if(($user==$db_field['Username'])&&($pass==$db_field['Password'])){
$canconnect=true;
}
}
ISSUE2 真正的杀手:
$SQL="INSERT INTO messages (User, Message) VALUES ('{$user}','{$mes}')";
这是一个等待发生的SQL注入攻击。您可以在该术语上进行更多搜索,但简而言之 - SQL注入攻击是最常见,最容易和最危险的漏洞之一。从字面上看,这段代码是对数据库其余部分的一扇门。
第3期纯文本密码
以纯文本格式存储密码是一个非常糟糕的主意。关于如何对密码进行加密和加密,这里有很多关于SO的讨论。
如果您要学习PHP中的数据库编程,请不要自费学习垃圾,并从一开始就学习PDO和安全性。