source: trunk/admin/admin.php@ 258

Last change on this file since 258 was 258, checked in by roby, 5 years ago
File size: 18.2 KB
Line 
1<?php
2
3/************************************************************************/
4/* Eleonline - Raccolta e diffusione dei dati elettorali */
5/* by Roberto Gigli & Luciano Apolito */
6/* http://www.eleonline.it */
7/* info@eleonline.it luciano@aniene.net rgigli@libero.it */
8/************************************************************************/
9/* Admin */
10/* Amministrazione */
11/************************************************************************/
12
13/* Descrizione file admin.php =
14effettua il login o il rilancio alla gestione */
15
16define('ADMIN_FILE', true);
17#$LIMITE=3; //fascia di separazione del maggioritario (15.000 abitanti)
18# tempo di sessione: ini_set('session.gc_maxlifetime','3600');
19
20// Adattamento variabili superglobal
21// Versione di php
22$phpver = phpversion();
23global $dbi;
24// converte superglobal se php e' < 4.1.0
25
26if ($phpver < '4.1.0') {
27 $_GET = $HTTP_GET_VARS;
28 $_POST = $HTTP_POST_VARS;
29 $_SERVER = $HTTP_SERVER_VARS;
30 $_FILES = $HTTP_POST_FILES;
31 $_ENV = $HTTP_ENV_VARS;
32 if($_SERVER['REQUEST_METHOD'] == "POST") {
33 $_REQUEST = $_POST;
34 } elseif($_SERVER['REQUEST_METHOD'] == "GET") {
35 $_REQUEST = $_GET;
36 }
37 if(isset($HTTP_COOKIE_VARS)) {
38 $_COOKIE = $HTTP_COOKIE_VARS;
39 }
40 if(isset($HTTP_SESSION_VARS)) {
41 $_SESSION = $HTTP_SESSION_VARS;
42 }
43}
44
45$param=strtolower($_SERVER['REQUEST_METHOD']) == 'get' ? $_GET : $_POST;
46if (isset($param['aid'])) get_magic_quotes_gpc() ? $aid=$param['aid']:$aid=addslashes($param['aid']);
47if (isset($param['pwd'])) get_magic_quotes_gpc() ? $pwd2=$param['pwd']:$pwd2=addslashes($param['pwd']);
48// Additional security (Union, CLike, XSS)
49
50// We want to use the function stripos,
51// but thats only available since PHP5.
52// So we cloned the function...
53if(!function_exists('stripos')) {
54 function stripos_clone($haystack, $needle, $offset=0) {
55 return strpos(strtoupper($haystack), strtoupper($needle), $offset);
56 }
57} else {
58// But when this is PHP5, we use the original function
59 function stripos_clone($haystack, $needle, $offset=0) {
60 return stripos($haystack, $needle, $offset=0);
61 }
62}
63
64 if(isset($_SERVER['QUERY_STRING']) && (!stripos_clone($_SERVER['QUERY_STRING'], "ad_click") || !stripos_clone($_SERVER['QUERY_STRING'], "url"))) {
65 $queryString = $_SERVER['QUERY_STRING'];
66 if (stripos_clone($queryString,'%20union%20') OR stripos_clone($queryString,'/*') OR stripos_clone($queryString,'*/union/*') OR stripos_clone($queryString,'c2nyaxb0') OR stripos_clone($queryString,'+union+') OR stripos_clone($queryString,'http://') OR (stripos_clone($queryString,'cmd=') AND !stripos_clone($queryString,'&cmd')) OR (stripos_clone($queryString,'exec') AND !stripos_clone($queryString,'execu')) OR stripos_clone($queryString,'concat')) {
67 die('Operazione non consentita');
68 }
69 }
70
71
72foreach ($_GET as $sec_key => $secvalue) {
73 if ((preg_match("/<[^>]*script*\"?[^>]*>/i",$secvalue)) ||
74 (preg_match("/<[^>]*object*\"?[^>]*>/i", $secvalue)) ||
75 (preg_match("/<[^>]*iframe*\"?[^>]*>/i", $secvalue)) ||
76 (preg_match("/<[^>]*applet*\"?[^>]*>/i", $secvalue)) ||
77 (preg_match("/<[^>]*meta*\"?[^>]*>/i", $secvalue)) ||
78 (preg_match("/<[^>]*style*\"?[^>]*>/i", $secvalue)) ||
79 (preg_match("/<[^>]*form*\"?[^>]*>/i", $secvalue)) ||
80 (preg_match("/<[^>]*img*\"?[^>]*>/i", $secvalue)) ||
81 (preg_match("/<[^>]*onmouseover*\"?[^>]*>/i", $secvalue)) ||
82 (preg_match("/<[^>]*body*\"?[^>]*>/i", $secvalue)) ||
83 (preg_match("/\"/", $secvalue)) ||
84 (preg_match("/inside_mod/i", $sec_key))) {
85 die ("Operazione non consentita");
86 }
87 }
88
89 foreach ($_POST as $secvalue) {
90 if ((preg_match("/<[^>]*onmouseover*\"?[^>]*>/i", $secvalue)) || (preg_match("/<[^>]script*\"?[^>]*>/i", $secvalue)) || (preg_match("/<[^>]*body*\"?[^>]*>/i", $secvalue)) || (preg_match("/<[^>]style*\"?[^>]*>/i", $secvalue))) {
91 die ('Operazione non consentita');
92 }
93 }
94
95// Posting from other servers in not allowed
96// Fix by Quake
97// Bug found by PeNdEjO
98
99if ($_SERVER['REQUEST_METHOD'] == "POST") {
100 if (isset($_SERVER['HTTP_REFERER'])) {
101 if (!stripos_clone($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) {
102 die('Posting da un altro server non consentito!');
103 }
104 } else {
105# die('<b>Attenzione:</b> il tuo browser non puo inviare gli header HTTP_REFERER al website.<br>'.$_SERVER['HTTP_REFERER']);
106 }
107}
108
109
110
111
112
113
114
115//===================================================================
116session_name('sesadmin');
117#session_start();//MODIFICHE PER GESTIONE SESSIONI
118 // gestione sessione
119$a = session_id();
120if(empty($a)) session_start();
121#echo "SID: ".SID."<br>session_id(): ".session_id()."<br>COOKIE: ".$_COOKIE["PHPSESSID"];
122
123if (file_exists("config.php")){
124 $install="0"; @require_once("config.php");
125}else{
126 $install="1";
127}
128
129# verifica se effettuata la configurazione
130if(empty($dbname) || $install=="1") {
131 die("<html><body><div style=\"text-align:center\"><br /><br /><img src=\"modules/Elezioni/images/logo.jpg\" alt=\"Eleonline\" title=\"Eleonline\"><br /><br /><strong>Sembra che <a href='http://www.eleonline.it' title='Eleonline'>Eleonline</a> non sia stato ancora installato.<br /><br />Puoi procedere <a href='../install/index.php'>cliccando qui</a> per iniziare l'installazione</strong></div></body></html>");
132}
133
134
135
136
137 try{
138 $dbi = new PDO("mysql:host=$dbhost;charset=latin1", $dbuname, $dbpass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
139 $sql = "use $dbname";
140 $dbi->exec($sql);
141 }
142 catch(PDOException $e)
143 {
144 echo $sql . "<br>" . $e->getMessage();
145 }
146
147
148# $dbi=mysql_connect($dbhost, $dbuname, $dbpass) or die("Connessione non riuscita: " . mysql_error());
149# mysql_select_db($dbname)or die("Connessione non riuscita:" . mysql_error());
150## mysql_query("SET NAMES 'utf8'", $dbi);
151//---10/05/2009 gestione consultazione predefinita
152 $sth = $dbi->prepare("select * from ".$prefix."_config");
153 $sth->execute();
154 $row = $sth->fetch(PDO::FETCH_ASSOC);
155 #$row = $sth->fetchAll();
156 $siteistat=$row['siteistat'];
157if (!isset($_SESSION['id_comune'])){
158 $_SESSION['sitename']=$row['sitename'];
159 $_SESSION['siteurl']=$row['siteurl'];
160 $_SESSION['site_logo']=$row['site_logo'];
161 $_SESSION['slogan']=$row['slogan'];
162 $_SESSION['startdate']=$row['startdate'];
163 $_SESSION['adminmail']=$row['adminmail'];
164 if (isset($tema) and $tema=='facebook')
165 $_SESSION['tema']=$row['tema'];
166 else $_SESSION['tema']='default';
167 $_SESSION['foot']=$row['foot'];
168 $_SESSION['lang']=$row['language'];
169 $_SESSION['blocco']=$row['blocco'];
170 $_SESSION['testata']=$row['testata'];
171# $_SESSION['logo']=$row['logo'];
172 $_SESSION['fileout']=$row['fileout'];
173 $_SESSION['copyright']=$row['copyright'];
174 $_SESSION['versione']=$row['versione'];
175 $_SESSION['patch']=$row['patch'];
176 $_SESSION['id_comune']=$row['siteistat'];
177 $_SESSION['multicomune']=$row['multicomune'];
178 $_SESSION['flash']=$row['flash'];
179 $_SESSION['displayerrors']=$row['displayerrors'];
180 $_SESSION['editor']=$row['editor'];
181 $_SESSION['tema_on']=$row['tema_on'];
182 $_SESSION['ed_user']=$row['ed_user'];
183}
184//fine
185if (isset($param['aid'])) {
186 if (strlen($aid)>25 ) { die ("Nome utente troppo lungo: $aid"); }
187 if (!isset($param['id_ses']) or $param['id_ses'] != session_id()) logout();
188 if (strstr( $aid," ")) { die ("Gli spazi non sono ammessi nel nome utente: $aid"); }
189 if (isset($_SESSION['aid'])){
190 logout();//se hai gia' una sessione aperta non puoi postare 'aid'
191 }else{
192
193
194 // $pwd2=$param['pwd'];
195 $mpwd=md5($pwd2);
196
197 // se superUserAdmin
198########
199 $sth = $dbi->prepare("select adminsuper from ".$prefix."_authors where aid='$aid' and pwd='$mpwd'");
200 $sth->execute();
201 $row = $sth->fetch(PDO::FETCH_ASSOC);
202 $adminsuper=$row['adminsuper'];
203 if ($adminsuper==1) $id_comune='0';
204 elseif (is_numeric($param['id_comune']) and intval($param['id_comune'])>0) $id_comune=intval($param['id_comune']);
205 $sth = $dbi->prepare("select counter,admlanguage from ".$prefix."_authors where aid='$aid' and pwd='$mpwd' and id_comune='$id_comune'");
206 $sth->execute();
207 $row = $sth->fetch(PDO::FETCH_ASSOC);
208
209 if ($sth){
210 $esiste=$sth->rowCount();
211 $counter=$row['counter'];
212 $tmplang=$row['admlanguage'];
213 $counter+=1;
214 if(strlen($tmplang)==2) $language=$tmplang;
215 $sth = $dbi->prepare("update ".$prefix."_authors set counter=$counter where aid='$aid' and pwd='$mpwd' and id_comune='$id_comune'");
216 $sth->execute();
217# $row = $sth->fetch(PDO::FETCH_ASSOC);
218
219 if ($esiste==1) {
220# $_SESSION['dbi']=$dbi;
221 $_SESSION['aid']="$aid";
222 $_SESSION['pwd']="$mpwd";
223 $_SESSION['lang']="$language";
224 $_SESSION['id_comune']="$id_comune";
225 $_SESSION['prefix']="soraldo";
226 $_SESSION['remote']=$_SERVER['REMOTE_ADDR'];
227 $_SESSION['bgcolor1']='#ffffff';
228 $_SESSION['bgcolor2']='#c5c5c5'; if (!$op) $op='consultazione';
229 session_regenerate_id();
230 }
231 }
232 }
233}else{
234#$_SESSION['dbi']=$dbi;
235
236}
237if (! isset($_SESSION['lang'])) $_SESSION['lang']=$language;
238$currentlang=strlen($_SESSION['lang'])==2 ? $_SESSION['lang']: $language;
239if (isset($_SESSION['aid']))
240{
241//lettura sessione
242$aid=$_SESSION['aid'];
243#$dbi=$_SESSION['dbi'];
244$prefix=$_SESSION['prefix'];
245$id_comune=$_SESSION['id_comune'];
246if (isset($_GET['id_cons_gen'])) $id_cons_gen=intval($_GET['id_cons_gen']);
247else {
248 $sth = $dbi->prepare("select id_cons_gen from ".$prefix."_ele_cons_comune where preferita='1' and (id_comune='$id_comune' or id_comune=0)");
249 $sth->execute();
250 $row = $sth->fetch(PDO::FETCH_BOTH);
251$id_cons_gen=$row[0];
252}
253$currentlang=$_SESSION['lang'];
254$bgcolor1=$_SESSION['bgcolor1'];
255$bgcolor2=$_SESSION['bgcolor2'];
256$bgcolor1='#e7e7e7';
257$session=$_SESSION['remote'];
258
259$perms=ChiSei($id_cons_gen);
260}
261
262
263/*********************************************************/
264/* Login Function */
265/*********************************************************/
266function ChiSei($id_cons_gen){
267global $dbi;
268
269$aid=$_SESSION['aid'];
270$prefix=$_SESSION['prefix'];
271$pwd=$_SESSION['pwd'];
272$id_comune=$_SESSION['id_comune'];
273
274
275$perms=0;
276$sql="select adminsuper, admincomune, adminop from ".$prefix."_authors where aid='$aid' and pwd='$pwd' and (id_comune='$id_comune' or id_comune=0)";
277$sth = $dbi->prepare("$sql");
278$sth->execute();
279$row = $sth->fetch(PDO::FETCH_BOTH);
280
281$adminsuper=$row[0];
282$admincomune=$row[1];
283$adminop=$row[2];
284
285if (($adminsuper==1 || $admincomune==1 || $adminop==1)) {
286 if ($adminsuper==1)
287 return 256;
288 elseif ($adminop==1){
289 $sth = $dbi->prepare("select permessi from ".$prefix."_ele_operatori where id_cons='0' and aid='$aid' and id_comune='$id_comune'");
290 }elseif ($admincomune==1) {
291 $sth = $dbi->prepare("select id_cons from ".$prefix."_ele_cons_comune where id_comune='$id_comune' and id_cons_gen='$id_cons_gen'");
292 $sth->execute();
293 $row = $sth->fetch(PDO::FETCH_BOTH);
294
295 $id_cons=$row[0];
296 $sth = $dbi->prepare("select permessi from ".$prefix."_ele_operatori where id_cons='$id_cons' and aid='$aid' and id_comune='$id_comune'");
297 }
298
299 $sth->execute();
300 $row = $sth->fetch(PDO::FETCH_BOTH);
301
302 if ($sth->rowCount()==1) $perms=$row[0]; else $perms=0;
303 return $perms;
304} else return 0;
305}
306
307function OpenTable(){
308echo "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"2\" BORDER=\"0\">";
309}
310
311function CloseTable(){
312echo "</table>";
313}
314
315function login() {
316 global $param,$prefix,$dbi,$multicomune,$siteistat,$language,$tema;
317 $lang=strlen($_SESSION['lang'])==2 ? $_SESSION['lang']: $language;
318 if (isset($param['id_comune'])) $id_comune=intval($param['id_comune']);
319 if (!isset($id_comune)) $id_comune=0;
320 session_regenerate_id();
321 $id_ses=session_id();
322#die("test:$tema");
323 //include("modules/Elezioni/language/lang-$lang.php");
324 include ("header.php");
325 echo "<div align=\"middle\"><font class=\"title\"><b>"._GESTIONE."</b></font></center>";
326 echo "<br>"; # method=\"post\"
327 echo "<form name=\"login\" method=\"post\" action=\"admin.php\">"
328 ."<table class=\"table-menu\">"
329 ."<tr><td>"._ADMINID."</td>"
330 ."<td><input type=\"text\" NAME=\"aid\" SIZE=\"20\" MAXLENGTH=\"25\"></td></tr>"
331 ."<tr><td>"._PASSWORD."</td>"
332 ."<td><input type=\"password\" NAME=\"pwd\" SIZE=\"20\" MAXLENGTH=\"18\"></td></tr>"
333 ."<tr><td>";
334 // scelta comune
335 if($multicomune=='1'){
336 echo ""._COMUNE."</td><td>";
337 $row=elenco_comuni();
338 echo "<select name=\"id_comune\">";
339 foreach($row as $comuni)
340 {$id=$comuni[0];$descrizione=$comuni[1];
341 $sel=($id == $id_comune) ? "selected":"";
342 echo "<option value=\"$id\" $sel>$descrizione";
343 }
344 }else{
345 echo "<input type=\"hidden\" name=\"id_comune\" value=\"$siteistat\">";
346 }
347// echo "<input type=\"hidden\" name=\"id_comune\" value=\"$id_comune\">";
348 if(strlen($lang)==2) echo "<input type=\"hidden\" name=\"language\" value=\"$lang\">";
349 echo "</td></tr><tr><td>";
350 echo "<input type=\"hidden\" name=\"id_ses\" value=\"$id_ses\">";
351 echo "<input type=\"submit\" VALUE=\""._OK."\">"
352 ."</td></tr></table>"
353 ."</form></div>";
354
355 include ("footer.php");
356}
357
358function logout()
359{
360/* $lang=$_SESSION['lang'];
361$id_comune=$_SESSION['id_comune'];
362// setcookie ("PHPSESSID", "", time() - 3600);
363 session_cache_expire (0);
364 $_SESSION=array(); //MODIFICHE PER GESTIONE SESSIONI
365 session_unset();
366 session_destroy();
367 Header("Location: admin.php?id_comune=$id_comune&language=$lang");
368*/
369global $siteistat;
370
371$ref="Location: admin.php?";
372if (isset($_SESSION['id_comune']))
373$id_comune=$_SESSION['id_comune'];
374else
375$id_comune=$siteistat;
376$ref=$ref."id_comune=".$id_comune;
377
378if (isset($_SESSION['lang']))
379$ref=$ref."&language=".$_SESSION['lang'];
380
381session_cache_expire (0);
382$_SESSION=array();
383session_unset();
384session_destroy();
385Header($ref);
386
387}
388
389
390#echo "op:".$param['op']." -- aid:".$_SESSION['aid']."remote:".$_SESSION['remote']."REMOTE:".$_SERVER['REMOTE_ADDR'];
391if (isset($param['op'])) get_magic_quotes_gpc() ? $op=$param['op']:$op=addslashes($param['op']); else $op='ele';
392//if (isset($param['op'])) $op=$param['op']; else $op='ele';
393if (isset($_SESSION['aid']) AND $_SESSION['remote']==$_SERVER['REMOTE_ADDR']) {
394switch($op) {
395 case "tipo":
396 include("modules/Elezioni/ele_tipi.php");
397 break;
398 case "constipi":
399 include("modules/Elezioni/ele_consultazionitipi.php");
400 break;
401 case "aggiorna":
402 include("modules/Elezioni/aggiorna.php");
403 break;
404 case "parziali":
405 include("modules/Elezioni/ele_parziali.php");
406 break;
407 case "ele":
408 include("modules/Elezioni/ele.php");
409 break;
410 case "consultazione":
411 include("modules/Elezioni/ele_consultazioni.php");
412 break;
413 case "configurazione":
414 include("modules/Elezioni/ele_configurazione.php");
415 break;
416 case "cons_comuni":
417 include("modules/Elezioni/ele_cons_comuni.php");
418 break;
419 case "confconsiglio":
420 include("modules/Elezioni/ele_confcons.php");
421 break;
422 case "inscomuni":
423 include("modules/Elezioni/ele_comuni.php");
424 break;
425 case "oper_admin":
426 include("modules/Elezioni/ele_operatori.php");
427 break;
428 case "inscollegi":
429 include("modules/Elezioni/ele_collegi.php");
430 break;
431 case "associazioni":
432 include("modules/Elezioni/ele_associazioni.php");
433 break;
434 case "operatori":
435 include("modules/Elezioni/ele_operatori.php");
436 break;
437 case "permessi":
438 include("modules/Elezioni/ele_permessi.php");
439 break;
440 case "circo":
441 include("modules/Elezioni/ele_circo.php");
442 break;
443 case "sede":
444 include("modules/Elezioni/ele_sede.php");
445 break;
446case "sezione":
447 include("modules/Elezioni/ele_sezione.php");
448 break;
449case "gruppo":
450 include("modules/Elezioni/ele_gruppo.php");
451 break;
452case "rec_add_aff":
453 include("modules/Elezioni/ele_affluenze.php");
454 break;
455case "rec_add_mod":
456 include("modules/Elezioni/ele_modelli.php");
457 break;
458case "upgruppo":
459 include("modules/Elezioni/ele_gruppo.php");
460 break;
461case "delimggruppo":
462 include("modules/Elezioni/ele_gruppo.php");
463 break;
464case "lista":
465 include("modules/Elezioni/ele_lista.php");
466 break;
467case "uplista":
468 include("modules/Elezioni/ele_lista.php");
469 break;
470case "delimglista":
471 include("modules/Elezioni/ele_lista.php");
472 break;
473case "candidato":
474 include("modules/Elezioni/ele_candidato.php");
475 break;
476case "upcandidato":
477 include("modules/Elezioni/ele_candidato.php");
478 break;
479case "delimgcandidato":
480 include("modules/Elezioni/ele_candidato.php");
481 break;
482
483case "voti":
484 include("modules/Elezioni/ele_voti.php");
485 break;
486case "sezioni_voti":
487 include("modules/Elezioni/ele_voti.php");
488 break;
489case "rec_voti":
490 include("modules/Elezioni/ele_voti.php");
491 break;
492case "rec_voti_gruppi":
493 include("modules/Elezioni/ele_voti.php");
494 break;
495case "rec_add_votanti":
496 include("modules/Elezioni/ele_voti.php");
497 break;
498case "rec_finale":
499 include("modules/Elezioni/ele_voti.php");
500 break;
501case "controllo_voti":
502 include("modules/Elezioni/controllo_voti.php");
503 break;
504case "controllo_votanti":
505 include("modules/Elezioni/controllo_votanti.php");
506 break;
507case "come":
508 include("modules/Elezioni/ele_come.php");
509 break;
510case "numeri":
511 include("modules/Elezioni/ele_come.php");
512 break;
513case "servizi":
514 include("modules/Elezioni/ele_come.php");
515 break;
516case "link":
517 include("modules/Elezioni/ele_come.php");
518 break;
519case "conf":
520 include("modules/Elezioni/ele_conf.php");
521 break;
522case "stampa":
523 include("modules/Elezioni/ele_stampe.php");
524 break;
525case "cambiopwd":
526 include("modules/Elezioni/ele_pwd.php");
527 break;
528case "eletti":
529 include("modules/Elezioni/ele_eletti.php");
530 break;
531case "foto":
532 include("modules/Elezioni/foto.php");
533 break;
534case "consiglieri":
535 include("modules/Elezioni/ele_consiglieri.php");
536 break;
537case "backup":
538 include("modules/Elezioni/backup.php");
539 break;
540case "restore":
541 include("modules/Elezioni/restore.php");
542 break;
543case "scarica":
544 include("modules/Elezioni/scarica.php");
545 break;
546case "importa":
547 include("modules/Elezioni/importa.php");
548 break;
549case "widget":
550 include("modules/Elezioni/ele_widget.php");
551 break;
552case "riepilogo":
553 include("modules/Elezioni/ele_riepilogo.php");
554 break;
555case "riepilogovoti":
556 include("modules/Elezioni/ele_riepilogovoti.php");
557 break;
558case "logout":
559 logout();
560 break;
561}
562
563}else {
564
565 login();
566
567}
568
569?>
Note: See TracBrowser for help on using the repository browser.