Ignore:
Timestamp:
02/15/18 17:46:51 (6 years ago)
Author:
frank.jaeger
Message:

ALKIS-Navigation für Mapbender 2: Input Validation für alle Parameter. Kleine Korrekturen.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mapbender/http/nav/alkisnav_fls.php

    r376 r399  
    11<?php 
    2 /*      Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil FlurstÃŒck-Suche  
    3         Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 
    4  
    5 Hinweis: In der Mapbender-Konfiguration muss die Gemeindenummer nun 3stellig mit fÃŒhrenden 0 angegeben sein.  
    6  
     2/*      Navigation mit ALKIS-Daten im Mapbender 2 - Teil FlurstÃŒck-Suche  
     3        Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 
    74Version vom 
    85        2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet. 
    96        2016-03-02 $gemeinde auf feste LÀnge korrigieren 
    107        2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen 
     8        2017-03-06 Korrektur: Gemeinde-Suche bei Kreis-DB in norGIS-Struktur 
     9        2018-02-15 Strikte Input-Validation der Parameter 
    1110*/ 
    1211 
    13 // Variable initialisieren 
    14 $hist="n"; 
    15 $gm=""; 
    16  
    1712$cntget = extract($_GET); 
    18 $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÀr bei Umstellung auf norGIS, besser im Mapbender 3stellig konfigurieren. 
     13 
     14// Input-Validation 
     15// Parameter aus Konfiguration oder Links sollten keine "Eingabefehler" enthalten. 
     16// Entweder falsche Konfiguration oder Hack. Programm sofort abbrechen. 
     17if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} // Mandant, muss! 
     18 
     19if(isset($epsg)) { // SRS, kann. Wenn als Parameter ... 
     20        if (preg_match('#^EPSG:[0-9]{4,5}$#', $epsg)) { // Prefix aus MB-Mapframe 
     21                $epsg = str_replace("EPSG:", "" , $epsg); 
     22        } elseif (!preg_match('#^[0-9]{4,5}$#', $epsg)) { // nur die Nummer 
     23                die("Eingabefehler epsg"); 
     24        } 
     25} else { // Nichts ÃŒbergeben 
     26        $epsg=$gui_epsg; // dann default aus Conf 
     27} 
     28 
     29// Filter-Parameter fÃŒr Gemeindenummer in Kreis-Datenbank aus der Mapbender GUI-Konfiguration 
     30if (isset($gemeinde) AND trim($gemeinde, '0') != "") { 
     31        if (!preg_match('#^[0-9]{1,3}$#', $gemeinde)) {die("Eingabefehler Gemeinde");} 
     32        $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); 
     33        if(strpos($gemeinde, ",") === false) { 
     34                $gfilter = 1; // Einzelwert 
     35        } else { 
     36                $gfilter = 2; // Liste 
     37        } 
     38} else { // Kein Filter 
     39        $gemeinde = ""; 
     40        $gfilter = 0; 
     41} 
     42 
     43// Suche nach historischen FS 
     44if(isset($hist)) { // Wenn ÃŒbergeben 
     45        if (!preg_match('#^[jn]{1}$#', $hist)) {die("Eingabefehler hist");} // Ja/Nein 
     46        if ($hist == "j") { 
     47                $phist = true; // als Boolean 
     48        } else { 
     49                $phist = false; 
     50        } 
     51} else { // Nichts ÃŒbergeben 
     52        $phist = false; // default = aktuelle FS 
     53} 
     54 
     55// Gemeinde-Nummer als Link aus der Baumstruktur 
     56if (isset($gm) ) { 
     57        if (!preg_match('#^[0-9]{8}$#', $gm)) {die("Eingabefehler gm");} 
     58} else { 
     59        $gm=""; // Var. init. 
     60} 
     61 
    1962include("../../conf/alkisnav_conf.php"); 
    2063include("alkisnav_fkt.php"); // Funktionen 
     
    252295        switch ($gfilter) { 
    253296                case 1: // Einzelwert 
    254                         $sql.="WHERE substring(gemshl from 6 for 3) = '".$gemeinde."' "; break; 
     297                        $sql.="WHERE substring(gemshl from 6 for 3) = '".$gemeinde."' "; 
     298                        break; 
    255299                case 2: // Liste 
    256                         $sql.="WHERE substring(gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; break; 
     300                        $sql.="WHERE substring(gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; 
     301                        break; 
    257302                default: break; 
    258303        } 
    259         $sql.=" AND endet IS NULL ORDER BY gemname LIMIT $1 ;"; 
     304        $sql.="ORDER BY gemname LIMIT $1 ;"; 
    260305        $res=pg_prepare("", $sql); 
    261306        $res=pg_execute("", array($linelimit)); 
     
    269314                $gnr=$row["gemshl"]; 
    270315                $gemeindename=$row["gemname"]; 
    271                 zeile_gemeinde($gnr, $gemeindename); 
     316                zeile_gemeinde($gnr, $gemeindename, false); 
    272317                $cnt++; 
    273318        } 
     
    327372        if(preg_match("/\*/",$fskennz)){ 
    328373                $match = trim(preg_replace("/\*/i","%", strtoupper($fskennz))); 
     374                // Durchsuchte Namenspalte ist rechts mit Leerstellen aufgefÃŒllt. Darum Wildcard am Ende erzwingen. 
     375                if (substr($match, strlen($match), 1) != "%") {$match.="%";} 
    329376        } else { 
    330377                $match = trim($fskennz)."%"; 
     
    333380        // Pass auf! GemeindeschlÃŒssel ist in den beiden SchlÃŒsseltabellen linksbÃŒndig gefÃŒllt, 
    334381        // aber unterschiedlich lang hinten mit Leerstellen aufgefÃŒllt. 
    335         $sql ="SELECT substring(g.gemshl from 1 for 8) AS gemshl, g.gemashl, trim(trailing from g.gemarkung) AS gemarkung, trim(trailing from s.gemname) AS gemname  
    336         FROM gema_shl g JOIN gem_shl s ON substring(g.gemshl from 1 for 8) = substring(s.gemshl from 1 for 8) WHERE g.gemarkung ILIKE $1 "; 
     382        $sql ="SELECT substring(g.gemshl from 1 for 8) AS gemshl, g.gemashl, trim(trailing from g.gemarkung) AS gemarkung, trim(trailing from s.gemname) AS gemname " 
     383        ."FROM gema_shl g JOIN gem_shl s ON substring(g.gemshl from 1 for 8) = substring(s.gemshl from 1 for 8) WHERE g.gemarkung ILIKE $1 "; 
    337384 
    338385        switch ($gfilter) { 
     
    735782// Start hier! 
    736783// =========== 
    737 if(isset($epsg)) { 
    738         $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);    
     784if ($debug >= 1) {echo "\n<p class='dbg'>gemeinde='".$gemeinde."'. gfilter='".$gfilter."'</p>";} 
     785 
     786// Validation: Eingabefeld aus Formular. 
     787// Suchbegriff (Gemarkungsname) oder FlurstÃŒcks-Kennzeichen (ll)gggg-fff-zzzz/nnn (11). 
     788// Hier formatierte Meldung und html-Foot. 
     789if (isset($fskennz) and $fskennz != "" ) { 
     790        if (!preg_match('#^[0-9a-zA-ZÀöÌÄÖÜß* -]{1,25}$#', $fskennz)) { 
     791                echo "<p class='err'>Eingabe unzul&auml;ssig!</p>"; 
     792                $fskennz=""; 
     793        } 
    739794} else { 
    740         #if ($debug >= 1) {echo "\n<p class='dbg'>kein EPSG gesetzt</p>";}       
    741         $epsg=$gui_epsg; // Conf 
    742 } 
    743  
    744 // Filter aus Mapbender-GUI-Einbindung 
    745 if ($gemeinde == "") { 
    746         $gfilter = 0; 
    747 } elseif(strpos($gemeinde, ",") === false) { 
    748         $gfilter = 1; // Einzelwert 
    749 } else { 
    750         $gfilter = 2; // Liste 
    751 } 
    752 if ($hist == "j") {$phist = true;} else {$phist = false;} 
    753  
     795        $fskennz=""; 
     796} 
     797         
    754798if($gm != "") { // Self-Link aus Gemeinde-Liste 
    755799        $trans="Gemarkungen zur Gemeinde"; 
     
    821865} 
    822866 
    823 // Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion  
    824 // im Kopf des Ergebnisrahmens anzeigen. 
     867// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion im Kopf des Ergebnisrahmens anzeigen. 
    825868// Dazu die im HTML-Header definierte Javascript-Function benutzen. 
    826869// Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt. 
     
    829872        transtitle('".$trans."');  
    830873</script>"; 
    831  
    832874?> 
    833875 
Note: See TracChangeset for help on using the changeset viewer.