更新:
我添加了像Berdir这样的CSRF保护,借助下面的链接让我的应用程序再次运行.但是..我不太清楚我现在做了什么:D这怎么能让我的应用程序更安全?我特别感到困扰的是,我现在在我的ajax代码中获得了一个cookie值,因为我必须通过我的ajax调用传递它...否则它只是不起作用.这不会泄露一些关于cookie的重要信息吗?或者我只是偏执狂.谢谢!
http://aymsystems.com/ajax-csrf-protection-codeigniter-20
//老嗨
在我正在构建的这个Web应用程序中,我有一个功能可以添加关于某些主题的"提示和技巧".这些页面只能由具有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地址栏调用该函数,因此您基本上可以删除整个内容表.(因为你要http://mywebsite/controller/del_content/3
为ID为3的项目做).当然,只有管理员帐户才能访问该功能,但仍然...
我以前从来没有编过这样的事情,因此从来没有考虑过我应该采取的安全措施.有人会善意地给我一些我应该留意的事情,也许还有一些关于如何使这更安全的想法,建议?
非常感谢!
您需要防范的是CSRF攻击.简而言之,它们是通过GET或POST请求诱使管理员访问某个URL的攻击.
典型的方法是令牌.生成指向删除操作的链接或表单时,您生成一个发送到客户端的令牌(作为隐藏表单字段或作为GET URL的一部分),还将其存储在服务器上以用于当前会话以及何时执行该操作后,您将比较提交的和存储的令牌,并且仅在匹配时才继续.
许多框架/系统在某些方面具有内置功能,例如,使用Drupal中的Form API生成的所有表单都可以防止此类攻击.