Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > [ SQL ] Artikel: About Security (#11): SQL-Injection

Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 24.08.2005, 16:52 Nach oben    #21
Guradia
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard [ SQL ] Artikel: About Security (#11): SQL-Injection

Ich kümmere mich um einiges neuerdings nicht mehr:

PHP-Code:
<?php
        $Sql 
"INSERT INTO foo ( bar ) VALUES ( :bar )";
        
$Stmt $Pdo->prepare($Sql);
        
$Stmt->bindParam(':LimitStart'$_GET['bar'], PDO_PARAM_STR);
        
$Stmt->execute();
?>
PDO macht das hübsch allein ...
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.08.2005, 16:54 Nach oben    #22
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard [ SQL ] Artikel: About Security (#11): SQL-Injection

Wie arbeitet PDO denn intern? Haste da gerade mal einen direkten Link parat?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.10.2005, 19:39 Nach oben    #23
Du-weisst-schon-wer
Neuer Benutzer
 
Registriert seit: 18.08.2005
Ort: Hürth
Beiträge: 28
Standard

PDO übergibt der Datenbank die Query erst kompelett ohne Eingabewerte bzw. nur die du in der Rohfassung an das DBMS weitergibst. Danach werden durch BindParam die Werte übermittelt und in der Datenbank in der Query "eingesetzt" hier kann allerdings nichts passieren, denn das DBMS hat die Query quasi vorkompiliert.

Öhm Guradia:
Warum benutzt du bei bindParam :LimitStart? ist das irgendwie ein Sonderplatzhalter? weil oben nimmst du :Bar?!

Geändert von Du-weisst-schon-wer (30.10.2005 um 19:45 Uhr).
Du-weisst-schon-wer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 12:36 Nach oben    #24
Jay
 
Beiträge: n/a
Standard

PHP-Code:
public function escapeString(&$string) {
    
$string preg_replace("~[^a-z0-9]~i","",$string);
    
$string addslashes($string);
        
    return 
$string;

In meiner database klasse meines CMS habe ich diese Methode geschrieben. Zuerst werden alle ungültigen Zeichen entfernt. d.h. es gelten nur Zahlen und Buchstaben.

Sollte der string dann auch noch zeichen wie \x01 oder \n oder so enthalten werden diese durch addslashes escaped zu \\x01 und \\n und somit besteht keine Gefahr mehr.

-- Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.11.2005, 13:33 Nach oben    #25
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Was ist denn, wenn du jetzt ein Fragezeichen im Text hast?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.11.2005, 14:09 Nach oben    #26
Jay
 
Beiträge: n/a
Standard

Diese Funktion habe ich nur für ein Login geschrieben. Ansonsten kann man sie ja auch so schreiben

PHP-Code:
    public function escapeString(&$string,$spChars true) {
        
// If special chars are no allowed
        
if (!$spChars) {
            
$string preg_replace("~[^a-z0-9]~i","",$string);
        }
        
        
$string mysqli_real_escape_string($this->db,$string);
        
        return 
$string;
    } 
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 16:53 Nach oben    #28
Doggi
Erfahrener Benutzer
 
Benutzerbild von Doggi
 
Registriert seit: 26.10.2005
Ort: Basel
Beiträge: 115
Standard

Zitat:
Zitat von Buhmann
Zitat:
Zitat von Jann Hendrik
ok. Dann lasst uns doch mal an einer Sicherheits-Funktion arbeiten.


ich nutze derzeit:
PHP-Code:
<?php
  
function mysql_secure($text)
  {
    
$text htmlspecialchars($text);
    
$text mysql_escape_string($text);

    if(!
get_magic_quotes_gpc())
      
$text addslashes($text);      // Ausgabe dann mit  stripslashes()

    
RETURN $text;
  }

$pot_unsicher "abc";
$sicher mysql_secure($pot_unsicher);

?>
hm ich kenne diese version:

PHP-Code:
<?php

// Quote variable to make safe
function quote_smart($value)
{
   
// Stripslashes
   
if (get_magic_quotes_gpc()) {
       
$value stripslashes($value);
   }
   
// Quote if not integer
   
if (!is_numeric($value)) {
       
$value "'" mysql_real_escape_string($value) . "'";
   }
   return 
$value;
}
?>
man müsste mal beide versionen testen um herauszufinden, welche nun richtig ist..
diese version scheint nicht zu funktionieren. ich habs probiert und bekomme zwischen den ' ' Zeichen NICHTS. es wird einfach gelöscht, was als value mal übergeben wurde und die beiden ' ' am anfang und am ende bleiben. übrigens funktioniert die erste variante auch irgendwie nicht. bin grad ziemlich gefrustet und bleibe wohl bei meiner alten, unsicheren variante, die wenigstens funktioniert.
__________________
Wer später bremst, fährt länger schnell...
Doggi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 17:18 Nach oben    #29
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Dann machst du was flasch. Zeig mal her, was du machst.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 17:23 Nach oben    #30
Doggi
Erfahrener Benutzer
 
Benutzerbild von Doggi
 
Registriert seit: 26.10.2005
Ort: Basel
Beiträge: 115
Standard

hab alles über den haufen geworfen und anders gemacht. müsste es wieder so zusammenstellen, wie es war. mach ich aber erst morgen (gleich feierabend )
__________________
Wer später bremst, fährt länger schnell...
Doggi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 17:25 Nach oben    #31
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

PHP-Code:
$string addslashes($string); 
Das kannst du dir schenken. Was soll den escaped werden, wenn nur noch Zahlen und Buchstaben im String sind?
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 17:38 Nach oben    #32
Doggi
Erfahrener Benutzer
 
Benutzerbild von Doggi
 
Registriert seit: 26.10.2005
Ort: Basel
Beiträge: 115
Standard

so habs rekonstruiert.

also, reihenfolge der abarbeitung der dateien ist folgende:

index.php (formular)
session.php (prüfen und bearbeiten der formulardaten)
zugriff.php (eintragen in die db)
danke.php (exit)

die index übergibt also die fomulardaten an die session.

als function hab ich mal deine genommen

PHP-Code:
 function mysql_secure($text)
  {
    
$text htmlspecialchars($text);
    
$text mysql_escape_string($text);

        if(!
get_magic_quotes_gpc())
      
$text addslashes($text);      // Ausgabe dann mit  stripslashes()

    
return $text;
  } 
in der session.php hab ich ein include der function.php

dann hab ich in der session.php folgendes:
PHP-Code:
$_POST['vorname']    = mysql_secure($_POST['vorname']); 
dazu ist es doch gedacht oder? leider bleibt in diesem fall die session.php weiß, ohne ausgabe von irgendwas.

Zitat:
$string = addslashes($string);
hab ich in der zugriff.php damit die \ und ' auch escaped in die db eingetragen werden. wenn nur zahlen und buchstaben übrig sind, passiert nichts.
__________________
Wer später bremst, fährt länger schnell...
Doggi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 17:47 Nach oben    #33
J33d3X
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

sag mir mal bitte was du bezweckst mit

$var = mysql_escape_string("hallö'chen");

echo $var;

und gleich danach :

if(!get_magic_quotes_gpc())
$var = addslashes("hallö'chen");


lass dir das mal duch den Kopf gehen .....
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";');
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 18:57 Nach oben    #34
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Zitat von J33d3X
if(!get_magic_quotes_gpc())
$var = addslashes("hallö'chen");
Eigentlich geht es darum, alle Escape-Backspaces vor dem Aufruf von mysql_real_escape_string() zu entfernen, damit man nur den reinen Input escaped.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 20:19 Nach oben    #35
J33d3X
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

wenn es denn so ist ...
was macht die funktion für einen Sinn ???

Zitat:
function mysql_secure($text)
{
$text = htmlspecialchars($text);
$text = mysql_escape_string($text);

if(!get_magic_quotes_gpc())
$text = addslashes($text); // Ausgabe dann mit stripslashes()

return $text;
}
nachdem was du sagst

Zitat:
Eigentlich geht es darum, alle Escape-Backspaces vor dem Aufruf von mysql_real_escape_string() zu entfernen, damit man nur den reinen Input escaped.
kann die funkktion nie vor einem insert stattfinden ( wo wäre denn da der reine input )
aber:
nach dem select ( also im output ) ist sie "so wie sie dasteht" genauso sinnbefreit
da erst ein escapen mit mysql_escape_string erfolgt ... dann eine abfrage ob
get_magic_quotes_gpc und nochmal escapen per addslashes

a ) performancelastig
b ) sinnbefreit

falls ich nicht etwas gravierendes übersehe


mfg
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";');
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 21:29 Nach oben    #36
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Erklär mir mal bitte, was du an meinem Post auszusetzen hast. Ich steig da grade nicht so durch
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 21:36 Nach oben    #37
J33d3X
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

ich habe an deinem post nichts auszusetzen da es deutlich ist

ich will lediglich darauf hinweisen das die besagte funktion es wert ist
genauer hinzuschauen/überdenken da sie in meinen augen durch den zusatz
if(!get_magic_quotes_gpc())
$text = addslashes($text);

über das eigentliche ziel hinausschiesst, da vorher schon bedingungslos mysql_escape_string angewand wurde ...

hat also weder was mit deinem post noch mit deiner person zutun

mfg
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";');
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2005, 21:51 Nach oben    #38
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Keh, dachte scho ich hätte wieder Teile meines Halbwissens verbreitet
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 21:24 Nach oben    #39
Jojo
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

ähmm...
ich hab mir mal aus den Infos auf php.net folgende Funktion gebastelt:
PHP-Code:
     public function query($sql$user false) {
         
$sql = (get_magic_quotes_runtime() || (get_magic_quotes_gpc() && $user)) ? stripslashes($sql) : $sql;
         return 
mysql_query(mysql_real_escape_string($sql));
     } 
wobei mit $user angegeben werden kann, ob sich der Querystring direkt aus Benutzereingaben zusammensetzt.

Ist das nun sicher oder net?
Bitte klärt mich auf. (Nur über das )
Danke,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 15:50 Nach oben    #40
Doggi
Erfahrener Benutzer
 
Benutzerbild von Doggi
 
Registriert seit: 26.10.2005
Ort: Basel
Beiträge: 115
Standard

PHP-Code:
    function mysql_secure($text)
  {
    
$text htmlspecialchars($text);
    
$text mysql_escape_string($text);

        if(!
get_magic_quotes_gpc())
      
$text addslashes($text);      // Ausgabe dann mit  stripslashes()

    
return $text;
  } 
nun hab ich beide varianten probiert:

PHP-Code:
$_POST['nachricht']    = mysql_secure($_POST['nachricht']);

mysql_secure($_POST['nachricht']); 
leider bleibt die seite weiß ohne fehler oder sonstigem.

warum funktioniert die funktion bei mir nicht?
dabei soll es jetzt mal egal sein ob sinn oder unsinn einzelner funktionsinhalte. problem ist ja, dass die funktion überhaupt nicht funktioniert.
__________________
Wer später bremst, fährt länger schnell...
Doggi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« If-Abfrage in SQL-Query? | Join und Mysql5 »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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 anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.