Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Anti SQL Injection Function [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Anti SQL Injection Function


 
Londrag
18-03-2008, 13:15 
 
Mein letzter Thread (http://php-resource.de/forum/showthread.php?s=&threadid=90854) wurde leider ins tote Tutorial Forum verschoben (danke!), wo ich nun keine Antwort mehr bekommen werde .

Dann formuliere ich mal meine Frage anders.

Da dieses Script hier (http://php-resource.de/tutorials/read/38/4/) ja anfällig auf SQL Injections ist, würde es mich interessieren ob es ausreichen würde, wenn ich es mit folgendem Code ergänze:

function my_real_escape_string($var)
{
if(get_magic_quotes_gpc())
{
$var = stripslashes($var);
}
return mysql_real_escape_string($var);
}


$username = my_real_escape_string($_POST[username]);
$userpass = my_real_escape_string($_POST[userpass]);




Und dann halt dementsprechend überall wo $_POST['username'], $_POST['userpass'] im Script steht, mit $username und $userpass ersetzen.

 
case
18-03-2008, 13:29 
 
Der Thread ist doch noch auf und er wurde gerade mal vor 3!! Stunden verschoben.

Original geschrieben von jahlives
Sorry aber da es nicht dein eigener Code ist sondern sich auf ein Tutorial bei uns bezieht gehört es für mich nach Tutorials

Ich denke du kannst die gleiche Frage in jedem Forum posten und alles wird immer wieder gelöscht/verschoben.

 
jahlives
18-03-2008, 13:36 
 
Also ich sehe kein konkretes PHP Problem, wie es für dieses Forum nötig wäre. Hier bist und bleibst du mit dieser Frage falsch.
Was noch drinläge wäre Brainstorming, da du zu einer deiner PHP Funktionen Tipps willst (obwohl mir es absolut unsinnig erscheint eine eigene Fkt zu schreiben, für etwas was PHP schon bietet)
Du willst Tipps was an deiner Fkt zu verbessern wäre? **move** nach Brainstorming

 
Londrag
18-03-2008, 13:58 
 
Schade das hier Bürokratie vor Benutzerfeundlichkeit kommt :(

Naja, ich zitiere aus der Überschrift von dem PHP Forum: "Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. " Das ist doch der Fall.

Skriptproblem = SQL Injection anfällig
Diskussion = Meine Lösung sicher?

Dann muss ich jetzt wohl einfach warten...

 
unset
18-03-2008, 14:00 
 
Such doch mal im Forum. Eben noch habe ich einen Link zu einem Script gepostet, dass sich mit genau deiner Problematik beschäftigt.

Ansonsten wurde dir schon gesagt: Warum eine Funktion für etwas schreiben, das PHP auch kann?

 
PHP-Desaster
18-03-2008, 14:04 
 
Warum sollte deine Funktion reichen? Du überprüfst zum Beispiel nicht, ob die POST-Werte gesetzt sind. Die magic_quotes-Behandlung würde ich generell außerhalb der Funktion halten!
Außerdem reagierst du auf alle Eingaben gleich: Konversion nach String. Aber bei einer ID oder etwas in die Richtung solltest du einen Cast nach Integer vornehmen!

 
Abraxax
18-03-2008, 14:13 
 
Original geschrieben von Londrag
Naja, ich zitiere aus der Überschrift von dem PHP Forum: "Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. " Das ist doch der Fall.

eben nicht ... nur hast du kein scriptproblem ... sondern willst mit-user um ihre meinung fragen und diskutieren.

BRAINSTORMING PHP/SQL/HTML/JS/CSS
Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen! [...]

/ende

 
Londrag
18-03-2008, 14:40 
 
Cool, einer meint die Funktion sei nicht annähern ausreichend, der andere meint eine Funktion sei überflüssig :D

Original geschrieben von unset
Ansonsten wurde dir schon gesagt: Warum eine Funktion für etwas schreiben, das PHP auch kann? [/B]

Weil PHP es von Haus aus nicht korrekt macht. Wenn magic_quotes_gpc auf dem Server aktiviert, sollte zuerst stripslashes() auf die Daten angewendet werden. Das Bearbeiten bereits in irgend einer Form maskierter Daten durch mysql_real_escape_string führt ansonsten dazu, dass bereits Maskiertes doppelt maskiert wird, was wieder zu einer SQL Injection führen kann.

So habe ich moch zumindest auf PHP.net und auch hier im Forum informiert.

Wieso sollte die Anti SQL Injection Funktion überprüfen ob die $_POST Werte überhaupt gesetzt sind? Das wäre doch eher eine Sinnvolle Methode für das Login Script im allgemeinen, falls $_Post Username oder Password nicht gesetzt sind, erst gar nicht eine überprüfung der Daten vornehmen, sondern gleich ein return false ausgeben. Oder verstehe ich dich falsch?

[..]in die Richtung solltest du einen Cast nach Integer vornehmen!

Okay, das mich ich erst mal Googlen, habe nur Bahnhof verstanden :)

Vorerst mal Danke auch beiden.

@Abraxax
Ist den eine SQL Injection kein Problem sondern nur eine Meinung? :) Egal, ich hoffe ich bekomme hier genügend Antworten, danke :)

 
unset
18-03-2008, 14:52 
 
Original geschrieben von Londrag
Cool, einer meint die Funktion sei nicht annähern ausreichend, der andere meint eine Funktion sei überflüssig :D
Ah, ich verstehe langsam. Du wirfst gerne Sachen durcheinander. Na gut, ich erkläre es dir gerne. Der eine sagt, das deine Funktion überflüssig ist, weil das was du erreichen willst PHP von Haus aus kann. Der andere sagt, dass der Weg wie du das was PHP von Haus aus kann erreichen willst absolut unzureichend ist!

 
jahlives
18-03-2008, 14:55 
 
Wieso sollte die Fkt das Vorhandensein der POST Werte prüfen müssen? Diese werden ja als Argument übergeben, sprich die Prüfung muss ausserhalb der Fkt stattfinden...
Die Fkt wäre auch etwas arg unflexibel wenn nur zwei bestimmte POST Felder akzeptiert würden. Für jedes neue Feld die Fkt anpassen wäre dann angesagt.

 
Londrag
18-03-2008, 14:59 
 
Original geschrieben von unset
Ah, ich verstehe langsam. Du wirfst gerne Sachen durcheinander. Na gut, ich erkläre es dir gerne. Der eine sagt, das deine Funktion überflüssig ist, weil das was du erreichen willst PHP von Haus aus kann. Der andere sagt, dass der Weg wie du das was PHP von Haus aus kann erreichen willst absolut unzureichend ist!

Also wenn du meinst dass PHP von Haus aus überprüfen kann, ob die Magic Quotes aktiviert sind, und dann entsprechend den my_real_escape_string Befehl ausführt, dann bitte nenne mir doch diesen Befehl.

Ich habe noch Beispiele gesehen bei der !is_numeric in der Funktion verwendet wird. Also falls der String nur aus Zahlen besteht, erst gar nicht my_real_escape_string ausführen. Jedoch Frage ich mich ob das wirklich sinn macht. Fühle mich irgendwie sicherer wenn einfach ALLES durch den "Schredder" gejagdt wird.

 
unset
18-03-2008, 15:07 
 
Du könntest beispielsweise direkt zu Beginn prüfen, ob Magic Quotes aktiviert sind und ggf. ausschalten. Somit sparst du dir das ganze jedes einzelne mal abzufragen! Und allein das escapen schützt dich nicht zwingend vor einer SQL-Injection!

Ansonsten: Ich habe eben schon gesagt, dass ich etwas zu diesem Thema in einem anderen Thread geschrieben habe. Vielleicht bemühst du dich endlich mal darum dir das anzusehen statt hier den Sturkopf zu spielen.

 
Londrag
18-03-2008, 15:51 
 
Ganz ruhig unset...Gus Fraba...Ich Sturkopf? Und das von jemanden der es bevorzugt über mehrere Beiträge hinweg in mehreren Sätzen schreibt, man solle seine ganzen Posts von Heute durchsuchen anstatt kurz die 11 Buchstaben php-ids.org zu schreiben. Immer diese Hypokraten ;) Aber lassen wir diese streiterei nun.

Ich frag mich nun aber doch was umständlicher ist, in einer Funktion die Abfrage if(get_magic_quotes_gpc()) einbauen oder in der php.ini auf die man eventuell gar keinen Zugriff hat magic_quotes deaktiveren, oder alternative eine htaccess anlegen und es dort deaktiveren.

Ich wähle da doch lieber if(get_magic_quotes_gpc()). So bin ich von .htaccess und php.ini unabhängig.


Werde mir nun aber diese PHP IDS genau anschauen, danke.

 
unset
18-03-2008, 15:58 
 
Original geschrieben von Londrag
Ich frag mich nun aber doch was umständlicher ist, in einer Funktion die Abfrage if(get_magic_quotes_gpc()) einbauen oder in der php.ini auf die man eventuell gar keinen Zugriff hat magic_quotes deaktiveren, oder alternative eine htaccess anlegen und es dort deaktiveren.
Wer sagt, dass du in der ini rumschwurbeln sollst? Du kannst Konfigurationseinstellungen von PHP in großen Teilen zur Laufzeit vornehmen. Darunter auch das aktivieren und deaktivieren von Magic Quotes. Das bringt mich dann wieder zu einem früheren Post: Du wirfst gerne Sachen durcheinander. Vielleicht ist auch das der Grund warum ich dich dazu animiere dich selbst auf die Suche zu begeben und dir dahingehend Schlagworte liefere statt dir alles vorzukauen was du dann per C&P in dein Script übernimmst und wahrscheinlich noch als dein eigenes verkaufst!

