网站安全漏洞

时间:2012-06-26 16:49:29

标签: php security

我有一个网站,我使用会话登录。在我的管理员的每个页面中,如果用户已登录,我都会有一个检查程序。我有这个代码

if(!$_SESSION['loggedin'] && !$_SESSION['userid'])
{
  header('Location:login.php');
}
else
{
 //proceed loading the page
}

现在发生了什么,有人搞乱了我们的网站。他/她正在网站上输入一些粗俗的文字,例如......所有不敬的话语都令人沮丧,因为网站是公众可以访问的。 我相信用户名和密码被黑了。所以我要求所有管理员用户更改所有密码,我添加了一个记录器来监控谁将更新网站的内容。我记录登录用户及其帖子的用户ID。更改密码后,同样的事情再次发生,内容由黑客或任何人更新。

我检查了我的日志,黑客的用户ID是0.这怎么可能,我如何阻止他?让我想知道他做了什么,因为在我的情况下,在页面顶部,如果$ _SESSION ['userid']没有值,它应该将它们重定向到登录页面。

目前,我将网站置于离线状态,因为黑客正变得越来越糟糕。我能够找到它的IP地址。

这是我的用户身份验证

$user=trim($_POST['username']);
$pass=trim(stripslashes($_POST['password']));
$sql="SELECT * FROM users WHERE user='$user' AND pass='$pass'";
$qry=mysql_query($sql) or die (mysql_error());
if( mysql_num_rows($qry) )
{
  $row=mysql_fetch_assoc($qry);
  $_SESSION['userid'] =$row['userid'];
  $_SESSION['loggedin']=1;  
  header('Location: welcome.php');
}
else
{
      header('Location:login.php?error=1');
}

2 个答案:

答案 0 :(得分:4)

确保在Header('Location: ...')来电后始终致电exit。否则,脚本将在标题调用后继续执行。在header调用浏览器后,它会继续发送所有内容,但常规浏览器会看到位置标头并执行重定向。不太好用户可以规避定位呼叫,并可以按照自己的意愿浏览“受保护”页面!

所以,不要忘记总是立即执行结束:

header('Location:login.php');
exit;

答案 1 :(得分:3)

正如@nhahtdh观察到的,你有一个明显的SQL注入。考虑如果某人将admin' OR 1=1; --输入您的用户名字段会发生什么(是的,人们确实会尝试这些事情)。您的SQL字符串将转换为以下内容:

SELECT * FROM users WHERE user='admin' OR 1=1; -- AND pass='junk'

将从您的用户表中选择所有用户。 userid的0可能是SQL表中的第一个userid

请查看this excellent answer,了解如何避免SQL注入。