MySQL Injection, wie am besten schützen

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

  • ich finde das manual mit den vielen Funktionen macht am Anfang ein bisschen Angst.
    Ich werde versuchen bald ein wiki howto zu schreiben. Nach dem Verbindungsaufbau braucht man eigentlich nur seine 1-2 Funktionen - genau wie früher.

    In Punkto Sicherheit gilt natürlich: md5 ist nicht mehr sicher (wozu gibt es die Playstation denn sonst?). Im Zweifelsfall SHA1 nutzen. Im Idealfall SHA1 mit [google]Salted Hash[/google].
  • hab dich dich richtig verstanden?! Mit ner PS kann man md5 hash zurückrechnen auf den ausgangszustand? wow das ist mir neu... Vielen dank schonmal werds in zukunft berücksichtigen!

    Im generellen, kann mir jemand was empfehlen (zum lesen) im bezug auf sauberes programmieren, sicherheit in php und mysql?

    danke schonmal

    grüße
    Timo
    ---- Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Ich weiß zwar nicht warum ich so naja überschlau bin und nicht PDO oder MYSQLI nutze aber ich nutze ne MYSQL Klasse die "ich" ein wenig "erweitert" habe so das sie "Prepared Statement" "ready" ist sprich sowas wie ...

    Quellcode

    1. <?php
    2. $db->prepare("SELECT `id`, `name` FROM `posts` WHERE `id` = ':id'");
    3. $db->bind("id", $id); # Woher $id kommt bleibt mein Geheimnis xD
    4. $db->execute();
    5. ?>


    Ob es was bringt oder ob es nur ultra cool aussieht sehen Sie am Montag bei taff *net* ...

    Nein irgendwie mach ich mir beim "programmieren" wie man das wohl nennt, einfach zuviel Kopf. 50 % fertig, Papierkorb. 99 % fertig, was da gefällt mir was nicht? Projekt -> Papierkorb! :pinch: (Das ist grausam glaubt mal wenn man sich ich glaube 4 bzw. 5 Jahre mit PHP & Co. mal mehr oder weniger intensiv beschäftigt, min. 5 PHP Bücher x Mal gelesen hat und man bekommt im Endeffekt doch nix hin ... Jaja gleich kommen sie wieder, von wegen lern Java PHP ist scheiße. Nöe?)

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

  • Ich habe mal gerade so ein bisschen in dieses [wiki]Einführung in PDO[/wiki] reingeschaut. Ziemlich cool! Danke erstmal :).

    Vor einiger hat d0nut mir mal geraten das ich das hier verwenden soll, das alle $_POST und $_GET Sachen direkt sichert gegen SQL-Injektionen.

    Quellcode

    1. array_walk($_POST, create_function('&$val, $key','$val = mysql_real_escape_string($val);'));
    2. array_walk($_GET, create_function('&$val, $key','$val = mysql_real_escape_string($val);'));


    Ist das nicht mehr sicher bzw. nicht gerade eine gute Lösung?
    Als ich mal irgendwie ein Array wiedergeben wollte konnte ich es nicht anzeigen ohne das ich das $_POST array_walk entferne Oo. (Glaub aber das lag irgendwie an meinem Quellcode...)

    Und ist es klug jetzt mit PDO zu starten für so Programme? (Mache das eigentlich nur als Hobby und wenn was gutes daraus wird will ich das auch als Open-Source anbieten ^^").
  • Ich werde nicht jedem sagen, dass er PDO nutzen muss.
    Dennoch halte ich PDO für sinnvoll und nutze es in jedem neuen Projekt.

    Zur anderen Funktion: Sie ist nur zu gebrauchen, wenn man mit mysql_query(..) arbeitet.
    Für PDO, MySQL Improved oder andere Datenbanken ist sie nicht gedacht.

    Außerdem sollte man "eigentlich" keine Variaben escapen, die man nicht escapen muss. Sogesehen ist es keine Optimallösung.
  • d0nut schrieb:

    Außerdem sollte man "eigentlich" keine Variaben escapen, die man nicht escapen muss. Sogesehen ist es keine Optimallösung.


    Mit dieser array_walk() Funtkion (in meinem letzten Post angegeben) werden ja alle $_POST und $_GET Variablen escapet. Das ist doch aber eigentlich nur nötig wenn man mit den Informationen die über $_POST und $_GET hergeleitet werden etwas aus der SQL Datenbank rausholen will, bearbeiten will usw. Das wäre aber bei Sachen wo die $_POST Variable nur angibt zu welchem Bereich vom Skript er gehen sollte nicht nötig? (Ich mein jetzt zb ein switch(); mit verschiedenen cases in denen die einzelnen Seiten includen werden.)

    Nebenbei: Ist PDO selbst ne Datenbank wie MySQL oder wie ?!
  • Die PHP Data Objects(PDO)-Erweiterung stellt eine leichte, konsistente Schnittstelle bereit, um mit PHP auf Datenbanken zuzugreifen. Jeder Datenbanktreiber, der die PDO-Schnittstelle implementiert, kann spezifische Features als reguläre Funktionen der Erweiterung bereitstellen. Beachten Sie, dass Sie keine Funktionen der Datenbank mit PDO allein benutzen können. Sie müssen einen datenbankspezifischen PDO-Treiber benutzen, um auf eine Datenbank zuzugreifen.
  • Guten Morgen,

    um nochmal auf den Code von student2312 zurückzugreifen:

    ich hab noch eine Überprüfung der Array Größe hinzugefügt, welche Verhindert, dass die Function secure eine Fehlermeldung anzeigt, da foreach leider keinen leeren Array verarbeiten kann :P

    Mein dank geht an student2312! Eine derartige function habe ich schon lange gesucht!

    Vollständiger Code:

    Quellcode

    1. function secure($bad_array){
    2. if(sizeof($bad_array)>0)
    3. {
    4. foreach($bad_array as $key => $value){
    5. switch ($key){
    6. case 'id':
    7. case 'm_id'://Haupt IDs
    8. $secure_array[$key] = intval($value);
    9. default:
    10. if(get_magic_quotes_gpc()){
    11. $value = stripslashes($value);
    12. }
    13. $secure_array[$key] = mysql_real_escape_string($value);
    14. }
    15. }
    16. }
    17. return $secure_array;
    18. }
    19. $_GET = secure($_GET);
    20. $_POST = secure($_POST);
    21. $_SESSION = secure($_SESSION);
    22. $_COOKIE = secure($_COOKIE);
    Alles anzeigen


    Includiert man diesen Code bzw. diese Datei in jede Code-Datei, so sollte jede Datei damit ausreichend abgesichert sein!

    LG

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