Tengo un sitio de preguntas y respuestas. Tengo una sección de administración. Desde esa sección puedo eliminar usuarios, hilos, respuestas y editar otras cosas. Tengo un código simple al inicio de la página de administración:
if(($session->protected_page_security()) == FALSE ||
($session->is_administrator() == FALSE)){
$session->logout;
redirect_to('../index.php');
}
Una clase de sesión tiene los siguientes métodos ....
public function protected_page_security() {
if(!$this->confirm_session_is_valid() && !$this->check_login()){
return false;
} else {
return true;
}
}
public function confirm_session_is_valid() {
$check_ip = true;
$check_user_agent = true;
$check_last_login = true;
if($check_ip && !$this->request_ip_matches_session()) {
return false;
}
if($check_user_agent && !$this->request_user_agent_matches_session()) {
return false;
}
if($check_last_login && !$this->last_login_is_recent()) {
return false;
}
return true;
}
public function request_ip_matches_session() {
if(!isset($this->ip) || !isset($_SERVER['REMOTE_ADDR'])) {
return false;
}
if($this->ip === $_SERVER['REMOTE_ADDR']) {
return true;
} else {
return false;
}
}
public function request_user_agent_matches_session() {
if(!isset($_SESSION['user_agent']) || !isset($_SERVER['HTTP_USER_AGENT'])) {
return false;
}
if($_SESSION['user_agent'] === $_SERVER['HTTP_USER_AGENT']) {
return true;
} else {
return false;
}
}
public function last_login_is_recent() {
$max_elapsed = 60 * 60 * 24; // 1 day
// return false if value is not set
if(!$this->last_login) {
return false;
}
if(($this->last_login + $max_elapsed) >= time()) {
return true;
} else {
return false;
}
}
public function is_administrator(){
$administrator_ids = array("164");
if(in_array($_SESSION['user_id'], $administrator_ids)){
return true;
} else {
return false;
}
}
USER_ID="164" es un administrador.
Mi pregunta es esta:
¿Crees que no es aconsejable tener un enlace a la sección de administración en el sitio (incluso si solo se muestra para mí, cuando inicio sesión)? Si alguien puede acceder a esta página, puede derribar toda la base de datos. ¿Es más inteligente no tener ningún enlace y simplemente escribir la dirección como una url?
Pido disculpas por la simple pregunta -
Supongo que es posible que alguien descubra (piratee) la estructura de archivos del sitio y "vea" que hay una sección de administración independientemente de si hay algún enlace correcto, así que tal vez mi pregunta sea un moote.