source: admin/WebConsole/controlpostacceso.php

lgromero-new-oglive
Last change on this file was 68bc27c, checked in by Irina Gómez <irinagomez@…>, 10 months ago

ref #400 Improved vulnerability resolution:
CVE-2024-3707: SQL injection is controlled in all database queries.
CVE-2024-3706: The type of image file, its size and alphanumeric name are controlled, using the temporary file uploaded to the server instead of the values that come in the headers.

  • Property mode set to 100644
File size: 8.9 KB
Line 
1<?php
2// ********************************************************************
3// Aplicación WEB: ogAdmWebCon
4// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
5// Fecha Creación: Diciembre-2003
6// Fecha Última modificación: Febrero-2005
7// Nombre del fichero: controlacceso.php
8// Descripción :Este fichero implementa el control de acceso a la aplicación
9// *********************************************************************
10include_once("controlacceso.php");
11include_once("./includes/CreaComando.php");
12include_once("./clases/AdoPhp.php");
13#include_once("idiomas/php/$idi/acceso_$idi.php");
14//________________________________________________________________________________________________________
15 $usu="";
16 $pss="";
17 $ident="";
18 $idc=0;
19 $iph=""; // Switch menu cliente
20 $adminetboot="";
21
22 if (isset($_GET["iph"])) $iph=$_GET["iph"]; 
23//________________________________________________________________________________________________________
24 $cmd=CreaComando($cnx); // Crea objeto comando
25 if (!$cmd)
26  die($TbMsg["ACCESS_ERROR"]);
27//________________________________________________________________________________________________________
28
29 if (isset($_POST["usu"])) $usu=mysqli_escape_string($cmd->Conexion->controlador, $_POST["usu"]);
30 if (isset($_POST["pss"])) $pss=mysqli_escape_string($cmd->Conexion->controlador, $_POST["pss"]);
31 if (isset($_POST["idcentro"])) $idc=mysqli_escape_string($cmd->Conexion->controlador, $_POST["idcentro"]);
32
33if ($idc != 0)
34{
35        $sql = "SELECT * FROM  centros WHERE idcentro = ?";
36        $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!");
37        $statement->bind_param('i', $idc);
38        $statement->execute();
39        $result = $statement->get_result()->fetch_assoc();;
40        if (empty($result)){
41            return(false);
42        } else {
43            $ident=$result["identidad"];
44        }
45        $statement->close;
46}
47
48//________________________________________________________________________________________________________
49 
50
51 $nmc="";
52 $idi="";
53
54 if(!empty($iph)){ // LLamada del browser del cliente
55     list($wip,$wusu,$wpwd,$wbd,$tbd)=explode(";",$cnx);
56     $usu=$wusu;
57     $pss=$wpwd;
58 }
59
60 $resul=toma_datos($cmd,$idc,$nmc,$idi,$usu,$tsu,$pss);
61 // Antes la variable idioma no es la correcta
62 include_once("idiomas/php/$idi/acceso_$idi.php");
63 if(!$resul)
64     Header("Location: ".$wac."?herror=4"); // Error de conexión con servidor B.D.
65 
66 if(!empty($iph)){
67     $wurl="./varios/menucliente.php";
68     Header("Location:".$wurl); // Accede a la página de menus
69 }
70
71
72 session_start(); // Activa variables de sesión
73
74 $_SESSION["widentidad"]=$ident;   
75 $_SESSION["widcentro"]=$idc; 
76 $_SESSION["wnombrecentro"]=$nmc; 
77 $_SESSION["wusuario"]=$usu; 
78 $_SESSION["widtipousuario"]=$tsu; 
79 $_SESSION["widioma"]=$idi;
80 $_SESSION["wcadenaconexion"]=$cnx;
81 $_SESSION["wpagerror"]=$wer;
82 $_SESSION["wurlacceso"]=$wac;
83 $_SESSION["wadminetboot"]=$adminetboot;
84
85// Variables de entorno
86 $resul=toma_entorno($cmd,$ips,$prt,$pclo,$rep);
87 if(!$resul)
88     Header("Location: ".$wac."?herror=4"); // Error de conexión con servidor B.D.
89
90 $_SESSION["wservidorhidra"]=$ips;
91 $_SESSION["whidraport"]=$prt;
92 $_SESSION["protclonacion"]=$pclo;
93 $_SESSION["repcentralizado"]=$rep;
94
95 //________________________________________________________________________________________________________
96 //    Busca datos del usuario que intenta acceder a la aplicación 
97 //        Parámetros:
98 //        - cmd:Una comando ya operativo (con conexión abierta)   
99 //        - usuario: Nombre del usuario   
100 //        - pasguor: Password del uuario   
101 //
102 //    Devuelve el identificador del centro, el nombre y el idioma utilizado por el usuario 
103 //_______________________________________________________________________________________________________
104 function toma_datos($cmd,$idcentro,&$nombrecentro,&$idioma,$usuario,&$idtipousuario,$pasguor){
105        global $adminetboot;
106
107        if(!empty($idcentro)){
108                $sql = "SELECT usuarios.idtipousuario, centros.nombrecentro, idiomas.nemonico AS idioma
109                                FROM usuarios
110                                INNER JOIN administradores_centros ON administradores_centros.idusuario=usuarios.idusuario
111                                INNER JOIN centros ON centros.idcentro=administradores_centros.idcentro
112                                INNER JOIN idiomas ON usuarios.ididioma=idiomas.ididioma
113                                WHERE usuarios.idtipousuario <> 3
114                                AND usuarios.usuario = ?
115                                AND usuarios.pasguor=SHA2( ?, 224)
116                                AND administradores_centros.idcentro = ?;";
117                $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!");
118                $statement->bind_param('ssi', $usuario,$pasguor,$idcentro);
119
120        }                       
121        else{
122                 $sql = "SELECT usuarios.idtipousuario, idiomas.nemonico AS idioma
123                                FROM usuarios
124                                INNER JOIN idiomas ON usuarios.ididioma=idiomas.ididioma
125                                WHERE idtipousuario <> 3
126                                  AND usuarios.usuario = ?
127                                  AND usuarios.pasguor=SHA2( ? , 224)";
128                $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!");
129                $statement->bind_param('ss', $usuario,$pasguor);
130        }
131
132        $statement->execute();
133        $result = $statement->get_result()->fetch_assoc();;
134
135        if (empty($result)){
136            // No existe el usuario
137            return(false);
138        } else {
139            $idtipousuario=$result["idtipousuario"];
140            $adminetboot=$idtipousuario;
141            $idioma=$result["idioma"];
142            if(!empty($idcentro)){
143                    $nombrecentro=$result["nombrecentro"];
144                    $idtipousuario=2; // Fuerza al acceso como administrador de UNidad organizativa
145                    return(true);
146            } else {
147                    $nombrecentro="";
148                    if($idtipousuario<>1) // Si NO es superadminsitrador
149                                return(false);
150                        else
151                                return(true);
152            }
153
154        }
155        return(false);
156 }
157//________________________________________________________________________________________________________
158 //    Busca datos de configuración del sistema 
159 //        Paráametros:
160 //        - cmd:Una comando ya operativo (con conexión abierta)   
161 //        - ips: Dirección IP del servidor de administración   
162 //        - prt: Puerto de comunicaciones
163 //        - pclo: Protocolo de clonación
164 //          - rep: Uso de repositorio centralizado
165 //
166 //    Devuelve datos generales de configuración del sistema
167 //_______________________________________________________________________________________________________
168 function toma_entorno($cmd,&$ips,&$prt,&$pclo,&$rep){
169        $rs=new Recordset; 
170        $cmd->texto="SELECT * FROM entornos";
171        $rs->Comando=&$cmd;
172        if (!$rs->Abrir()) return(false); // Error al abrir recordset
173        if(!$rs->EOF){
174                $ips=$rs->campos["ipserveradm"];
175                $prt=$rs->campos["portserveradm"];
176                $pclo=$rs->campos["protoclonacion"];
177                //$rep=$rs->campos["repositorio"];
178        }
179        return(true);
180 }
181 //_______________________________________________________________________________________________________
182 //    Muestra mensaje de alerta si no existe repositorio en la unidad organizativa
183 //        Parámetros:
184 //        - cmd:Una comando ya operativo (con conexión abierta)
185 //        - idcentro: identificador de la unidad organizativa
186 //_______________________________________________________________________________________________________
187 function alert_norepo($cmd, $idcentro,$mensaje){
188        // Si entramos en la parte administrativo no se muestra mensaje
189        if ($idcentro == 0) return;
190
191        $idrepositorio = '';
192        $sql = "SELECT idrepositorio FROM repositorios ".
193                    " WHERE idcentro=? LIMIT 1;";
194        $statement = $cmd->Conexion->controlador->prepare ($sql) or die ("Failed to prepared the statement!");
195        $statement->bind_param('i',$idcentro);
196        $statement->execute();
197        $result = $statement->get_result()->fetch_assoc();
198        $idrepositorio = $result["idrepositorio"];
199        if ($idrepositorio == '') {
200                echo 'alert("'.$mensaje.'");';
201        }
202        return;
203 }
204?>
205<html> 
206<head> 
207     <title><?php echo $TbMsg["ACCESS_TITLE"] ?></title>
208     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
209     <link rel="stylesheet" type="text/css" href="estilos.css">
210</head>
211
212<body> 
213<div id="mensaje" style="position:absolute;TOP:250px;LEFT:330px; visibility:visible; text-align: center">
214     <span class="subcabeceras"><?php echo $TbMsg["ACCESS_ALLOWED"] ?></span>
215</div>
216     <script language="javascript">
217             var vez=0;
218             setTimeout("acceso();",300);
219
220             function acceso(){
221                 var o=document.getElementById("mensaje");
222                 var s=o.style.visibility;
223                 if(s==="hidden")
224                     o.style.visibility="visible";
225                 else
226                     o.style.visibility="hidden";
227                 if(vez>5){
228                     var w=window.top;
229                     w.location="frames.php";
230                 }
231                 vez++;
232                 setTimeout("acceso();",300);
233             }
234             <?php alert_norepo($cmd, $idc,$TbMsg["WARN_NOREPO"]) ?>;
235     </script>
236</body>
237</html>
Note: See TracBrowser for help on using the repository browser.