THX für die Hilfe!
Bitte um Nachsicht, wenn meine Probleme nicht sehr anspruchsvoll sind. Bin zwar schon [COLOR=crimson]"Junior Member"[/COLOR] hier, aber nach wie vor ein ziemliches Greenhorn.
SQL-Injection
Einklappen
X
-
Original geschrieben von Smartsoul
Das heisst du würdest es so machen?
PHP-Code:$name = mysql_real_escape_string($_POST['name']);
$vorname = mysql_real_escape_string($_POST['vorname']);
//usw.
Einen Kommentar schreiben:
-
Original geschrieben von wahsaga
Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.
PHP-Code:$name = mysql_real_escape_string($_POST['name']);
$vorname = mysql_real_escape_string($_POST['vorname']);
//usw.
Einen Kommentar schreiben:
-
Original geschrieben von icecream
Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
addslashes() oder htmlentities()...
Original geschrieben von Smartsoul
Würde gerne wissen, ob ich [...] das ganze Array $_POST auf einmal mit mysql_real_escape_string bearbeiten kann?
(Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.)
Analog dazu das ganze Array mit htmlspecialchars()
Der Datenbank ist HTML vollkommen egal, für die ist das nur Text - also lasse diesen beim Abspeichern so, wie er ist (ausgenommen natürlich maskieren).
Einen Kommentar schreiben:
-
Würde gerne wissen, ob ich z.B. anstatt
PHP-Code:$name = mysql_real_escape_string($_POST['name']);
$vorname = mysql_real_escape_string($_POST['vorname']);
//usw.
Analog dazu das ganze Array mit htmlspecialchars()
Einen Kommentar schreiben:
-
Um htmlspecialchars() auf alle Elemente in $_POST anzuwenden.
Einen Kommentar schreiben:
-
Du solltest beim Eintrag in die Datenbank so machen:
mysql_real_escape_string($eingabe);
Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
addslashes() oder htmlentities()...
Gruß
icecream
Einen Kommentar schreiben:
-
Original geschrieben von Smartsoul
Etwa so?
PHP-Code:$_POST = array_map(htmlspecialchars($_POST));
Einen Kommentar schreiben:
-
@ highrise
danke für deine ausführliche Erklärung. War allerdings schon soweit klar. Aber schön, dass es jetzt hier nochmal so deutlich steht.
Sorry, wenn ich hier verschiedene Fragen vermischt habe.
Habe den Titel des Threads geändert.Zuletzt geändert von Smartsoul; 07.04.2006, 14:02.
Einen Kommentar schreiben:
-
am thema vorbei:
soo wir reden hier über sql injects?
was zum henker hat html-code damit zu tun... *kopfschüddel*
kurz zur Problematik:
Ein SQL Inject ist der Versuch, mittels Formular illegal die datenbank zu füttern. Das hat nichts damit zu tun, dass jemand html-code reinschreibt. Das kann ja unter gewissen umsänden sogar erwünscht sein.
nein, vielmehr geht es darum, datensätze zu manipulieren oder eigentlich geschützte datensätze auszulesen, indem man geschickt formulierte SQL-Statements per Formular übergibt.
so könnte man zum beispiel bei einem login eine manipulation versuchen:
nehmen wir an, wir wollen nach dem login folgendes tun:
SELECT id FROM users WHERE (email='$_POST[email]') AND (password='$_POST[password]')
der böswillige user würde nun versuchen, die tatsache, dass die daten email und password in der sql-query vorhanden sind, für seine zwecke auszunutzen und eine innere query zu starten..
er könnte zum beispiel dort folgendes statement als password eingeben:
x' OR password<>'x
okay.. zugegebn .. ganz billiger versuch und vermutlich auch nicht wirklungsvoll, aber ich mag jetzt nicht über escapes und anführungszeichen nachdenken. In der realität geht es so nicht, sondern musss chon etwas cleverer angestellt werden.
theoretisch würde das aber (wenn man die escapezeichen uns sonderzeichen bei den ' mal außen vor lässt zu folgender query führen:
SELECT id FROM users WHERE (email='irgendwer@irgendwas.de') AND (password='x' OR password<>'x')
soo.. und schwupps kann ich mich als jeder einloggen, von dem ich nur die emailadresse kennen, denn das passwort wird in jedem fall gleich oder ungleich meiner zeichenfolge sein.
davor gilt es sich zu schützen...
das sollte die eigentlich thematik sein, und nicht die frage, darf mein kleiner user HTML verwenden..
au weia, wie schlimm..
greetz, high
Einen Kommentar schreiben:
-
Und darauf fällt dir mit ein wenig eigenem Nachdenken keine sinnvolle Antwort ein ...?
Warum nicht ein einfaches htmlspecialchars()?
PHP-Code:$_POST = array_map(htmlspecialchars($_POST));
Absichern für MySQL beim Eintragen in MySQL.
Absichern für die Ausgabe bei der Ausgabe.
Einen Kommentar schreiben:
-
Re: SQL-Injection
Original geschrieben von Smartsoul
Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?
Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
Warum nicht ein einfaches htmlspecialchars()?
Frage 3: Macht das überhaupt Sinn, diese beiden Sachen miteinander zu verbinden.
Absichern für MySQL beim Eintragen in MySQL.
Absichern für die Ausgabe bei der Ausgabe.
Einen Kommentar schreiben:
-
SQL-Injection
Hallo Leute,
dies ist ein gemischtes SQL-PHP-Post. Falls ich es jetzt in der falschen Kategorie haben sollte, bitte verschieben.
O.K. here we go ...
Wenn ich das damals richtig verstanden habe, ist dies
PHP-Code:mysql_real_escape_string($_POST['username'])
Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?
und weiter ...
Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
PHP-Code:// ALWAYS clean the POST variables of any HTML tags first.
// And here we do it in one easy step.
$_POST = array_map('strip_tags', $_POST);
Falls Antwort auf Frage 1 = ja
Frage 2: Kann ich das so machen?
PHP-Code:$_POST = array_map('strip_tags', mysql_real_escape_string($_POST));
Für eure weisen Antworten wie immer dankbarZuletzt geändert von Smartsoul; 07.04.2006, 14:01.Stichworte: -
Einen Kommentar schreiben: