ilch Forum » Allgemein » HTML, PHP, SQL,... » Eingabe für die DB filtern

Geschlossen
  1. #1
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Also ich erstelle gerade eine Art Joinus-Formular wo der User Daten eingeben kann und diese weiterverarbeitet werden.

    Die Daten werden zum einen in die Datenbank gespeichert und zum anderen teilweise noch als eMail versendet.

    Nun ist meine Frage mit welchen PHP-Funktionen ich diese Eingaben filtern kann? - z.B. wenn ein User mit böser Absicht einen Schadcode einbinden möchte das dieser herausgefiltert wird

    Kann mir da wer weiterhelfen?^^
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Saarlonz Hall Of Fame
    Registriert seit
    07.08.2008
    Beiträge
    3.003
    Beitragswertungen
    235 Beitragspunkte
    Thread in den HTML, PHP, SQL,... Bereich verschoben.
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.638
    Beitragswertungen
    1193 Beitragspunkte
    @Ahrtas ...die Funktion escape();

    $zahl =  escape($_POST['zahl'], 'integer');
    $zeichenkette =  escape($_POST['zeichenkette'], 'string');
    $textfeld =  escape($_POST['textfeld'], 'textarea');
    rules :: doku :: faq :: linkus
    1 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    escape ist im übrigen eine Funktion von ilch, die u.a. mysql_escape_string bzw. mysql_real_escape_string, aber auch strip_tags im Falle von 'string' oder ein intval bei 'int'.
    Damit schützt man sich vor SQL Injection, wenn man aber bestimmt Daten erwartet, kann man diese noch genauer validieren, dafür nutzt man meist reguläre Ausdrücke, aber das würde wohl jetzt zu weit führen, solltest du dir aber weitergehenden Coding mal ansehen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    also ich hab mich mal auf php.net über die Funktionen durchgelesen und laut php.net ist mysql_escape_string nicht mehr zu empfehlen und strip_tags könnte wenn ein html-code eingegeben wird unter umständen zu viel davon löschen

    ich habe für das Modul was ich gerade programmiere die Variante von Schirmer genommen und mich einwenig an der news.php im verzeichnis inlcude/admin orientiert da es ja die gleiche Schreibweise wie im Beispiel von Schirmer ist


    dieses escape-Beispiel ist ja jetzt im Backend im Einsatz wo man nur mit Adminrechte hinkommt - wie sieht es im frontend aus wo die Besucher was eingeben können (?) soll ich da auch mit escape filtern oder wieder anderst vorgehen?


    Zuletzt modifiziert von Ahrtas am 07.02.2012 - 01:20:07
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Die escape Funktion nutzt nur die von mir genannten Funktionen, solange du mit ilch arbeitest kannst du darauf zurück greifen, ansonsten würde man heute nicht mehr mit den mysql_??? Funktionen arbeiten, aber solange man das noch tut, sehe ich keinen Grund auf die escape_string Funktionen zurückzugreifen, aber ok mysql_escape_string ist deprecated, man soll also mysql_real_escape_string, da wird noch der Zeichensatz berücksichtigt.

    Wie schon gesagt, bei allen Eingaben kann man die Daten validieren, also schauen, sind die Daten in einem erwarteten Format, dazu verwendet man meist reguläre Ausdrücke, du kannst dich aber auch nach fertigen Filter-/Validierungslösungen umschauen, im ilch Script wird bisher fast nie validiert zunge
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Naja mir gehts darum weil ich an einem größeren Modul für ilch gerade arbeite was es später zum Download gibt - und bei diesem Modul können sich User "bewerben" sprich es werden Daten verarbeitet und gespeichert und teils auch per E-Mail versendet. lächeln
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Sniper Mitglied
    Registriert seit
    31.10.2007
    Beiträge
    1.468
    Beitragswertungen
    63 Beitragspunkte
    Aber kein Bewerbung's Modul auf die Art oder externer Link wenn du möchtest darfst du dieses auch verwenden und ausbauen.
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Lass dich überraschen zwinker - nein spaß nicht so ein Modul - die Bewerbung ist eher ein kleiner teil von meinem Modul und ist nebensache, ich sollte es eher "Join Us"-funktion nennen.

    Das Modul besteht aus drei Backend-Module und ist zu 1/3 fertig dauert also noch einwenig bis es fertig ist - so spektakulär wird es denke ich auch nicht werden, aber es wird nützlich sein - hoffe ich.^^
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Sniper Mitglied
    Registriert seit
    31.10.2007
    Beiträge
    1.468
    Beitragswertungen
    63 Beitragspunkte
    Na dann Viel Erfolg
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    ZitatZitat geschrieben von Lord|Schirmer

    @Ahrtas ...die Funktion escape();

    $zahl =  escape($_POST['zahl'], 'integer');
    $zeichenkette =  escape($_POST['zeichenkette'], 'string');
    $textfeld =  escape($_POST['textfeld'], 'textarea');


    Wie sieht das aus wenn ich eine Datei uploade?
    Wie muss es da aussehen??

    $_FILES['deinedatei'] =  escape($_FILES['deinedatei'], 'WAS MUSS HIER HIN?');

    ...oder muss ich das anderst filtern?

    Bei dem Upload handelt es sich ausschließlich um PNG-Dateien.
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Wenns um den Dateinamen geht, sollte string ausreichen, um gegen SQL Injection vorzubeugen, allerdings könntest du den Namen auch auf andere Sachen überprüfen oder den mime type der Datei prüfen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    ZitatZitat geschrieben von Mairu

    Wenns um den Dateinamen geht, sollte string ausreichen, um gegen SQL Injection vorzubeugen, allerdings könntest du den Namen auch auf andere Sachen überprüfen oder den mime type der Datei prüfen.

    Also im Moment prüft mein Script die Maße (Höhe und Breite in Pixel), die Speichergröße und den mime-type (image/png) der PNG-Datei.


    Also ist folgendes inordnung gegen SQL-Injection?
    $_FILES['deinedatei']['tmp_name'] = escape($_FILES['deinedatei']['tmp_name'], 'string');



    Zuletzt modifiziert von Ahrtas am 15.04.2012 - 18:10:11
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ja.
    Am Rande: tmp_name sollte auch in ' stehen.
    Und um Verwirrung vorzubeugen, ist es sinnvoll das Ergebnis in einer anderen Variable zu speichern, so weiß man später auch, man arbeitet mit der escapten Variable.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    ZitatZitat geschrieben von Mairu

    Ja.
    Am Rande: tmp_name sollte auch in ' stehen.[..]
    natürlich, habe ich oben vorhin übersehen - hab es ausgebessert zwinker
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten