kostenloser Webspace werbefrei: lima-city


Sicherheitslücken mit PHP und MySQL

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Hi,
    Ich habe kürzlich mit PHP angefangen und habe eine kleine Seite gezimmert. Jetzt würde ich gerne wissen, welches die wichtigsten Sicherheitslücken sind, die man schliessen muss (am besten auch gleich, wie man die schliesst), wenn man PHP und MySQL verwendet.
    Gruss,
    beph19
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Die zwei bekanntesten Methoden sind da wohl:

    SQL-Injection
    Cross Side Scripting

    Zu beidem findet jede Suchmaschine eigentlich massenweise Grundlagen :wink:
  4. Und diese Sicherheitslücken, die @karpfen genannt hat, entstehen vor allem beim Kontextwechsel, dazu gibt es bei selfhtml einen guten Beitrag für Anfänger.

    Mit freundlichen Grüßen
  5. außerdem solltest du dich gegen brute force attacken schützen. das machst du ganz einfach mit "nach 3 falschen login versuchen 15 min login sperre" oder nen captcha ist auch nie verkehrt
  6. f**********d

    Sehr wichtig ist auch:
    Alle Variablen, die per PHP übergeben werden (zB durch Login-Formulare) zuerst auf Korrektheit überprüfen.
    Ansonsten kann es vorkommen dass jemand zb. als Benutzernamen MYSQL-Befehle eingibt und diese dann ausgeführt werden!

    MfG
  7. g****e

    gibt 3 feinde, zusammengefasst unter dem codenamen "GPC"!
    diese feinde gilt es zu überwachen und in gewahrsam zu nehmen!
    voll ausgeschrieben sind unsere verdächtigen 3 arrays der schlimmsten sorte: $_GET, $_POST und $_COOKIE. gegen sie ermitteln wir schon lange und haben ihnen schon sehr viele angriffe in webapplikationen zuschreiben müssen, wenn man sie nur einmal unüberwacht lässt kann das folgen haben für die komplette infrastruktur!
    Darum achten sie drauf dass die mitglieder dieser 3 banden, wenn sie sie irgendwo reinlassen, stehts genau durchsucht, gefilzt und gescannt werden! ohne untersuchung kein einlass! wir bringen diese verbrecher lieber um als dass sie unsere infrastruktur schäden! wichtige helfer welche sie rekrutieren sollten für diesen fall sind:
    - preg_match()
    - str_replace()
    - intval()
    auch sollten die regex angefordert werden, mit ihrer macht kann man sehr schnelle und genaue untersuchungen durchführen. ihren augen entgeht nicht das geringste detail. sogern eine sache anders ist als was sie suchen wird dank preg_match alarm ausgegeben!
    2 rekruten die sie aus ihren reihen loswerden sollten sind:
    - register_globals
    - error_reporting
    - gpc_magic_quotes
    register_globals scheint guter helfer zu sein, allerdings sind seine keimverstopften nasen mehr schadent und systemfluktuierend als was hilfreich. darum: lieber feuern! error_reporting hilft gut bei der debugarbeit und ist ein spezialist wenn es darum geht detailfehler zu finden, besonders wenn er auf E_STRICT untersucht, aber vorsicht: er ist ein großes plappermaul! er verrät nicht nur dir dass er etwas gefunden hat, nein, er erzählt es jedem der gerade vorbeikommt. und gpc_magic_quotes ist zwar ein bemühter mitarbeiter, doch bei allem respekt verursacht er oftmals sogar fehler wenn man es garnicht braucht. und doppelquotes können hier das risiko wieder erhöhen, die eigene infrastruktur durcheinanderbringen oder gar zu ungewollten unfällen kommen! lassen sie lieber selbstentwickelte spezialisten ran, und sei es nur durch die hilfe des addslashes() spezialteam.

    soweit der report aus der komandozentrale! bei weiteren fragen zu ihrer mission einer sicheren infrastruktur wenden sie sich jederzeit hier ans die komandozentrale lima-city-forum! hier können unsere spezialisten ihnen jederzeit helfen selbst die schwersten probleme und unsicherheiten im labor schnell und effizient zu durchleuchten!

    viel erfolg, und auf gutes gelingen!
  8. a******o

    - htmlspecialchars
    - htmlentries sind wichtig bei Eingaben in die Datenbank
    Wenn es die PHP-Version unterstützt helfen PDO's die datenbankabfragen sicherer zu machen (siehe PHP Doku: http://php.net/manual/de/book.pdo.php) sind halt recht unbekannt (ab PHP 5.1)
  9. justarustyspoon

    justarustyspoon hat kostenlosen Webspace.

    marius71 schrieb:
    oder nen captcha ist auch nie verkehrt


    Ein Captcha ist von dem Moment an verkehrt, von dem an es Menschen mit Behinderungen von der Nutzung des Webauftritts abhält. An der Stelle muss man dann für Alternativen sorgen oder auf das Captcha verzichten.
  10. justarustyspoon schrieb:
    marius71 schrieb:
    oder nen captcha ist auch nie verkehrt


    Ein Captcha ist von dem Moment an verkehrt, von dem an es Menschen mit Behinderungen von der Nutzung des Webauftritts abhält. An der Stelle muss man dann für Alternativen sorgen oder auf das Captcha verzichten.



    wenn man sich ein wenig damit auseinander setzt dann erkennt man schnell das es auch behinderten gerechte captcha gibt!!
  11. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Um für MySQL zu maskieren gibt es ja die Funktion mysql_real_escape_string(). Sollte ich diese benutzen oder htmlspecialchars(), wenn ich z.B. sowas mache:
    mysql_query("SELECT Name FROM Namen WHERE ID = '".$_GET['ID']."') or die(mysql_error();
  12. Da du das mit der Datenbank verarbeiten willst, musst du mysql_real_escape_string() benutzten. htmlspecialchars() sichert nur für die Ausgabe.

    $_GET['ID'] ist wohl eine Zahl. Also solltest du vorher auch noch prüfen, ob es auch wirklich eine Zahl ist.

    if (!ctype_digit($_GET['ID']))
    echo "Keine Zahl";
  13. An stelle von ctype_digit würde ich eher is_numeric empfehlen.
  14. Eher nicht. is_numeric gibt auch für Kommazahlen (Bsp: 23.315) TRUE zurück. IDs sind aber normal nur ganze Zahlen (Integer). ctype_digit gibt nur TRUE zurück, wenn der Wert wirklich ein Integer ist.
  15. ctype_digit ist aber deutlich langsamer als is_numeric. Wobei du natürlich recht hast, dass ctype_digit lediglich reine Zahlen als korrekt interpretiert.

    Alternativ könnte man auch is_int nutzen, müsste dann aber den String vorher als Integer deklarieren.
  16. @fabo: Man benutzt ctype_digit. Nur damit das hier mal klar ist. Man benutzt nicht is_numeric. Man benutzt nicht /^[0-9]+$/. Man benutzt nicht filter_var. Man benutzt ctype_digit.

    Wollte ich nur mal gesagt haben ;)

    Und damit ist auch zu hier. Über Sicherheit von PHP-Applikationen haben wir haufenweise Themen und im Internet finden sich sehr viele gute Informationen dazu. http://cwe.mitre.org/top25/: XSS und SQLI stehen natürlich an oberster Stelle, aber auch vor vielen anderen Sachen muss man sich schützen. CSRF, Overflows, ...
  17. 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!