mod_i: Sicherheit testen

Hallo,

ich hab einen kleinen Shop geschrieben mit PHP und MySQL und möchte ihn nun auf die Sicherheit prüfen. Ich habe mal gelesen das es möglich ist, mittels Hochkomma angaben bzw. böswilligen SQLcode ( DELETE; DROP usw )  per URL zu übermitteln. Dies möchte ich natürlich vermeiden!

Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?

So:?
www.bla.de?DELETE FROM warenkorb WHERE UID='$PHPSESSID'

Grüss mod_i

  1. Hi,

    Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?

    Angreifbar ist dein System nur, wenn Du Daten aus Eingabefeldern übermittelst und diese dann direkt in die DB übernimmst, anstatt zu prüfen.
    Um diesem Dilemma aus dem Weg zu gehen, escape ich alle " und ' per Hand und entferne zusätzlich Wörter wie drop, update usw.

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
  2. Hi,

    ich würde Dir empfehlen jeden SQL-String den Du an die DB schickst zu prüfen.

    Die Abfrage per SQL, wie Du sie beschreibst, wäre meines Erachtens nur innerhalb von POST oder GET Variablen möglich, also wenn z.B. im Namens feld ein SQL string eingegeben wird.

    Mit PHP kann man das so verhindern:

    $sql="SELECT * FROM tabelle WHERE name='".mysql_escape_string($_POST["name"])."';";

    Der Befehl mysql_escape_string maskiert einen String und macht ihn damit als SQL-Sequenz unbrauchbar.

    Auch solltest Du bei PHP immer mit $_POST arbeiten, damit keine Variablen über die URL gegeben werden können.

    Gruß

    Ralf

  3. Moin!

    Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?

    Gar nicht am besten. SQL gehört einfach nicht in die URL. Da kann man viel zuviel Blödsinn mit machen!

    Üblichwerweise willst du ja einen von mehreren _definierten_ Aktionen auslösen. Verwende also entsprechend nur _definierte_ Aktionsschlüsselwörter in der URL:

    ?action=warenkorb
    ?action=neuprodukt
    ?action=prodloesch
    ?action=bestellen

    Nur diese _definierten_ Aktionen dürfen in deinem Shop möglich sein. Und jede Aktion ist mit einem _fest definierten_ SQL-String verbunden, der in diesem Fall aufgerufen wird.

    Dieser String wird sicherlich durch Angaben des Besuchers ergänzt. Beispielsweise muß ja irgendwie bekannt gemacht werden, welches und wieviel von einem Produkt er haben möchte. Diese Userangaben sind aber zwingend zu _validieren_. Wenn eine Produktanzahl anzugeben ist, dürfen in den übermittelten Daten eben nur Zahlen stehen, möglicherweise sogar nur Zahlen zwischen 0 und 999 (wer will schon eine Million Seifenstücke bestellen?).

    Siehe dazu auch (auch für nicht-PHP-Verwender interessant):
    http://www.dclp-faq.de/q/q-sicherheit-parameter.html
    http://www.dclp-faq.de/q/q-security-variablen.html

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|