【发布时间】:2015-11-23 16:02:05
【问题描述】:
我在保护我的网站免受攻击方面遇到了问题。
当我必须为管理面板定义安全性时,问题就出现了。
我想要什么:
- 避免在未登录站点的情况下直接访问控制器
- 为了防止我的网站被黑客攻击
- 为了保护我的数据库免受黑客攻击
我该怎么做?到目前为止,我所做的是:
在每个控制器中放置这段代码:
defined('BASEPATH') OR exit('No direct script access allowed');
我知道它应该防止直接访问控制器,但它不起作用...我可以访问而无需登录每个控制器中的每个功能..
我还编写了这个函数用于在会话中存储用户数据:
public function receiveLogin(){
$this->load->library('form_validation');
$this->load->library('session');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == FALSE){
$this->data['error_message'] = $this->form_validation->error_array();
}else{
$username = $_POST['username'];
$password = md5($_POST['password']);
$user = $this->user_model->checkUserLogin($username,$password);
if (!empty($user)){
$admin_data = array(
'admin_id' => $user->u_id,
'admin_name' => $user->u_name,
);
$this->session->set_userdata($admin_data);
redirect('admin/showDashboard');
}else{
$this->session->set_userdata('admin_id', 0);
$this->data['error_message'] = 'Los datos de ingreso son incorrectos';
redirect('login');
}
}
}
我还为缩短 url 配置了路由,并且运行良好。
有人可以解释我如何完成我需要的吗?我发现的关于这方面的帖子并没有谈到我问过的这 3 个安全问题..
这方面的最佳做法是什么?
【问题讨论】:
-
@Mhakvoort 很抱歉,但我可以看到您的答案与您提到的帖子中的用户 coderabbi 重复,而不是我的问题
-
首先,
defined('BASEPATH') OR exit('No direct script access allowed');防止直接访问控制器文件——这意味着用户不能直接打开控制器的 php 文件。这并不能保护 ROUTE 免受直接访问 - 用户仍然可以访问访问此控制器文件的路由。这 if 仅检查文件是否通过 codeigniter 系统加载。您需要做的是检查用户是否已成功登录,并且对于您要保护的每个控制器方法都有一个活动会话。 -
@MikelBitson 不,我明白那部分......我仍在研究如何防止直接访问而不被记录
-
Limon,我在这里很困惑 - 你不会只是在你想要保护的任何方法的最顶部写一个检查,看看用户是否登录,如果他们是登录你做你的方法逻辑,如果会话没有设置并且他们没有登录它只会返回一个关于登录的错误或将用户重定向到登录页面?
标签: php codeigniter security url controllers