sicherheitsaspekte in der security.php

  • Zitat

    Original von DodCom
    yoo..hast ne pn

    ich hab aber die pro version


    So wie es aussieht, ist dieser Fehler auch in der Pro-Version.

  • ja, scheint aber mit gewissen einstellungen zusammen zu hängen,

    weil bei euch kommt sowieso jede Referer adresse ohne block durch?! oder nur weil ich eingelogged bin (trusted user?!)

    ka, wie gesagt, ich spreche für die / von der basic...

    mfG
    Zagon

    Einmal editiert, zuletzt von zagon (24. August 2005 um 16:48)

  • weil dodcom freundlich nach einer lösung gebeten hat, hab ich ihm eine "NOTlösung" geschickt, die klappt...
    (es ist somit auch ein fix für die $bedingung die bisher ohne weitere maßnahmen in die datenbank gesandt wurde. (addslashes udgl...))

    es ist in der security.php des boardroots zu suchen:

    PHP
    $request = $_REQUEST;
    foreach ($request as $key => $temp) {
      if (isset($_REQUEST[$key])) $$key = $_REQUEST[$key];
    }

    und ausnahmslos durch das zu ersetzen:

    PHP
    $_disabled = array('_POST', '_GET', '_SERVER', '_COOKIE', '_REQUEST', '_FILE', 'securityconfig', 'bedingung');
    
    
    foreach ($_REQUEST as $key => $temp) {
      if (isset($_REQUEST[$key]) AND !in_array($key, $_disabled)) $$key = $_REQUEST[$key];
    }

    diesen programmierstiel gewöhnt man sich eher ab.


    mfG
    Zagon
    PS: geht mit der basic 2.0.0 und der jetzt aktuellen pro. (2.0.1 ??)

    Einmal editiert, zuletzt von zagon (24. August 2005 um 17:36)

  • ja...läuft auch auf der 2.0.1

    wurde auch getestet...erfolgreich

    ich persönlich kann dazu nur sagen.......arbeitet mehr zusammen.....das gilt auch mal für earlyhost

    ich denke hier meint es einer gut......auch wenns für den coder nicht so rüberkommt

    teamwork ist das a und o

  • earlyhost wird schon auf Leute eingehen, die ihm kompetent erscheinen und mit ihm zusammen arbeiten können.
    Da dies kein Fix von uns ist, gewähre ich keine Sicherheit, dass er funktioniert. Laut DodCom sollte er aber problemlos funktionieren.

  • >>gewähre ich keine Sicherheit

    die gewähre ich bei den standard systemen auch nicht :D (nicht mehr, nachdem was ich sehe)
    ... wo ich trotz ip sperre in dodcoms forum surfen konnte durch diese lücke.

    >>earlyhost wird schon auf Leute eingehen, die ihm kompetent erscheinen
    keine sorge, ich erwarte mir nichts. zeitmangel etc.


    aber wenn ein tool schon security heißt, soll es die auch bieten. wenn mir was auffällt, werd ichs doch posten dürfen, oder wollt ihr das nicht. kanns auch einstellen :)

    mfG
    Zagon

    Einmal editiert, zuletzt von zagon (24. August 2005 um 18:03)

  • Zitat

    Original von DodCom
    also ich fand es nicht toll das zagon mit meinem nick im forum herumgesurft ist

    da bin ich froh....das er nur ne lücke aufgedeckt hat :]

    das war nicht dein nick.
    dazu hätte ich deinen password hash gebraucht.
    um das gings auch nicht, sondern darum, mit fremden scripten am forum zu spielen (flooden, regflooding etc..., im ungepatchten forum per script nach dem admin pwt hash zu suchen etc...).

    mal wertefrei, der programmierstil erinnert an einen anfänger (hm, ne net so arg) eher leicht fortgeschrittenen, da dachte ich, ein paar tipps kommen schon nicht in die falsche kehle... ich will um gottes willen niemanden beleidigen oder schulmeistern!!!

    :) grüße
    Zagon

    Einmal editiert, zuletzt von zagon (24. August 2005 um 18:10)

    • Offizieller Beitrag

    Wie soll ich das in keine Falsche Kehle kriegen.... Mich als Codingnoob zu bezeichnen ist nicht gerade nett (nett ausgedürckt). Klar jeder macht Fehler und du bist auch nciht gerade perfekt!

    Ich möchte was zu deiner durchaus guten Zeile sagen:

    PHP
    $_disabled = array('_POST', '_GET', '_SERVER', '_COOKIE', '_REQUEST', '_FILE', 'securityconfig', 'bedingung');
    
    
    foreach ($_REQUEST as $key => $temp) {
      if (isset($_REQUEST[$key]) AND !in_array($key, $_disabled)) $$key = $_REQUEST[$key];
    }

    Was ist aber, wenn die $_POST gewollt ist? Dann wird sie nicht definiert außer in den Zeilen von Woltlab.. Es gibt ja andere Variablen.. Wenn das sperrst, macht das keinen Sinn?!

  • earlyhost,

    >>ist nicht gerade nett (nett ausgedürckt)

    ja das dacht ich mir, aber nochmal, es ist absolut nicht böse gemeint!


    zu den Variabeln.

    ich übergebe bei einem Link im query eine variabel...

    URL.de/index.php?_POST[conf]=2

    zB...

    nun, dieses _POST ist so wie jedes query als _REQUEST (ein array) index (array-key) zu finden.

    $_REQUEST[_POST][conf] = 2 sollte es heißen.

    nun, wenn du durch dieses request läufst - bei dir mittels foreach - und dann jeden array index als variabelnamen anlegst... dann hast du quasi eine "junk" $_POST variabel angelegt.

    und da beginnt der fehler.

    PHP
    foreach($_REQUEST as $key => $val)
    {
     if (isSet ($_REQUEST[$key])) $$key = $_REQUEST[$key];
     // wenn hier nun der erste key _POST ist...
     // dann gilt:
     // if (isSet ($_REQUEST[_POST])) $_POST = $_REQUEST[_POST][conf];
     // -> unfeine geschichte, weil wir jetzt ohne per POST datenübertragung eine POST superglobale angelegt haben.
    }


    wie du nun siehst, hat dieses _POST nichts mit einem per zB Formular mit method="POST" übergeben zu tun... ist aber dann später im PHP durch das script doch das gleiche.

    hier 2 testscripts:
    das erste zeigt die art und weise, wie du es im script hattest...
    also das zerlegen der _REQUEST Superglobal und das anlegen der einzelnen keys als variabel...
    http://www.zagon.at/test/globals2_.php

    und hier nun das script mit dem gefilterten _REQUEST.
    http://www.zagon.at/test/globals_.php


    siehst du was ich meine? die normale $_POST variabel geht durch den filter, eh klar.

    wieso meinst du stellt man sich die register_globals auf off?
    du machst mit den paar zeilen aus einem server mit register_globals off, einen mit on.

    deswegen besteht auch die möglichkeit, $securityconfig[scriptblocker] zu erstellen, weil du die $securityconfig noch vor der foreach schleife in der global.php aus der Datenbank ausliest und erstellt.
    ich überschreibs dann einfach per URL-Query...


    also, sry, ich wollte dich nicht beleidigen! ich hab dir schon etwa 4 mal geschrieben, dass ich deine arbeit bewundere, weil du als firmenfremde person für die sicherheit einer software beitragen möchtest.

    mfG
    Zagon


    PS:
    >>Klar jeder macht Fehler und du bist auch nciht gerade perfekt!

    um gottes willen, ich will auch nicht perfekt sein und bins auch nicht - zum glück, denn auch ich bin ein mensch.

  • also ich hatte das eingebaut... bekomme dann aber mit dem arcadehack von webdynamic probleme, da überträgts die highscores nicht mehr. ;(

    gibts auch ne lösung, wo das dann noch funktioniert? ?(

    hab die änderung erstmal wieder rückgängig gemacht...