我们有一个php页面,它是该网站的管理部分。它用于对数据库执行某些更新操作。代码如下所示
session_start();
if (!isset($_SESSION['somevariable']) )
{
header("Location:loginpage.php");
}
$id=$_GET['somevariable];
$sql = "UPDATE sometable SET somecolumn='' where someothercolumn=?";
$stmt = $con->prepare($sql);
$stmt->bind_param('s',$id);
$stmt->execute();
我们注意到有一些漏洞,这段代码似乎是在一个周期性间隔(5秒)从未知来源运行,这似乎没有人拥有管理部分的密码并且正在运行手动操作。
我们想知道黑客可以绕过此登录检查并执行其余代码而无需密码吗?对上述代码中的漏洞有任何见解都会有所帮助。提前致谢
答案 0 :(得分:7)
我看到了两个漏洞:
1)CSRF(直接从get方法使用变量)
2)调用标题函数后退出未使用
正确的代码应该是这样的:
<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
参见php.net文档 Link
答案 1 :(得分:0)
如果管理员有活动会话,并且黑客以某种方式找到了他们的PHPSESSID
cookie的值,他们就可以发送cookie并劫持会话。
确保使用SSL加密,以使某人难以窃听连接并获取Cookie。