[PHP] API Calls vereinfachen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Du kannst doch einfach aus jedem Mode ein eigenes php Script machen und dann einfach einen href machen zu dem Script. Das hat auch den großen Vorteil, dass deine php sourcen kurz und übersichtlich bleiben.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • @zerm: Wo steht was von eval ? :)

    @Rosi: Du kannst zb. die GET_Variable abfragen wie: if ($_GET["mode"] == "bla"){ ... } else if ($_GET["mode"] == "blubb") { .... } else { ... }

    du musst natürlich je nach Aufruf der URL eine variable anhängen wie deine.url/pfad.php?mode=bla
    _____________________________
    Alle Angaben ohne Gewähr :)

    On the internet you can be anything you want. It's strange that so many people choose to be stupid.


    Superbientem animus prosternet
  • Alex schrieb:

    @zerm: Wo steht was von eval ? :)

    @Rosi: Du kannst zb. die GET_Variable abfragen wie: if ($_GET["mode"] == "bla"){ ... } else if ($_GET["mode"] == "blubb") { .... } else { ... }

    du musst natürlich je nach Aufruf der URL eine variable anhängen wie deine.url/pfad.php?mode=bla


    Ich habe das so verstanden das das ja gerade sein Problem ist, dass er bei mitlerweile 80 modes ein unübersichtliches if Else Konstrukt hat. Deshalb mein Vorschlag einfach aus dem GET eine neue URL zu basteln die dann für jeden Mode ein anderes php script aufruft. Das schafft Übersichtlichkeit

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • sagen wir

    mode = 'sterben'
    param1 = 'a'
    param2 = 'b'

    dann machst du


    eval "sterben('a','b')"

    alles super. jetzt kommt aber

    mode = 'sterben'
    param1 ' a'
    param2 = "'b'); eineKritischeFunktion("

    dann hast du

    eval "sterben('a','b'); eineKritischeFunktion()"

    und schon kann ein Angreifer ziemlich beliebig irgendwas ausführen

    kannst das ganze natürlich escapen etc, aber generell hat eval halt gefahrenpotential das bedacht werden muss
  • Nur nebenbei:

    Ich hatte schon "unberechtigt" Datenbank-Zugriff (SQL-Injection) und dann aber grosse Probleme, Code irgendwie zum Ausführen zu bringen um meinen unberechtigten Zugriff auszuweiten. Bei sowas spielen immer viele kleine "Schwächen" zusammen.

    Bei den Informationen, die Du gegeben hast, kann ich mir nicht wirklich vorstellen, was Du genau machen willst; und ich habe eine prinzipielle Abneigung gegen PHP. Darum frage ich nicht genauer nach, sondern empfehle nur, nochmal drüber nachzudenken, was Du *eigentlich* willst und ob es dafür nicht vielleicht einen ganz anderen, besseren Weg gibt.
    Und für die allermeisten üblichen Probleme gibt es echt gute Web-Frameworks, soweit ich weiss auch recht gute für PHP.
    C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MacounFFM () aus folgendem Grund: Löschung auf Wunsch des Nutzers

  • Sorry – das ist PHP vom Jahr 1997. Wo hast du PHP gelernt? Im WWW gibt's zu viel Müll zum Thema PHP.

    1) $mode ist sehr anfällig für SQL Injektion:

    Beispiele: owasp.org/index.php/SQL_Injection

    Da kann man locker DELETE Anweisung / DROP database sogar auch ausführen, je nachdem wie die Berechtigungen eingestellt sind.

    2) Nutze PDO Klasse für DB-Abfragen:

    de3.php.net/manual/de/class.pdo.php

    de3.php.net/manual/de/class.pdostatement.php


    3) Baue niemals SQL mit Werten im WHERE Klausel z.B. zusammen, sondern übergebe sie als Parameter an PDOStatement::execute() Methode.

    z.B. de3.php.net/manual/de/pdostatement.execute.php

    4) eval() ist immer gefährlich

    Etwas stimmt mit deinem Konzept nicht, weil eval() hier notwendig ist.
    Du sollst etwas mit Mapping aufbauen wie z.b.

    Quellcode

    1. $modeFunction1 = function($parameter) { /* handler for mode1 */ }
    2. $modeFunction2 = function($parameter) { /* handler for mode2 */ }
    3. $modeFunctions = array(
    4. "mode1" => $modeFunction1,
    5. "mode2" => $modeFunction2
    6. );
    7. if (isset($modeFunctions[$mode])) {
    8. $modeFunction = $modeFunctions[$mode];
    9. $modeFunction($parameter);
    10. // call the mode function}
    11. } else {
    12. // generate error output
    13. }
    Alles anzeigen


    Das ist dynamisch aber sauber und safe!

    5) Zum Schluss: Never build something from scratch :)

    Nimm dir doch silex z.b. für deinen Zweck! Das ist micro-framework, gebaut für sowas:
    z.B. silex.sensiolabs.org

    Das ist im Jahr 2012 aktuell.
    Aus macfreakz wurde Apfelbeisser …

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Apfelbeisser ()

  • Apfelbeisser schrieb:

    2) Nutze PDO Klasse für DB-Abfragen:

    Meine PHP-Kenntnisse sind von 2006/PHP5.0, aber: was spricht gegen mysqli?
    Damals™ war das für MySQL Datenbanken state-of-the-art, weil es schön nativ war und so ziemlich alles unterstützte, was MySQL so konnte.

    Okay, PDO seit 5.1 scheint das Ganze noch etwas zu abstrahieren. Dennoch bin ich nicht überzeugt. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • @Lucas de Vil: Ja – PDO ist frisch, bietet schöne Interfaces an, kannst schnell zw. Db Drivers (mysql, sqlite, ...) wechseln ... mysqli ist auch ganz gut, aber eben mysql-spezifisch. Hat auch parallel reine Funktionen gegenüber Klassen mit Methoden ...

    @Rosi-janni: Bitte lies diese Webseite ganz durch: phptherightway.com dann weisst du wo du anfangen musst :)
    Aus macfreakz wurde Apfelbeisser …