kostenloser Webspace werbefrei: lima-city


Anfälligkeit dieser Funktion

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g****e

    ich geb mal direkt den code:
    //Die URL decoden
    function get_url($v='all') {
        $url = $_SERVER['QUERY_STRING'];
        $cache = explode('&',$url);
        $array = explode('-',$cache[0]);
        if (is_numeric($v)) {
            return $array[$v];
        }
        return $array;
    }


    ich nutz diese funktion jetzt schon echt lange und halte sie eig für nützlich. kurz erklärt was sie soll:
    hinter dem fragezeichen an der PHP datei wird einfach alles ausgelesen, dann wird erwartet dass das eig alles mein querystring is. falls es das nich ist, also auch ein & für getparameter (sollten eig nicht vorkommen, hab ich aber mal für notfälle dagelassen), damit dannach die gets kommen könnnen, aber den hauptsting nich beirren.
    dann das ganze am - aufsplitten und man hat viele viele stichwörter die man verwenden kann. entweder man lässt sich alles ausgeben (gibt man nichts ein dann is v ja kein numeric, also alles) oder eben eine zahl (das $v element). ich weiß da is nochn fehler drin, gibt man ne 100 ein ist das ganze leer, aber hab ich bisjetzt eig nur als positiv aufgefangen.
    jetzt mein gedankengang, wieso so:
    - übersicht (moderewrite bringt das gleiche, nur gibts server dies nich zulassen)
    - super easy einfach zu nutzen
    - eingabe werte sind nicht decodiert, also sind zeichen wie " ' und kA was noch alles garnicht möglich, außer ich decodiere sie von hand wenn ichs brauche (so denk ich mal kann man sicherheit schaffen?)
    - keine ahnung was noch xD irgendwo hat mir das jemand mal so erklärt, dass man diese querystrings so praktisch nutzen kann. ich finds praktisch und nutz es gern, nur meine frage nun: funktioniert die wirklich so wie ich will? oder tut sich genau hiermit eine angreiferlücke auf?
    also hilft es den kram nicht decodiert zu haben? tun sich da neue lücken auf? wirkt es gefahren oder irgendwelche probleme die ich noch übersehn habe?

    wäre cool wenn ich mal ein paar profimeinungen dazu höre =) ihr habt so ziehmlich sehr viel mehr ahnung als ich^^
    danke schonmal im vorraus =)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. ehrlich gesagt erschlisst sich mir nicht so sehr der Sinn der ganzen Sache;
    1.) was hat das mit mod_rewrite zu tun?
    2.) wenn du schon mit parametern arbeitest, warum dann nicht nach dem schema ?param1=xyz&param2=abc, denn alles was deine Funktion tut ist einen einfachen Sachverhalt unnötig kompliziert zu machen, das will ich mit einem Beispiel zeigen, einmal deine Idee:
    Die Anfrageadresse: http://example.com?kopf-koerper-arm1---bein2&weiter_parameter=vielleicht
    if(get_url(1)){echo "Der Kopf wurde angefragt.";}
    if(get_url(2)){echo "Der Koerper wurde angefragt.";}
    if(get_url(3)){echo "Der 1. Arm wurde angefragt.";}
    if(get_url(4)){echo "Der 2. Arm wurde angefragt.";}
    if(get_url(5)){echo "Das 1. Bein wurde angefragt.";}
    if(get_url(6)){echo "Das 2. Bein wurde angefragt.";}
    Das tolle ist nur, das man das auch viel leichter machen kann, dazu bau ich die Adresse mal etwas um:
    Die neue Anfrageadresse http://example.com?kopf&koerper&arm1&bein2&weiter_parameter=vielleicht
    if(isset($_GET['kopf'])){echo "Der Kopf wurde angefragt.";}
    if(isset($_GET['koerper'])){echo "Der Koerper wurde angefragt.";}
    if(isset($_GET['arm1'])){echo "Der 1. Arm wurde angefragt.";}
    if(isset($_GET['ram2'])){echo "Der 2. Arm wurde angefragt.";}
    if(isset($_GET['bein1'])){echo "Das 1. Bein wurde angefragt.";}
    if(isset($_GET['bein2'])){echo "Das 2. Bein wurde angefragt.";}

    Wie gesagt, ich versteh den Sinn der Funktion nicht wirklich, das was du damit machen willst gibt es schon und zwar einfacher.

    Außerdem das ausgerechnet die 100 nicht funktionierte ist Zufall, den ein URI sollte aus Kompatibilitätsgründen nie länger als 255 Byte werden, wenn man bedenkt das da schon ein ganzer teil bei der Adresse flöten geht, dann hat man nicht mehr viel, alleine bei http://www.lima-city.de/ gehen schon 24 Byte weg, du siehst, das geht schnell.
  4. Wie auch nehmoinho entgeht mir der Sinn.

    Aber unabhaengig davon ist deine Funktion nicht ganz sauber geschrieben. Wenn ich jetzt $v = 100 angebe, dann wuerde ich wahrscheinlich ein Notice bekommen. Ist das gewollt oder nicht?

    function get_url($v = null) {
        $cache = explode('&', $_SERVER['QUERY_STRING']);
        $array = explode('-',$cache[0]);
        if ($v === null) {
            return $array;
        }
    
        if (isset($array[$v])) {
            return $array[$v];
        }
    
        return ''; // not found
    }
  5. Autor dieses Themas

    g****e

    stimmt nikic, das hab ich voll verpeilt xD

    der sinn ist oben beschrieben:
    get ist ein parameter den ich persönlich nicht gern habe. desweiteren muss man get-inhalte erst verifizieren. sprich schreib jemand in die url rein: ?f="machwas" dann hab ich diese dummen " auch drin, muss also erst prüfen ob sie drinne sind, und kann dann erst damit arbeiten. hab ich ?"machirgendwas" dann sind die " wegen dem url format doch garnichterst als diese zu erkennen, sondern ergeben nur einen %XX wert. kann man jetzt sagen "musste auch erst prüfen", kla muss man das in gewissen fällen auch, nur kann man so doch evtl sogar mal ne prüfung übersehn (ich bin auch nur n noob, ich vergesse und übersehe immer wieder mal was) ohne dass direkt ein großes malör passieren kann. oder irre ich in dem punkt? natürlich gibt es $_GET, und ist auch was feines, nur find ich ein bischen weitläufig wegen diesem autodecoden usw. wenn ich das bei mir brauche dann könnte man auch "url_decode" nutzen (was dan wieder für get sprechen würde, da wäre es schon drin xD).

    und zum modrewrite, wenn du dir mal anschaust kannste des - auch durch dein schönes / ersetzen, und schon haste deine url in form von: meinedomain.de/?value/value2/value3 , was dann recht nahe einem rewrite kommt, obwohl manch ein hoster es garnicht unterstützt. ich weiß dass der engine das ganze eig nur in get parameter umschreibt, aber die übersicht die zu erreichen ist kann man mit beidem hinkriegen.

    ich hab das ganze eben wie gesagt von anderen projekten wo man mir dies mit der url sicherheit so erklärt hat, allerdings bin ich mir da halt nich so sicher und wollt hier mal die profis dannach fragen. es sei dafür "dass auch neueinsteiger module schreiben können ohne groß risiko zu gehn dass er damit eine potenzielle angriffslücke schafft".

    beim sinn aufn ersten blick sage ich auch: gibt doch schon get, rad muss nich neu erfunden werden. nur hat mich dieser zusatzeffekt, und dazu diese einfachheit und übersicht einfach fasziniert (die funktion ist von mir selbst, nur die idee dahinter).
    darum: bringt es das was es soll? kann man sich auf sowas verlassen, oder zumindest stützen?
  6. hm, ich arbeite zwar nie mit dem get, sondern mit dem $_POST, deswegen stellt sich bei mir nicht so eine Frage... aber ganz ehrlich: die funktion ist unnütz...das $_GET['Param'] reicht dafür aus.

    was du damit bewerkstelligen willst, weiß ich zwar nciht, aber du wirst es mir sicher erklären können:

    function get_url($v='all')


    Dein Code würde dann ganz einfach so aussehen:

    $s_zeile = $_GET['stichwortkette'];
    $a_URLParameter=  explode('-', $s_zeile);


    das Ding einfach an den anfang deiner index.php stellen, oder der betreffenden startseite, wo du die anderne phps includest und dann passt das... das $a_URLParameter ist dann dein Rückgabe-Array, wo die Stichworte drin stehen.

    und um das weiterhin als Modul zu haben, kannst du die Zeile ja in eine extra-PHP packen und in jedem seitenaufruf als require_once einzubinden...

    WelchenVorteil dir dieser Aufruf bringen soll, weiß ich ehrlich nicht...

    lang, umständlich und kein wirklich nutzbarer Effekt, aus meiner Sicht... das einzige Problm hast du, wenn das & verwendet wird, dann musst du unterscheiden, ob es ein neuer Parameter ist oder einfach nur ein zeichen innerhalb einer Zeichenkette... im Notfall wird dann ab dem 2. & zeichen nichts mehr ausgewertet... dann musst du dir was ausdenken, wie du beim abschicken dieses & schon entwertest...


    Sicherheitslücken ergeben sich dann erst dort, wo du die Array-Elemente verwenden willst. Stichwort. Cross-Site-Scripting (XSS)

  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!