首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网站安全漏洞

网站安全漏洞
EN

Stack Overflow用户
提问于 2012-06-27 00:49:29
回答 2查看 170关注 0票数 1

我有一个网站,我使用会话登录。在我的管理的每个页面,我有一个检查器,如果用户已经登录或没有。我有这个代码

代码语言:javascript
复制
if(!$_SESSION['loggedin'] && !$_SESSION['userid'])
{
  header('Location:login.php');
}
else
{
 //proceed loading the page
}

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

我检查了我的日志,黑客的用户id是0。这怎么可能?我该怎么阻止他?这让我想知道他做了什么,因为根据我在页面顶部的条件,如果$_SESSION‘’userid‘没有值,它应该将它们重定向到登录页面。

现在我把网站下线了,因为黑客越来越厉害了。我找到了它的ip地址。

这是我的用户身份验证

代码语言:javascript
复制
$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');
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 08:31:58

正如@nhahtdh所观察到的,您有一个明显的SQL注入。想想看,如果有人在你的用户名字段中输入admin' OR 1=1; --会发生什么(是的,人们确实会尝试这样的事情)。您的SQL字符串将转换为如下形式:

代码语言:javascript
复制
SELECT * FROM users WHERE user='admin' OR 1=1; -- AND pass='junk'

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

请看一下this excellent answer,它解释了如何避免SQL注入。

票数 3
EN

Stack Overflow用户

发布于 2012-06-27 00:51:46

确保总是在Header('Location: ...')调用之后调用exit。否则,脚本将在头调用后继续执行。在对浏览器的header调用之后,它将继续发送所有内容,但常规浏览器将看到location标头并执行重定向。不太友好的用户可能会绕过位置呼叫,可以随心所欲地浏览您的“受保护”页面!

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

代码语言:javascript
复制
header('Location:login.php');
exit;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11212175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档