从数据库中删除内容,安全预防措施


Removing content from database, security precautions

>更新:

我像Berdir告诉我的那样添加了CSRF保护,在下面的链接的帮助下,使我的应用程序再次工作。然而。。我不太确定我现在做了什么:D这将如何使我的应用程序更安全?我现在在我的 ajax 代码中获得了一个 cookie 值,这让我特别烦恼,因为我必须通过我的 ajax 调用来传递它。否则它只是不起作用。这不会泄露一些关于饼干的关键信息吗?还是我只是偏执狂。谢谢!

http://aymsystems.com/ajax-csrf-protection-codeigniter-20

//老你好。

在我正在构建的这个 Web 应用程序中,我有一个功能来添加有关某些主题的"提示和技巧"。这些页面只能由具有管理员角色的帐户添加。但是,我也希望能够删除这些页面。(总是很方便,对)。由于我使用的是 CodeIgniter,我只想创建一个控制器函数,该函数接受一个 ID,并将此 ID 传递给模型,在该模型中,与该 ID 对应的页面将从数据库中删除。

只是为了明确这一点:

控制器:

public function del_content($id)
{
    $this->content_model->del_content($id)
}

型:

public function del_content($id)
{
    // database code which I can't be bothered to look up now
    // something like $this->db->where(), $this->db->delete()
}

这一切都非常简单,但我担心它可能简单了。这对我来说似乎不是很安全,是吗?由于您可以从浏览器中的URL地址栏调用该函数,因此您基本上可以通过它删除整个内容表。(因为您要对 ID 为 3 的项目执行http://mywebsite/controller/del_content/3操作)。当然,只有管理员帐户才能访问该功能,但仍然..

以前从未编程过这样的东西,因此在这种情况下我从来没有考虑过我应该采取的安全措施。有人愿意给我一些我应该注意的事情,也许还有一些想法和建议,关于如何使它更安全?

多谢!

您需要防范的是CSRF攻击。简而言之,它们是诱骗管理员通过GET或POST请求访问某个URL的攻击。

执行此操作的典型方法是令牌。生成指向删除操作的链接或表单时,会生成一个令牌,该令牌将发送到客户端(作为隐藏表单字段或作为 GET URL 的一部分),并将其存储在当前会话的服务器上,执行该操作时,您将提交的令牌和存储的令牌进行比较,并且仅在它们匹配时才继续。

许多框架/系统在某些方面都内置了这种功能,例如,使用Drupal中的Form API生成的所有表单都可以防止此类攻击。