Защита доступа к моим системным файлам (php)


разверните систему сеансов для защиты моих php-файлов, я включаю ее в каждый php-файл, который отображает menu.

<?php
   // CONECTANDO AL SISTEMA SEGUN TIPO DE USUARIO//
   if (isset($_SESSION['conectado']) && $_SESSION['conectado'] == true && $_SESSION['nivel']==0) {
   // ------------------------ //
   } else {
   // MENSAJE DE ACCESO NEGADO //
   echo ('<script>alert("No tiene permisos suficientes para acceder a esta parte del sistema");</script>');
   echo ("<script>window.location = 'index.php';</script>");
   exit;
   // ------------------------ //
   }
   // ------------------------ //
   $now = time();
   if($now > $_SESSION['expira']) {
   //DESTRUYO LA SESION, ANTES DE SACARLO DEL SISTEMA//
   session_destroy();
   // MENSAJE DE SESIÓN EXPIRADA //
   echo ('<script>alert("Su sesión ha expirado");</script>');
   echo ("<script>window.location = 'index.php';</script>");
   exit;
   }
   // ------------------------ //
?>

случается, что у меня также есть другой тип файла, называемый действиями, это все действия, которые выполняют php: вставка, изменение, удаление, запрос, чтобы люди не входили в них, добавляя:

if(!isset($_POST['submit'])){
  }
echo ('<script>alert("No tiene permisos suficientes para acceder a esta parte del sistema");</script>');
echo ("<script>window.location = 'index.php';</script>");
exit;

и, наконец, у меня есть функции, которые отвечают за заполнение selects, checkbox, одна другая функция, которая отображает пользовательские данные и функции, которые активируются с помощью$. post из JSON.

Проблема в том, что я не знаю, как защитить эти файлы ,и человек может получить к ним доступ (хотя не все показывают важную информацию)

  1. *Если я использую метод ISSET я получаю ошибку, потому что нет submit и не включает их в систему.

  2. *Если я включу метод session, он даст мне ошибку, потому что я должен начать session раньше, я набираю session_start, и он говорит мне, что уже они отправили заголовок (ранее в меню, где включен этот файл функции

Что я могу сделать, чтобы избежать доступа к этим файлам?

 1
Author: Victor Alvarado, 2017-03-22

2 answers

Здесь я передаю вам пример, надеюсь, он послужит вам. В основном то, что вам нужно сделать, это создать две таблицы, одну для меню, а вторую для разрешений. Таблица разрешений, если вы должны связать ее с таблицей пользователей.

Структура таблицы "меню":

CREATE TABLE IF NOT EXISTS menu (
  id int(15) NOT NULL AUTO_INCREMENT,
  nombre varchar(100) NOT NULL,
  link varchar(100) NOT NULL,
  orden int(2) NOT NULL,
  grupo int(2) NOT NULL,
  PRIMARY KEY (id),
  KEY id (id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

Таблица разрешения:

CREATE TABLE IF NOT EXISTS permisos (
  id int(15) NOT NULL AUTO_INCREMENT,
  id_usaurio int(15) NOT NULL,
  id_menu int(15) NOT NULL,
  nuevo int(1) NOT NULL,
  editar int(1) NOT NULL,
  mostrar int(1) NOT NULL,
  borrar int(1) NOT NULL,
  pdf int(1) NOT NULL,
  excel int(1) NOT NULL,
  PRIMARY KEY (id),
  KEY id_menu (id_menu) USING BTREE,
  KEY id (id) USING BTREE,
  KEY permisos_ibfk_1 (id_usaurio) USING BTREE,
  CONSTRAINT permisos_ibfk_2 FOREIGN KEY (id_menu) REFERENCES menu (id) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT permisos_ibfk_3 FOREIGN KEY (id_usaurio) REFERENCES agent (id) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1696 DEFAULT CHARSET=utf8;

В представлении:

       <ul class="nav">
        <li class="divider-vertical"></li>
          <?php 
          $data_gru = $rol->get_menu_grupo($_SESSION["credentials"]["userType"],$_SESSION["credentials"]["userId"]);
          foreach($data_gru as $valueg){
           ?>
          <li class="dropdown">
            <a data-toggle="dropdown" class="dropdown-toggle" href="#"><?php echo $valueg['nombre'] ?><b class="caret"></b></a>
            <ul class="dropdown-menu">
            <?php 
                $data_men = $rol->get_menu_link($_SESSION["credentials"]["userType"],$_SESSION["credentials"]["userId"],$valueg['grupo']);
                foreach($data_men as $value){
             ?>
              <li><a href="index.php?c=<?php echo $value['link']; ?>"><?php echo $value['nombre']; ?></a></li>
            <?php } ?>
            </ul>

В модели:

//Función donde extraemos el número de grupos del menú.
public function get_menu_grupo($tipo, $usuario){
    if($tipo == 1){
        $query = $this->db->query("SELECT menu.id, menu.nombre, menu.grupo FROM menu WHERE menu.link = '' Order By  menu.grupo ASC");   
    }else{
        $query = $this->db->query("SELECT menu.id, menu.nombre, menu.grupo FROM menu INNER JOIN permisos ON menu.id = permisos.id_menu WHERE menu.link = '' AND permisos.id_usaurio = '".$usuario."' GROUP BY menu.nombre Order By  menu.grupo ASC");
    }
    $this->aplicacion = '';
    while($list = mysqli_fetch_assoc($query)){
        $this->aplicacion[] = array_merge(array('nombre'=> $list['nombre']),array('grupo'=> $list['grupo']),array('id'=> $list['id']));
    }
    return $this->aplicacion;
}   
 1
Author: Yoel Rodriguez, 2017-03-23 08:43:17

Используйте следующие меры, чтобы защитить мою систему без изменения базы данных.

Сеансы:

<?php   
       if ((isset($_SESSION['conectado']) && ($_SESSION['conectado'] == true) && ($_SESSION['nivel']==0) && ($_SESSION['nivel']==1)))
       {
    } else {
   echo ('<script>alert("No tiene permisos suficientes para acceder a esta parte del sistema");</script>');
   echo ("<script>window.location = 'index.php';</script>");
   exit;
   }
   $now = time();
   if($now > $_SESSION['expira']) {
   session_destroy();
   echo ('<script>alert("Su sesi\u00f3n ha expirado");</script>');
   echo ("<script>window.location = 'index.php';</script>");
   exit;
   }
   ?>

MENUS

<?php
   session_start();
   include_once 'sesion_todos.php';
?>

Действия

 <?php
    $temp = $_POST["temp"];

    if ($temp == 1)
      {

      }
      else
      {
      echo ('<script>alert("No tiene permisos suficientes para acceder a esta parte del sistema");</script>');
      echo ("<script>window.location = 'index.php';</script>");
      }

    ?>
 1
Author: Victor Alvarado, 2017-04-03 13:51:20