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_grd.php

    r376 r399  
    11<?php 
    2 /*      Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil Grundbuch-Suche  
    3         Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 
    4  
     2/*      Navigation mit ALKIS-Daten im Mapbender 2 - Teil Grundbuch-Suche  
     3        Datenbank-Struktur aus dem norGIS-ALKIS-Importer. 
    54Version vom 
    65        2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet. 
    76        2016-03-02 $gemeinde auf feste LÀnge korrigieren 
    87        2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen 
     8        2018-02-15 Strikte Input-Validation der Parameter 
    99*/ 
    1010 
    11 // Variable initialisieren 
    12 $ag=""; 
    13 $gbkennz=""; 
    14 $buchunggml=""; 
    15 $blattgml=""; 
    16  
    1711$cntget = extract($_GET); 
    18 $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÀr .. 
     12 
     13// Input-Validation 
     14// Parameter aus Konfiguration oder Links sollten keine "Eingabefehler" enthalten. 
     15// Entweder falsche Konfiguration oder Hack. Programm sofort abbrechen. 
     16if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} // Mandant, muss! Formularfeld hidden 
     17 
     18if(isset($epsg)) { // SRS, Formularfeld hidden 
     19        if (preg_match('#^EPSG:[0-9]{4,5}$#', $epsg)) { // Prefix aus MB-Mapframe 
     20                $epsg = str_replace("EPSG:", "" , $epsg); 
     21        } elseif (!preg_match('#^[0-9]{4,5}$#', $epsg)) { // nur die Nummer 
     22                die("Eingabefehler epsg"); 
     23        } 
     24} else { // Nichts ÃŒbergeben 
     25        $epsg=$gui_epsg; // dann default aus Conf 
     26} 
     27 
     28// Filter-Parameter fÃŒr Gemeindenummer in Kreis-Datenbank aus der Mapbender GUI-Konfiguration, Formularfeld hidden 
     29if (isset($gemeinde) AND trim($gemeinde, '0') != "") { 
     30        if (!preg_match('#^[0-9]{1,3}$#', $gemeinde)) {die("Eingabefehler Gemeinde");} 
     31        $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); 
     32        if(strpos($gemeinde, ",") === false) { 
     33                $gfilter = 1; // Einzelwert 
     34        } else { 
     35                $gfilter = 2; // Liste 
     36        } 
     37} else { // Kein Filter 
     38        $gemeinde = ""; 
     39        $gfilter = 0; 
     40} 
     41 
     42// Optionale Parameter. Links aus der Baumstruktur. Wenn nicht gesetzt, dann die Variable initialisieren. 
     43if (isset($ag) and $ag != "" ) { // Amtsgericht-Nummer 
     44        if (!preg_match('#^[0-9]{4}$#', $ag)) {die("Eingabefehler Amtsgericht");} 
     45} else { 
     46        $ag=""; 
     47} 
     48if (isset($buchunggml) and $buchunggml != "" ) { 
     49        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $buchunggml)) {die("Eingabefehler GML-ID Buchung");} 
     50} else { 
     51        $buchunggml=""; 
     52} 
     53if (isset($blattgml) and $blattgml != "" ) { 
     54        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $blattgml)) {die("Eingabefehler GML-ID Blatt");} 
     55} else { 
     56        $blattgml=""; 
     57} 
     58if (isset($gbbeznam) and $gbbeznam != "" ) { 
     59        if (!preg_match('#^[a-zA-ZÀÌöÄÜÖß12 -]{3,40}$#', $gbbeznam)) {die("Eingabefehler Grundbuch-Bezirks-Name '".$gbbeznam."'");} 
     60} else { 
     61        $gbbeznam=""; 
     62} 
     63 
    1964include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen 
    2065include("alkisnav_fkt.php"); // Funktionen 
     
    59104        $linelimit=40; 
    60105 
    61         $sql ="SELECT stelle, bezeichnung AS ag FROM ax_dienststelle  
    62         WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL  
    63         ORDER BY bezeichnung LIMIT $1 ;"; 
     106        $sql="SELECT stelle, bezeichnung AS ag FROM ax_dienststelle " 
     107        ."WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL ORDER BY bezeichnung LIMIT $1 ;"; 
    64108        $res = pg_prepare("", $sql); 
    65109        $res = pg_execute("", array($linelimit)); 
     
    99143        // Body 
    100144        // Die Subquery stellt sicher, dass nur Bezirke aufgelistet werden, die auch BlÀtter enthalten 
    101         $sql ="SELECT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g  
    102         JOIN ax_dienststelle a ON g.stelle=a.stelle  
    103         WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL  
    104         AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL  
    105         ORDER BY g.bezeichnung LIMIT $2 ;"; 
     145        $sql ="SELECT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g JOIN ax_dienststelle a ON g.stelle=a.stelle " 
     146        ."WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL " 
     147        ."AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL " 
     148        ."ORDER BY g.bezeichnung LIMIT $2 ;"; 
    106149 
    107150        $v = array($agkey, $linelimit); 
     
    135178        // Parameter = SchlÃŒssel des Bezirks 
    136179        #global $debug; 
    137         $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g  
    138         JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;"; 
     180        $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g " 
     181        ."JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;"; 
    139182        $v=array($gbbez); 
    140183        $res=pg_prepare("", $sql); 
     
    166209        $linelimit=80; 
    167210 
    168         $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g  
    169         JOIN ax_dienststelle a ON g.stelle=a.stelle  
    170         WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL  
    171         ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;";// "AND a.stellenart=1000 " Amtsgericht 
     211        $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g " 
     212        ."JOIN ax_dienststelle a ON g.stelle=a.stelle " 
     213        ."WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL " 
     214        ."ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;"; // "AND a.stellenart=1000 " Amtsgericht 
    172215        if ( $gbkennz == "") { 
    173216                $match = "%"; 
     
    175218                if(preg_match("/\*/",$gbkennz)){ 
    176219                        $match = trim(preg_replace("/\*/i","%", strtoupper($gbkennz))); 
     220                        if (substr($match, strlen($match), 1) != "%") {$match.="%";} // Wildcard am Ende obligatorisch 
    177221                } else { 
    178222                        $match = trim($gbkennz)."%"; 
     
    227271        } 
    228272        // Body 
    229         $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b  
    230         WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;"; 
     273        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b " 
     274        ."WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;"; 
    231275        $v=array($zgbbez, $linelimit); 
    232276        $res=pg_prepare("", $sql); 
     
    251295                echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>"; 
    252296                // Vorbelegen des Eingabefeldes fÃŒr neue Suche 
    253                 echo "<script type='text/javascript'>parent.GrdGazetteerFrame.gbkennz.value='".$zgbbez."-?';</script>"; 
     297                echo "<script type='text/javascript'>parent.GrdGazetteerFrame.gbkennz.value='".$zgbbez."-';</script>"; 
    254298        } elseif ($cntbl > 1) { 
    255299                echo "\n<p class='anz'>".$cntbl." Bl&auml;tter</p>"; // im Limit         
     
    261305        // Kennzeichen "Bezirk + Blatt" eingegeben. Dazu die gml_id des Blattes ermitteln. 
    262306        global $debug, $zgbbez, $zblatt, $zblattn, $zblattz; 
    263         $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b  
    264         WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; 
     307        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b " 
     308        ."WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; 
    265309 
    266310        if ($zblattz == "") { // Ohne Buchstabenerweiterung: Formate '123','000123 ','0000123' 
     
    310354 
    311355        // Blatt ->  B u c h u n g s s t e l l e 
    312         $sql ="SELECT s.gml_id FROM ax_buchungsstelle s  
    313         JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id 
    314         WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; 
     356        $sql ="SELECT s.gml_id FROM ax_buchungsstelle s " 
     357        ."JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id " 
     358        ."WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung "; 
    315359 
    316360        if ($zblattz == "") { // Ohne Buchstabenerweiterung 
     
    425469        // Recht "an" (dienende Buchungen und ihre Flurst.) 
    426470 
    427 $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd,  
    428 bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt,  
    429 gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez  
    430 FROM ax_buchungsstelle sh  
    431 JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an)  
    432 JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id  
    433 JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer  
    434 JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id  
    435 JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk  
    436 WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL " 
    437  
    438 .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; 
     471        $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, " 
     472        ."gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez " 
     473        ."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) " 
     474        ."JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id " 
     475        ."JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer " 
     476        ."JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id " 
     477        ."JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk " 
     478        ."WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL " 
     479 
     480        .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; 
    439481 
    440482        $v=array($buchunggml); 
     
    496538// Start hier! 
    497539// =========== 
    498 if(isset($epsg)) { 
    499         $epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);    
     540 
     541// Validation: Eingabefeld aus Formular. 
     542// Suchbegriff (Bezirksname) oder Grundbuch-Kennzeichen gggg-999999z-BVNR (17). 
     543// Hier formatierte Meldung und html-Foot. 
     544if (isset($gbkennz) and $gbkennz != "" ) {  
     545        if (!preg_match('#^[0-9a-zA-ZÀöÌÄÖÜß* -]{1,25}$#', $gbkennz)) { 
     546                echo "<p class='err'>Eingabe unzul&auml;ssig!</p>"; 
     547                $gbkennz=""; 
     548        } 
    500549} else { 
    501         $epsg=$gui_epsg; // aus Conf 
    502 } 
    503  
    504 // Filter aus Conf-Datei 
    505 if ($gemeinde == "") { 
    506         $gfilter = 0; // ungefiltert 
    507 } elseif(strpos($gemeinde, ",") === false) { 
    508         $gfilter = 1; // Einzelwert 
    509 } else { 
    510         $gfilter = 2; // Liste 
    511 //      $gemeinde = "'".str_replace(",", "','", $gemeinde)."'"; // Jedes Element in '' 
     550        $gbkennz=""; 
    512551} 
    513552 
Note: See TracChangeset for help on using the changeset viewer.