[英]Php login system, how to secure it
这是一个php新手。 下面是我用来构建登录系统以输入mypage.php的代码
它工作得很好但很天真,任何人都可以在网址中键入mypage.php并避开登录页面。 我怎样才能使它更安全?
非常感谢!
if(isset($_POST['submit'])) {
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
$sql = "SELECT * FROM login WHERE user='".$user."'";
$res = $this->new_db->select($sql);
$row = $this->new_db->get_row($res);
if (isset($row)) { //user exists?
if($row["pass"] == $pass){
$_SESSION['userId'] = $row['user'];// TRYING WITH SESSIONS
header("Location: mypage.php");
} else {
echo "wrong pass";
}
} else {
echo "user does not exist";
}
}
然后在mypage.php中
if(isset($_SESSION['userId'])) {
//contents
} else {
echo "there's an error";
}
它打印“有一个错误”为什么? 非常感谢
三件事:
mysql_real_escape_string()
。 $_SESSION
值,指示用户当前登录状态。 然后在需要用户登录的任何页面上,检查该值。 如果它存在,他们以前登录过。如果没有,他们没有。 它很简单,但足以满足您的需求。 是的,你的代码中可能有sql-injection,以防止你使用mysql_real_escape_string函数
检查我的答案,我在一段时间之前发布,这解释了你应该如何使用登录系统。
您需要在mypage.php中放置一些东西来检查用户是否“登录”。 我在过去使用Zend Framework的Zend Auth模块完成了这项工作。 关于它的很酷的事情是它可以单独使用,(你不必使整个Zend Framework站点使用Auth模块)。 我使用Zend Auth Page来弄清楚如何使用它。
然后,一旦我使用Zend会话设置auth会话,我只是检查了任何其他页面,看看用户是否“登录”了这样的事情:
private function _loggedIn()
{
$loggedIn = false;
$Namespace = new Zend_Session_Namespace('Zend_Auth');
foreach ($Namespace as $index => $value) {
$loggedIn = ($value->user_id);
}
return $loggedIn;
}
首先,您必须保护您的mysql查询免受sql注入。 这可以通过添加mysql_real_escape_string
来实现:
$user = mysql_real_escape_string($_REQUEST['user']);
然后,如果您不希望用户在mypage.php
情况下访问mypage.php
,则应在登录脚本中设置一些cookie(如果登录成功),然后在mypage.php
检查该cookie以查看如果它在您的数据库中匹配。 像这样的东西:
login.php中:
if($row["pass"] == $pass){
setcookie("userid",$user);
setcookie("passhash",sha1($pass));
...
mypage.php
$res = mysql_query("select * from login where user='".mysql_real_escape_string($_COOKIE['userid'])."' limit 1");
$row = mysql_fetch_assoc($res);
if($_COOKIE['passhash'] == sha1($row['pass']))
{
die("logged in OK");
}
else
{
die("please log in");
}
if (isset($_POST['submit'])) {
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
$sql = "SELECT user FROM login WHERE user='".mysql_real_escape_string($user)."' AND pass=SHA1('".mysql_real_escape_string($pass)."')";
$res = $this->new_db->select($sql);
$row = $this->new_db->get_row($res);
if ($row['user'] != "") { //user exists?
header("Location: mypage.php");
}else{
echo "username and password combination is wrong";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.