Formulardaten entschärfen
Ilja
- php
yo,
ich bin gerade dabei, ein wenig an meiner webseite zu basteln, typische kombination aus php und apache. die scripte fangen zwar inhaltlich fehlerhafte eingaben ab, auch berechtigungen werden geprüft, aber in punkto sicherheit passiert leider noch nicht ehr viel. meine frage ist also, was muss ich alles genau beachten, wenn ich formular-angaben wie namen, email, etc. in mein scipt mit einbaue und sie gegenbenfalls in die datenbank schreibe, damit mir keiner einen code (php oder mysql) unterjubelt ?
Ilja
hi,
meine frage ist also, was muss ich alles genau beachten, wenn ich formular-angaben wie namen, email, etc. in mein scipt mit einbaue und sie gegenbenfalls in die datenbank schreibe, damit mir keiner einen code (php oder mysql) unterjubelt ?
eigentlich sollte mysql_real_escape_string() alles abfangen, was zum kompromitieren der DB selbst über sql injections tauglich wäre.
php-code in der übergabe - wen kümmert's? wenn du nicht nachher irgendeinen unfug in der form eval($datenbankinhalt) machst, sollte dich das doch recht wenig interessieren müssen ...
gruß,
wahsaga
Hallo,
eigentlich sollte mysql_real_escape_string() alles abfangen, was zum kompromitieren der DB selbst über sql injections tauglich wäre.
php-code in der übergabe - wen kümmert's? wenn du nicht nachher irgendeinen unfug in der form eval($datenbankinhalt) machst, sollte dich das doch recht wenig interessieren müssen ...
Hm. Nein. Traue niemandem. Validiere allen Input oder stirb.
Bsp.:
----------------------------------------------------
<input type="text" name="var"
value="<?php echo $_REQUEST['var']; ?>"/>
----------------------------------------------------
Jetz gebe ich in das Textfeld ein:
"/><script>while(true){}</script>
http://www.dclp-faq.de/q/q-formular-text.html
http://www.dclp-faq.de/q/q-formular-verarbeitung.html
http://www.dclp-faq.de/ch/ch-security.html
viele Grüße
Axel
yo,
danke euch beiden für die tipps, werde meine scripte dem anpassen.
Ilja
hi,
Hm. Nein. Traue niemandem. Validiere allen Input oder stirb.
ich hatte die frage so verstanden, dass es zunächst mal um serverseitige lücken geht - also sql injections, etc.
<input type="text" name="var"
value="<?php echo $_REQUEST['var']; ?>"/>Jetz gebe ich in das Textfeld ein:
"/><script>while(true){}</script>
gut, das ist die bearbeitung bei der _ausgabe_ der daten.
in meinen augen eine vollkommen andere baustelle.
gruß,
wahsaga
Hello,
ich hatte die frage so verstanden, dass es zunächst mal um serverseitige lücken geht - also sql injections, etc.
"/><script>while(true){}</script>
gut, das ist die bearbeitung bei der _ausgabe_ der daten.
in meinen augen eine vollkommen andere baustelle.
Volle Zustimmung oder um "Zeugnissprache" zu sprechen: "vollste Zustimmung"
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello Axel,
php-code in der übergabe - wen kümmert's? wenn du nicht nachher irgendeinen unfug in der form eval($datenbankinhalt) machst, sollte dich das doch recht wenig interessieren müssen ...
Hm. Nein. Traue niemandem. Validiere allen Input oder stirb.
Bsp.:
<input type="text" name="var"
value="<?php echo $_REQUEST['var']; ?>"/>Jetz gebe ich in das Textfeld ein:
"/><script>while(true){}</script>
Das macht ja auch kein vernünftiger Mensch.
1. > <input type="text" name="var" value="<?php echo htmlentities(strip($_POST['var']); ?>"/>
( strip zieht optional die Backslashes, wenn get_magic_quotes_gpc() )
2. "/><script>while(true){}</script>
Nun sag mir mal, was daran für wen gefährlich werden kann.
Man sollte aber in an der passenden Stelle das richtige mit den Daten veranstalten uns sie nicht irgendwo zwischendrin "verkurbeln".
In die Datenbank gehören Rohdaten.
Dazu muss man
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
<input type="text" name="var" value="<?php echo htmlentities(strip($_POST['var']); ?>"/>
( strip zieht optional die Backslashes, wenn get_magic_quotes_gpc() )
PHP kennt kein strip(). das hast du dir nur eingebildet, vermutlich weil du den gestrigen abend zu lange in einschlägigen etablissements verbracht hast :-)
stripslashes() meintest du sicher.
gruß,
wahsaga
Hello,
<input type="text" name="var" value="<?php echo htmlentities(strip($_POST['var']); ?>"/>
( strip zieht optional die Backslashes, wenn get_magic_quotes_gpc() )
PHP kennt kein strip(). das hast du dir nur eingebildet, vermutlich weil du den gestrigen abend zu lange in einschlägigen etablissements verbracht hast :-)
Schade, doch nur "zu unserer vollen Zufriedenheit"
Steht doch da oben, was strip() macht. Wenn es eine PHP-eigene Funktion wäre, hätte ich doch keine Erklärung dazu abgegeben oder aber einen Link aufs Manual gesetzt.
Aber nun bekommst Du einen Link ins Archiv: http://forum.de.selfhtml.org/archiv/2004/1/68384/#m392313
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
Schade, doch nur "zu unserer vollen Zufriedenheit"
tja, dann muss ich wohl noch dran arbeiten ;-(
Steht doch da oben, was strip() macht. Wenn es eine PHP-eigene Funktion wäre, hätte ich doch keine Erklärung dazu abgegeben
als eben solche hatte ich es aber verstanden ...
gruß,
wahsaga
Hallo,
Aber nun bekommst Du einen Link ins Archiv: http://forum.de.selfhtml.org/archiv/2004/1/68384/#m392313
hat es eigentlich ein Grund, warum du immer soviele Klammern setzt?
function strip($data){
if (!get_magic_quotes_gpc()) return $data;
if (is_array($data)) foreach($data as $key => $val) $data[$key] = strip($val);
else $data = stripslashes($data);
return $data;
}
das ist doch schön klein und fein ;-)
Hello,
hat es eigentlich ein Grund, warum du immer soviele Klammern setzt?
Ja, weil sich so ein Code leichter pflegen lässt.
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
Denn das ist ein böser Angriff auf die gemeinsame Leistungsfähigkeit.
function strip($data)
{
if (!get_magic_quotes_gpc())
{
return $data;
}
if (is_array($data))
{
foreach($data as $key => $val)
{
$data[$key] = strip($val);
}
}
else
{
$data = stripslashes($data);
}
return $data;
}
das ist doch schön klein und fein ;-)
Und leider hat es einen Schachtelungsfehler gehabt.
Ein Zeilenumbruch kostet weniger, als die spätere Fehlersuche.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
das dürfte dem arbeitsgericht hohe auslastung verschaffen.
gruß,
wahsaga
Hallo,
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
das dürfte dem arbeitsgericht hohe auslastung verschaffen.
und ob der Chef damit durchkommt mage ich zu bezweifeln,
wenn darauf nicht hingewiesen wurde...
Hello,
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
das dürfte dem arbeitsgericht hohe auslastung verschaffen.
und ob der Chef damit durchkommt mage ich zu bezweifeln,
wenn darauf nicht hingewiesen wurde...
Darauf kannst Du einen lassen, dass darauf hingewiesen wurde. Das ist eine verbindliche Arbeitsanweisung.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
das dürfte dem arbeitsgericht hohe auslastung verschaffen.
und ob der Chef damit durchkommt mage ich zu bezweifeln,
wenn darauf nicht hingewiesen wurde...Darauf kannst Du einen lassen, dass darauf hingewiesen wurde. Das ist eine verbindliche Arbeitsanweisung.
davon war vorher nicht die Rede ;-)
trotzdem bleibt diese vorgehensweise unübersichtlich ;)
function strip($data){
if (!get_magic_quotes_gpc()){
return $data;
}
if (is_array($data)){
foreach($data as $key => $val){
$data[$key] = strip($val);
}
}
else{
$data = stripslashes($data);
}
return $data;
}
mit dieser Schreibweise lasse ich mich ja noch zufrieden stellen ;-)
ps. du hast meine Frage noch nicht beantwortet *g*
das ist doch schön klein und fein ;-)
Und leider hat es einen Schachtelungsfehler gehabt.
dann muss deins schon ein Schachtelungsfehler haben, ich hatte es eben gekützt
ich dort kein Fehler, könntest du mir den bitte bei meinen Code zeigen?!
Hello,
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
das dürfte dem arbeitsgericht hohe auslastung verschaffen.
Wieso, ich bin doch auch noch da. Und ich weiß doch immer alles besser *scnr*
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
Hello,
hat es eigentlich ein Grund, warum du immer soviele Klammern setzt?
Ja, weil sich so ein Code leichter pflegen lässt.
also ich persönlich finde den Code, so wie du ihn geschrieben hast... unübersichtlich
Jeder, der es bei uns so formatiert wie Du, wird fristlos gekündigt.
also das finde ich ja jetzt absolut übertrieben...
man kann ja jemand darauf hinweissen, dass amn es bitte so machen soll
Denn das ist ein böser Angriff auf die gemeinsame Leistungsfähigkeit.
darüber lässt sich jetzt streiten...
function strip($data)
{
if (!get_magic_quotes_gpc())
{
return $data;
}if (is_array($data))
{
foreach($data as $key => $val)
{
$data[$key] = strip($val);
}
}
else
{
$data = stripslashes($data);
}return $data;
}das ist doch schön klein und fein ;-)
Und leider hat es einen Schachtelungsfehler gehabt.
dann muss deins schon ein Schachtelungsfehler haben, ich hatte es eben gekützt
ich dort kein Fehler, könntest du mir den bitte bei meinen Code zeigen?!
Ein Zeilenumbruch kostet weniger, als die spätere Fehlersuche.
in der gekürzten Variante finde ich schneller Fehler, als bei der langen... wie schnell sich da Klammerfehler einbauen lassen
Hallo,
"/><script>while(true){}</script>
Nun sag mir mal, was daran für wen gefährlich werden kann.
Ja, genau das wird in http://www.dclp-faq.de auch beschrieben.
Man sollte aber in an der passenden Stelle das richtige mit den Daten veranstalten uns sie nicht irgendwo zwischendrin "verkurbeln".
Ja, aber Eure Trennung zwischen Eingabe und Ausgabe sehe ich nicht. In den meisten Scripten wird nach Absenden des Formulars der Response aus den empfangenen Formularinhalten generiert. Sie werden nicht erst in die Datenbank geschrieben, dann wieder aus der Datenbank gelesen und dann erst für den Response verwendet. Nur dann aber wäre mysql_real_escape_string() ausreichend als Absicherung. Darauf wollte ich hinweisen.
viele Grüße
Axel
Hello,
"/><script>while(true){}</script>
Nun sag mir mal, was daran für wen gefährlich werden kann.
Man sollte aber in an der passenden Stelle das richtige mit den Daten veranstalten und sie nicht irgendwo zwischendrin "verkurbeln".
Ja, aber Eure Trennung zwischen Eingabe und Ausgabe sehe ich nicht.
Besser einmal zuviel hingewiesen, als einmal zuwenig ;-)
Aber du hast mit der verkürzten Darstellung angefangen, da haben wir (ich zumindest) angenommen, dass man nicht erst einen Roman schreiben sollte.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom