|
You last visited: Today at 13:04
Advertisement
[PHP] Schutz gegen SQL Injection
Discussion on [PHP] Schutz gegen SQL Injection within the Web Development forum part of the Coders Den category.
01/05/2013, 12:33
|
#1
|
elite*gold: 53
Join Date: Apr 2012
Posts: 35
Received Thanks: 11
|
[PHP] Schutz gegen SQL Injection
Hallo,
in einem Projekt von mir wird eine Information aus der URL per GET abgefragt.
Danach wird die Information mit der aus einer MySQL Datenbank abgeglichen.
Das sieht dann ungefähr so aus:
localhost/verkaufen.php?item=Wolle
Nun habe ich gelesen, dass man sich vor Eingaben schützen sollte, die Befehle einschleusen.
Reicht das, wenn ich das folgendermaßen mache?
PHP Code:
$item = $_GET['item']; $item = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $item); $item = mysql_real_escape_string($item);
//Hier unten wird dann mit $item gearbeitet
echo "Du hast " . $item . " verkauft!";
Danke im Vorraus
|
|
|
01/05/2013, 12:37
|
#2
|
elite*gold: 0
Join Date: Apr 2009
Posts: 1,898
Received Thanks: 303
|
Von PHP habe ich nicht so viel Ahnung, aber schau dir das mal an:
@Deine Frage
Probier's doch einfach aus
|
|
|
01/05/2013, 12:42
|
#3
|
elite*gold: 53
Join Date: Apr 2012
Posts: 35
Received Thanks: 11
|
Ja ich habe es schon mit "SQL Injection Scanner Tools" versucht, die haben angeblich nix gefunden, aber ich bin mir da nicht so sicher deswegen frage ich mal aber danke für die Antwort^^
|
|
|
01/05/2013, 12:42
|
#4
|
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
|
Quote:
Originally Posted by PoziCs
Hallo,
in einem Projekt von mir wird eine Information aus der URL per GET abgefragt.
Danach wird die Information mit der aus einer MySQL Datenbank abgeglichen.
Das sieht dann ungefähr so aus:
localhost/verkaufen.php?item=Wolle
Nun habe ich gelesen, dass man sich vor Eingaben schützen sollte, die Befehle einschleusen.
Reicht das, wenn ich das folgendermaßen mache?
PHP Code:
$item = $_GET['item'];
$item = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $item);
$item = mysql_real_escape_string($item);
//Hier unten wird dann mit $item gearbeitet
echo "Du hast " . $item . " verkauft!";
Danke im Vorraus
|
mm ich kenn zwar die php regexp sytax nicht aber wenn "/[^a-zA-Z0-9_\-]+/" dafür sorgt das nur buchstaben, ziffern und die - ,_ zeichen zugelassen werden ist das genug, dann bruchst du auch mysql_real_escape_string nicht mehr.
|
|
|
01/05/2013, 12:45
|
#5
|
elite*gold: 0
Join Date: Apr 2009
Posts: 1,898
Received Thanks: 303
|
Quote:
Originally Posted by PoziCs
Ja ich habe es schon mit "SQL Injection Scanner Tools" versucht, die haben angeblich nix gefunden, aber ich bin mir da nicht so sicher deswegen frage ich mal aber danke für die Antwort^^
|
Die sind normalerweise eig. recht genau, aber manuell ist immernoch am besten.
|
|
|
01/05/2013, 12:50
|
#6
|
elite*gold: 53
Join Date: Apr 2012
Posts: 35
Received Thanks: 11
|
Alles klar Danke!
|
|
|
01/06/2013, 14:03
|
#7
|
elite*gold: 148
Join Date: Jun 2011
Posts: 1,452
Received Thanks: 90
|
verwende doch einfach mysql_real_escape_string(), das eigentlich das beste was du tun kannst ^^
|
|
|
01/06/2013, 14:07
|
#8
|
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
|
Quote:
Originally Posted by martrixmarc
verwende doch einfach mysql_real_escape_string(), das eigentlich das beste was du tun kannst ^^
|
nein wenn man nicht unbedingt sonderzeichen braucht (und das ist meistens der fall) ist eine eigene funtion (die alle zeichen ausser Ziffren und Buchstaben löscht) wie er sie hat besser
|
|
|
01/06/2013, 14:08
|
#9
|
elite*gold: 148
Join Date: Jun 2011
Posts: 1,452
Received Thanks: 90
|
Ja, nur im Normalfall verwendet man auch Sonderzeichen ^^, es kommt halt immer auf den Anwendungsort an.
|
|
|
01/06/2013, 14:18
|
#10
|
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
|
Quote:
Originally Posted by martrixmarc
Ja, nur im Normalfall verwendet man auch Sonderzeichen ^^, es kommt halt immer auf den Anwendungsort an.
|
man kann die whitelist natürlich um "harmlose" sonderzeichen erweitern.
und das reicht dan wirklich für 90% der fälle.
das problem bei mysql_real_escape_string() ist, das die db ja nicht das ende ist, sondern das die daten danach auchnoch weiterverwendet werden. und selbst wenn die daten ohne probeme in die db kommen, kann das programm was die daten hinterher weiterverarbeitet damit probleme bekommmen und Sicherheitslücken öffnen.
|
|
|
01/06/2013, 14:21
|
#11
|
elite*gold: 148
Join Date: Jun 2011
Posts: 1,452
Received Thanks: 90
|
Deswegen verwende ich bei jeder weiteren verarbeitung immer mysql_real_escape_string, dafür habe ich mir ne klasse gemacht und ich hab mich ziemlich daran gewöhnt, da alle abfragen dann einfach durch das gehen.
|
|
|
01/06/2013, 18:16
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
General Coding -> Web Development
#moved
|
|
|
01/06/2013, 18:54
|
#13
|
elite*gold: 1715
Join Date: Dec 2011
Posts: 672
Received Thanks: 207
|
Also, denn geb' ich auch mal meinen Senf dazu:
Am besten verwendet man MySQLi prepared statements, dann hat man schonmal 'ne Typ-Abfrage, ohne wirklich was tun zu müssen.
mysql_real_escape_string, bzw. $mysqli->real_escape_string ist an sich 'ne gute Sache, funktioniert aber natürlich nur bei Strings. Wenn es sich bei der abgefragten get/post-Variable z.B. um einen Integer handelt, sollte man stattdessen intval() verwenden, etc.
Damit reservierte Ausdrücke nicht in jedem Fall einen Fehler schmeißen, schreibt man die Variablen am besten auch noch in Backticks.
Also im Endeffekt etwas wie:
PHP Code:
$db=mysqli_connect(...); $id=intval($_GET['id']); $nick=$db->real_escape_string($_GET['nick']); $sql=$db->prepare('INSERT INTO `mytable` (`id`, `nick`) VALUES (`?`, `?`)'); if($db->errno>0) echo $db->errno,': ',$db->error; $sql->bind_param('is', $id, $nick); $sql->execute(); $sql->close();
|
|
|
01/07/2013, 22:55
|
#14
|
elite*gold: 25
Join Date: Apr 2010
Posts: 1,019
Received Thanks: 331
|
Ich würde dir von msqli abraten. Ganz einfach: Es sind einfach nur "verbesserte" Versionen der normalen MySQL Funktionen, in OOP verpackt. Wenn du dir die Mühe machen solltest:
1.) Baue dir deine eigene DB Klasse mit der du das erreichst was du willst
2.) Oder benutz PDO. PDO bietet alles was mysql(i) bietet, ist universal einsetzbar, kommt mit fast allen Datenbanken von MySQL, MSSQL, PostGreSQL bis SQLite aus. Da biste auf der sicheren Seite.
|
|
|
01/07/2013, 23:05
|
#15
|
elite*gold: 1715
Join Date: Dec 2011
Posts: 672
Received Thanks: 207
|
Quote:
Originally Posted by Synatex
Es sind einfach nur "verbesserte" Versionen der normalen MySQL Funktionen, in OOP verpackt.
|
Ganz genau. Und die Verbesserungen enthalten:
- Verschlüsselung (sichere Verbindung)
- Typvalidierung & Schutz vor SQL-Injections via prepared statements
Entsprechend ist es kein Wunder, dass von offizieller Seite her empfohlen wird, mysql nicht mehr zu verwenden und stattdessen mysqli einzusetzen.
|
|
|
 |
|
Similar Threads
|
Schutz gegen Telekill !
07/24/2011 - Combat Arms - 71 Replies
Hi leute
Ich habe einen schutz gegen telekiller gefunden die auf dem kopf zielen ( das sind ca 95% )
Und er funktionirt wie folgt.
Am besten habt ihr eine gerade wand vor euch ( 90° zum boden ). Jetzt drückt ihr um euch zu bücken und Kricht die ganze zeit zur wand hin. Das bringt das euer kopf in der wand ist, und da ein Telekiller vor euch ist und nicht durch wände messert = ihr bekommt kein Headshot.
Wenn ich euch geholfen habe Press ;D
|
Schutz gegen m32!
04/02/2011 - Combat Arms - 10 Replies
Hej Com,
ihr findet es sicherlich jetzt witzig wegen dem anderen Thread
Schutz gegen Telekill! .
Aber ich habe auch noch ein Tip bei m32.
für den Trick braucht man bissel Übung und gute Zeiteinschätzung.
Mir ist vor paar Wochen mal aufgefallen das wen mich jemand mit einer m32
Angreift JUMP! , ja kein witz jump einfach ! es ist so wen er mit m32 auf dich schießt und du in diesem moment springst, zieht es entweder 0 ab oder -20 und bissel mehr. mir ist das aufgefallen als einer mich 4 mal...
|
[How To]Schutz gegen Hacks
08/02/2010 - Metin2 PServer Guides & Strategies - 33 Replies
Hi,
Da mich diese Skilldmgvervielfältiger,Hit-Dmg usw nerven hab ich eine Lösung gefunden wie ihr sowas unnütz machen könnt.
Tutorial:
Erst müsst ihr euren Server mit einer eigenen Bin zugänglich machen Tut:
http://www.elitepvpers.com/forum/metin2-pserver-gu ides-strategies/587895-how-server-mit-nur-einer-bi n-zug-nglich-machen.html
So danach braucht ihr noch einen Patcher eure bin oder exe und einen File Binder.
Ich empfehle Shocklabs filebinder.
Links darf ich hier nicht posten müsst...
|
[HILFE]SQL-Injection Schutz
07/30/2010 - Metin2 Private Server - 2 Replies
Hallo com,
Ich wurde mit SQL-Injection gehackt ( Meine Regi Page ) doch wen ich in meine Config daten rein gucke Steht das auch dranne :
$pwd = ($_POST) ;
$user = ($_POST) ;
ist das z.B. eine Lücke ?
wenn ja pnt mich und ich schick euch das was ihr rbraucht um mein Regi zu schützen ;(
|
[B]Gegen SQL Injection schützen
07/29/2010 - Coding Tutorials - 6 Replies
Hey Leute,
Ich hab hier mal was nettes für euch.
Ich hab viele Metin2 Hp´s gesehen die sehr SQLI Infitierbar sind.
Und Geb euch hier mal einen Kleinen Quell Code der euch dafor schützen kann.
Es ist kein Tut nur ein Code die wo sich ein wenig aus kennen wissen wohhin damit :P
<?
# Funktion macht Befehle zur Eingabe in SQL-Strings sicher vor Injection, da durch die Eingabe gegebene ' gequoted werden
|
All times are GMT +1. The time now is 13:06.
|
|