SQL注入测试错误



我正在测试我的网站是否存在SQL注入问题,遇到了一些我无法理解的问题。

在基础上,我正在构建一个用户博客系统。

我正在使用SQL注入我的firefox插件,下面是我收到的一些错误:

"发现错误字符串:'违反完整性约束'">

"服务器状态代码:302暂时移动"-我想这只是因为我重定向了一个用户在错误的特定形式

总的来说,我没有失败,通过了42000次测试。然而,我的一些数据库项目正在受到影响。

比方说,我正在回应数据库中的"帖子":

我有所有的数据,然后有一个隐藏的表单,用于编辑数据。如果用户已登录,则会显示一个按钮,用户可以单击该按钮并显示此表单。

即使用户没有登录,SQL注入也可以修改帖子。

在我更新帖子的处理页面中,我检查POST,然后再次检查数据库中帖子的用户名以及登录用户的会话用户名(如果未登录,则为空)。然而,这仍然允许做出改变。

这怎么可能?显示一个表单"显示:无"是否足够好?

在数据库中插入任何数据之前,您应该检查用户是否已登录(具有有效会话);下面的示例代码:

在您的登录页面中,如果用户名/密码正确,请执行以下操作:

$_SESSION["logged_in"] = true;

这将使PHP"记住"当前会话cookie是有效的,并且属于有效用户。

每当你需要更改数据库内容时,你可以检查:

if (isset($_SESSION["logged_in"]) && $_SESSION["logged_in"]) {
// all good, user is logged in, you can change database contents
mysqli_query("UPDATE ..."); // example query
} else {
// something is wrong, the form is submitted without a valid session
// so it's probably a malicious user, anyway don't change database contents
echo "Access denied, please log in."; // display error message
header("Location : /login.php"); // or redirect them to the login page
};

显示一个表单"display:none"是否足够好?

否;恶意用户可以提交表单,即使它是隐藏的(通过使用开发人员工具使其可见,或者查看页面源并编写提交表单的脚本),实际上这正是你的漏洞检查器扩展正在做的,它会尝试提交表单,哪怕它们是隐藏的。

最新更新