Und nochmal: Lass doch einfach das Sturkopfgehabe. Du hast offensichtlich keine besonders große Ahnung - was auch nicht weiter schlimm ist. Aber evtl. solltest du deine eigene Überheblichkeit etwas zurückschrauben und auf das eingehen, was dir Leute mit offensichtlich wesentlich mehr Erfahrung raten! Und damit beziehe ich mich nicht auf mich!

 
Londrag
18-03-2008, 16:22 
 
Schön was du mir hier alles an den Kopfschmeist....
- Ich bin ein Sturkopf
- Ich bringe alles durch einander
- Meine Scripts bestehen nur aus copy&paste
- Ich sei Überheblich
- Ich verkaufe vorgefertige script als mein eigen


Unset, aber sonst gehst dir noch gut? Langsam reicht es echt. Ich habe hier freundlich gefragt wie man das Tutorial von mrhappiness sicherer gestalten kann was die SQL Injection angeht.

Ich habe mich auch für die Vorschläge bedankt und auch meine Gedanken zu den Vorschlägen geschrieben. Du scheinst mich aber mit jeder deiner Antwort fertig machen zu müssen. Wäre dir dankbar wenn du entweder was Hilfreiches schreiben könntest, oder aber sonst mit deiner assozialen Haltung fern von diesem Thread bleibst. Danke dir.

Das man die magic_quotes auch ohne eine Änderung in der PHP.ini oder in der .htaccess deaktiveren kann, war mir nicht bewusst. Denn ich habe folgendes gefunden:
magic_quotes_gpc | changable: PHP_INI_PERDIR|PHP_INI_SYSTEM

ie. "Entry can be set in php.ini, .htaccess or httpd.conf" and not in
user scripts.

 
PHP-Desaster
19-03-2008, 00:42 
 
Das PHP-Manual zum Deaktivieren von Magic Quotes: klick (http://de2.php.net/manual/de/security.magicquotes.disabling.php).

[..]in die Richtung solltest du einen Cast nach Integer vornehmen!Das ist ein Cast nach Integer:
$str = "123asd";
$int = (int)$str;
// $int enthält nun den Wert 123.
Warum du diese Vorgehensweise verwenden solltest, wurde schon ziemlich oft hier im Forum behandelt, da gehe ich jetzt nicht weiter drauf ein.

Ich kann dir nur empfehlen, die mysql_*-Funktionen langsam abzulegen und auf PDO umzusteigen. Es gibt im Grunde nur Vorteile (die ich an dieser Stelle jedoch auch nicht weiter erläutern werden).

 
Londrag
19-03-2008, 11:34 
 
Vielen Dank PHP-Desaster, werde mich nun also mal in das Cast nach Integer und PDO zeugs einlesen.

Danke für den Link fürs Deaktivieren von den Magic Quotes. Unset hat mich da verwirrt mit der Aussage "Warum eine Funktion für etwas schreiben, das PHP auch kann. " Daher war ich die ganze Zeit auf der Suche nach einem Befehl der die Magic_Quotes deaktiviert und nicht nach einer Funktion. Aber im Endeffekt ist es aber nichts anderes als auch eine weitere selbst gebaute Funktion die die ganzen $_REQUESTS stripslashed. Daher verstehe ich diese Aussage von Unset nach wie vor nicht. Trotzdem danke für den Link.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:23 Uhr.