Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 20:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Formular Sicherheit

Discussion on Formular Sicherheit within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
lnqlorlouz's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 405
Received Thanks: 84
Unhappy Formular Sicherheit

Hey,

hab eine kleine Frage. Ich komme gerade nicht drauf, wie ich das nochmal beheben kann.
Ich habe ein Formular und speichere die Einträge so:
PHP Code:
$username $_POST['username'];
mysqli_real_escape_string($username);
$message $_POST['message'];
mysqli_real_escape_string($message);
date_default_timezone_set('Europe/Berlin');
$timestamp time(); 
// $date = date("d.m.Y - H:i",$timestamp);

$sql "INSERT INTO test (username, message, date)
VALUES ('
$username', '$message', '$timestamp');"
1. Bringt mir das mysqli_real_escape_string an der Stelle etwas?
2. Wenn ein User bzw. Ich als Tester das hier eingebe:
HTML Code:
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
und ich gebe das Formular aus, auf meine Seite, dann wird man weitergeleitet auf die selfhtml.org Seite. Wie kann ich solche Befehle unnützlich machen bzw. das es die erst gar nicht einträgt?

Und ja ich weiß ich kann da noch mehr absichern, trim, if(empty) etc, kommt noch.

Grüße
lnqlorlouz is offline  
Old 11/29/2014, 13:23   #2
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
So wie du es momentan hast nicht. Würdest du schreiben:

PHP Code:
$message mysqli_real_escape_string($_POST['message']); 
dann schon. Denn so wie du es jetzt hast wird deine escapte Expression nirgends gespeichert und auch nicht übergeben.

Alternativ kannst du auch die prepare Funktion von mysqli nutzen, oder auf PDO umsteigen und dort die prepare Funktion nutzen.

Bezüglich der Weiterleitung:
Solche Dinge (xss-Lücken) lassen sich beispielsweise über htmlspecialchars / htmlentities o.ä umgehen. Natürlich kannst du dir auch dein eigenes Pattern schreiben und dann die Eingaben prüfen.
NotEnoughForYou is offline  
Thanks
2 Users
Old 11/29/2014, 13:29   #3
 
lnqlorlouz's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 405
Received Thanks: 84
Hab ich mir doch fast gedacht, dass das so nicht gehen kann.

Stimmt! Htmlentities und htmlspecialchars hatte ich vor einer Weile mal benutzt, wusste aber nicht mehr wie die Begriffe heißen.

Danke!
lnqlorlouz is offline  
Old 12/04/2014, 17:38   #4
 
RecK's Avatar
 
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
Stopp! HTMLEntities sind HTML-Elemente.
Das hat im Groben erstmal nichts mit mysql_escape zu tun.
Das eine (mysqll_escape) dient zur Präventation von SQL-Injection.
Ein Beispiel dafür:
Du nimmst eine ID via GET-Parameter entgegen. Nun kann ich,
wenn du die ID ohne mysql_escape in das WHERE schmeißt SQL dazu packen.
Beispiel (statt id=1 dann id=1 OR name!='') so nun kriege ich nicht ide Benutzer mit der ID,
sondern mit der ID oder wo der Name nicht leer ist ... Denke das brauch man nicht
weiterführen und es ist klar, das sowas ssehr gefährlich ist, besonders
wenn Fehlermeldungen auf der Seite angezeigt werden (Connection fails, ..)

HTMLEntities wiederum escaped JavaScript-Tags und unerlaubte HTML-Elemente.
Das ist gefährlich, wenn ich in ein Gästebuch JavaScript einbinde, beispiel:
<script>window.location.href="böse seiite.de";</script>
Wenn der Eintrag so in die Datenbank kommt, werden alle Benutzer nun auf eine Seite
kommen, worauf meine Umleitung per JavaScript referenziert..Gaanz böse!
So werden auch Portscans auf Webseiten untergebracht usw.

Sehr wichtig und das eine ersetzt niemals das andere.
In PHP5 übernehmen die filter_input Funktionen glaube den Aufruf beider Funktionen.

Wie bereits gesagt gibt mysql_escpae einen String zurück,
der gespeichert und verwendet werden muss
Wenn du PHP>5.2 bist solltest du nicht mehr $_POST verwenden!



lg, Tim
RecK is offline  
Old 12/04/2014, 18:27   #5
 
lnqlorlouz's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 405
Received Thanks: 84
Quote:
Originally Posted by RecK View Post
[...]
Alles klar. Das mit dem SQL-Injections kenne ich bereits. Hab das nun auch gut gelöst bekommen:
insert.php
PHP Code:
$message mysqli_real_escape_string($conn$_POST['message']);
$message trim($message);
if (empty(
$message)) {
die (
''.header("Location: formular.php?info=forgotmessage").'');}
$message htmlspecialchars($message); 
Jetzt ist es nicht mehr möglich (ich hab's probiert und denke es), eine Weiterleitung zu machen. Eine SQL-Injection ist ebenso nicht möglich, da escaped wird. Vielleicht hast du ja noch Tipps, schneller, besser?

Habe mein Formular per HTML, nicht per Java geschrieben. Java bin ich noch nicht groß angegangen, nur grob.
lnqlorlouz is offline  
Old 12/04/2014, 18:28   #6
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Quote:
Originally Posted by RecK View Post
Wie bereits gesagt gibt mysql_escpae einen String zurück,
der gespeichert und verwendet werden muss
Wenn du PHP>5.2 bist solltest du nicht mehr $_POST verwenden!
Warum sollte er das denn nicht mehr verwenden?!

PDO ist die Zukunft und erleichtert dem Programmmierer die Arbeit, etliche Sicherheitsprobleme von selbst zu lösen.
Mikesch01 is offline  
Old 12/04/2014, 18:40   #7
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
Quote:
Originally Posted by RecK View Post
Stopp! HTMLEntities sind HTML-Elemente.
Das hat im Groben erstmal nichts mit mysql_escape zu tun.
Das eine (mysqll_escape) dient zur Präventation von SQL-Injection.
Ein Beispiel dafür:
Du nimmst eine ID via GET-Parameter entgegen. Nun kann ich,
wenn du die ID ohne mysql_escape in das WHERE schmeißt SQL dazu packen.
Beispiel (statt id=1 dann id=1 OR name!='') so nun kriege ich nicht ide Benutzer mit der ID,
sondern mit der ID oder wo der Name nicht leer ist ... Denke das brauch man nicht
weiterführen und es ist klar, das sowas ssehr gefährlich ist, besonders
wenn Fehlermeldungen auf der Seite angezeigt werden (Connection fails, ..)

HTMLEntities wiederum escaped JavaScript-Tags und unerlaubte HTML-Elemente.
Das ist gefährlich, wenn ich in ein Gästebuch JavaScript einbinde, beispiel:
<script>window.location.href="böse seiite.de";</script>
Wenn der Eintrag so in die Datenbank kommt, werden alle Benutzer nun auf eine Seite
kommen, worauf meine Umleitung per JavaScript referenziert..Gaanz böse!
So werden auch Portscans auf Webseiten untergebracht usw.

Sehr wichtig und das eine ersetzt niemals das andere.
In PHP5 übernehmen die filter_input Funktionen glaube den Aufruf beider Funktionen.

Wie bereits gesagt gibt mysql_escpae einen String zurück,
der gespeichert und verwendet werden muss
Wenn du PHP>5.2 bist solltest du nicht mehr $_POST verwenden!



lg, Tim
Es wurde doch auch nicht behauptet, dass htmlentities was mit sql injection zu tun hätten?
NotEnoughForYou is offline  
Old 12/04/2014, 19:57   #8
 
RecK's Avatar
 
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
Quote:
Originally Posted by NotEnoughForYou View Post
Es wurde doch auch nicht behauptet, dass htmlentities was mit sql injection zu tun hätten?
Sorry hatte das in Klammern (xss-Lücke) nicht gelesen und dachte du beziehst dich mit htmlentities auf mysql_escape und dessen Nutzung beziehst Mein Fehler!

Und bei $_POST geht es auch nicht um PDO oder sonstige Treiber,
sondern um die PHP super-globals die seit PHP5.2+ nicht mehr direkt angesprochen werden sollen, sondern filter_input erwendet werden. Diese Funktion übernimmt direkt wieder Arbeit für den Programmier und hat nichts mit PDO zu tun. Das gilt auch für Cookies, GET, Request, Server -globals ...
RecK is offline  
Old 12/04/2014, 20:34   #9
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Meine Frage sollte eigentlich eigenständig sein^^

Wollte das mit PDO noch zusätzlich erwähnen.

Wo steht denn, dass man nun filter_input benutzen soll? Ich glaube kaum, dass die Global Variablen in nächster Zeit deprecated werden.

Gruß
Mikesch01 is offline  
Old 12/04/2014, 21:04   #10
 
RecK's Avatar
 
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
Das sie als deprecated makiert werden ist sehr unwahrscheinlich.
Im Hintergrund von filter_input werden diese ja auch verwendet.
Gut ein Standard ist es nicht, jedoch bietet es PHP 5 an und daher sollte man es auch nutzen,
bzw man tut denke ich nichts falsch, wenn man PHP validieren lässt
RecK is offline  
Old 12/04/2014, 22:52   #11
 
lnqlorlouz's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 405
Received Thanks: 84
Quote:
Originally Posted by RecK View Post
Das sie als deprecated makiert werden ist sehr unwahrscheinlich.
Im Hintergrund von filter_input werden diese ja auch verwendet.
Gut ein Standard ist es nicht, jedoch bietet es PHP 5 an und daher sollte man es auch nutzen,
bzw man tut denke ich nichts falsch, wenn man PHP validieren lässt
Da ich das mit dem $_POST draufhabe und kaum Zeit für die neuen Anwendungen/Funktionen habe bzw. mich nicht groß damit beschäftigen will, reicht mir das was ich bisher weiß und kann. Aber das scheint eine gute Idee zu sein, sich das mal anzuschauen. Wohl nicht umsonst wurde diese - neue - Funktion implementiert. Mal schauen was ich rausholen kann und ob Sie mir zusagt. Natürlich wenn ich Zeit habe... Danke euch.
lnqlorlouz is offline  
Reply


Similar Threads Similar Threads
suche formular
05/12/2014 - General Coding - 4 Replies
hey suche jemanden der mir ein formular erstellen kann wo man name nachname adresse tel und email eingeben muss skype: rebulm11 mfg
[S] php Formular (Web-Dev)
06/18/2013 - elite*gold Trading - 4 Replies
Hallo ich suche ein Formular zum einbinden in eine Website. Eigentlich recht einfach. Es gibt vorgegebene Werte und variable Ergebnisse. Beispiel:
Javascript Formular.
04/07/2011 - Web Development - 5 Replies
Ich brauche hilfe bei ein Javascript formular. Ich will/soll ein Formular erstellen, dass die Felder "Name" ; "Vorname" ; "Straße" & "PLZ/Ort" enthalten soll. Ich bin totaler Javascript newbie. Kann mir jemand eine Seite schicken wo alles erklärt ist bzw. man es lernt.? Wäre nett. €dit: Es soll beim Drücken des "Senden"-Buttons Prüfen ob alle Felder beschrieben sind.
[SUCHE]Formular
05/17/2010 - General Coding - 6 Replies
Hallo, Ich suche wenn der für mich ein Script Coden kann. In dem Script geht es um Folgendes: Es Soll ein Formular sein in das sich user eintragen können mit nachname, vorname und Uhrzeit. Sobald er absenden klickt sollen die Eingaben auf eine Weitere Seite mit einer Tabelle eingetragen werden. Kann mir wer Helfen? mfg xforcer
PHP-Formular
03/09/2006 - Off Topic - 10 Replies
Huhu, Ich habe vor einer Woche als Hausaufgabe aufbekommen, ein PHP-Forumlar anzufertigen. Es sollte ein einfaches Formular sein, mit einer kurzen Eingabe und Ausgabe. Nun habe ich das bis heute total verpeilt und muss morgen abgeben. Doch von PHP hab ich null Plan. Kann mir jemand den Code fuer ein leichtes PHP-Formular geben oder eine Page mit verschiedenen Templates ? Wäre echt klasse, gibt auch karma +



All times are GMT +1. The time now is 20:19.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.