PHP更新破坏登录页面

时间:2015-09-16 23:48:20

标签: php session login

我有一个非常基本的登录检查页面:     

$host="localhost"; // Host name 
$username="user"; // Mysql username 
$password="pass"; // Mysql password 
$db_name="db"; // Database name 
$tbl_name="userdata"; // Table name 
$lastLogDate=date("l, m/d/y, h:i:sa");
// 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");
$logdate=date("m/d/Y");
$logtime=date("H:i:s");
$logip=$_SERVER['REMOTE_ADDR'];
$nol=$_POST['nol'];
// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 
$origpass=$_POST['mypassword'];
$origpass=str_replace("'", '"', $origpass);
$from=$_POST['from'];
if ($from=="forum") {
  $to="/forum";
}
if (isset($_POST['nol'])) {
  $rd=$nol;
}
else {
  $rd="/home";
}
$sql="SELECT * FROM userdata WHERE username collate latin1_general_cs='$myusername'";
$result=mysql_query($sql);
$result=mysql_fetch_array($result);
$password=$result['password'];
$_SESSION['mypassword']=$mypassword;
$salt = 'no';
$salted_password = $mypassword.$salt;
$mypassword = md5($salted_password);
if($mypassword==$password) {
$mypassword=$_POST['mypassword'];
$_SESSION['myusername']=$myusername;
$_SESSION['mypassword']=$_POST['mypassword'];
  $sqlDate="UPDATE userdata SET lastLog='$lastLogDate' WHERE username='$myusername'";
  $resultDate=mysql_query($sqlDate);
   mysql_query("INSERT INTO login_log (date, time, username, password, ip, success) VALUES ('$logdate', '$logtime', '$myusername', '$origpass', '$logip', '1')");

  header("location:$rd");
}
else {
 mysql_query("INSERT INTO login_log (date, time, username, password, ip, success) VALUES ('$logdate', '$logtime', '$myusername', '$origpass', '$logip', '0')");
  header("location:/login?msg=wrongUorP");
}

提交表单后,页面只是空白。 error_log中没有任何错误。我从昨天开始就没碰过它,昨天它正在做点什么。 另一个问题是我将用户专用页面重定向到/login?nol=/<page>,因此,例如,如果页面为http://www.example.com/random/page/text.txt,则重定向将为/login?nol=/random/page/text.txt。该页面检查用户是否使用以下命令登录:

<?php
session_start();
if(!isset($_SESSION['myusername'])){
  header("location:/login?nol=/random/page/text.txt");
}
?>

但是每当用户登录时,即使/login?nol=/random/page/text.txt(我认为)已经设置,用户也会被重定向到$_SESSION['myusername']。 (参见上面的代码)。我最近使用cPanel更新到PHP 5.3,之前我有session_register()。我是否更改了会话变量? 这是我的接收页面:

session_start();
if(!isset($_SESSION['myusername'])){
  //header("location:/login?nol=/home"); // commented out to test if it receives session variable
  echo "<h1>hello</h1>"; //the page displayed this, so the script did NOT receive the variable.
}

1 个答案:

答案 0 :(得分:1)

会话

显示您在代码中的位置session_start()(顶部块)。不是较小的第二个蓝色/灰色块

Sql Injection

周杰伦很好地参考了他在正确使用的数据库层上的优秀网站,以及使用它们的正确方法。还有更多关于这里的文章。我刚用你的

注入我的桌子
SELECT * FROM userdata WHERE username collate latin1_general_cs='$myusername';

对于插入物,做第二级注射时间炸弹很容易。

哈希

杰伊也提到了这一点。看他的网站。我写了这个up。下车MD5