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

时间:2011-05-08 22:41:46

标签: php codeigniter security crud

更新

我添加了像Berdir这样的CSRF保护,借助下面的链接让我的应用程序再次运行。但是..我不太清楚我现在做了什么:D这怎么能让我的应用程序更安全?我特别感到困扰的是,我现在在我的ajax代码中获得了一个cookie值,因为我必须通过我的ajax调用传递它...否则它只是不起作用。这不会泄露一些关于cookie的重要信息吗?或者我只是偏执狂。谢谢!

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

//老 您好。

在我正在构建的这个网络应用程序中,我有一个功能可以添加关于某些主题的“提示和技巧”。这些页面只能由具有admin角色的帐户添加。但是,我也希望能够删除这些页面。 (总是很方便,对吧)。因为我正在使用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)。当然,只有管理员帐户才能访问该功能,但仍然可以..

我以前从未编写过类似的东西,因此从来没有考虑过我应该采取的安全措施。有人会善意地给我一些我应该留意的事情,也许还有一些关于如何使这更安全的想法,建议?

非常感谢!

1 个答案:

答案 0 :(得分:5)

CSRF攻击需要防范的是什么。简而言之,它们是通过GET或POST请求诱使管理员访问某个URL的攻击。<​​/ p>

这样做的典型方法是令牌。生成指向删除操作的链接或表单时,您将生成一个发送到客户端的令牌(作为隐藏表单字段或作为GET URL的一部分),还将其存储在服务器上以用于当前会话以及何时执行该操作后,您比较提交的和存储的令牌,只有匹配时才会继续。

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