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)
Formular:sicherstellen das mit Ajax gesendetes Formular vom eigenen Formular stammt? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Formular:sicherstellen das mit Ajax gesendetes Formular vom eigenen Formular stammt?


 
Pums
02-12-2009, 16:10 
 
Hallo,
also ich habe ein Formular welches mit Hilfe von JS gebrüft wird, und nur wenn alles meine Vorgaben entspricht wird es an den Server geschickt und PHP ausgewertet.
Gibt es eine Möglichkeit mit der ich verhindern kann das sich irgendwer ein eigenes Formular bastelt und somit die JS-Prüfung umgeht?

 
streuner
02-12-2009, 16:17 
 
Hi!

Was machst Du eigentlich mit den Leuten, die JavaScript deaktiviert haben? Die umgehen damit ja auch dein Prüfung!

mfg streuner

Zu deiner Frage: http://forum.de.selfhtml.org/archiv/2004/6/t82636/

 
Pums
02-12-2009, 16:31 
 
Danke, für deine Antwort.
Leider habe ich nicht ganz verstanden wie genau dies mir helfen könnte?
Eine Session zu starten bringt nichts, dann öffnet derjenige einfach ein zweiten Tab.


JS setze ich zur Nutzung vorraus, anssonsten bekommt der User schon beim aufrufen des Formulars eine Meldung das JS aktiviert werden muss.
Wenn JS nicht aktiviert ist, ist das Formular nicht absendbar.

 
streuner
02-12-2009, 16:38 
 
Kannst es dem User zumindestens erschweren, schau Dir das Beispiel hier an (Stichwort microtime):

http://www.selfphp.de/kochbuch/kochbuch.php?code=21


mfg streuner

 
Pums
02-12-2009, 17:31 
 
Danke dir für deine Mühe,
leider bringt es nichts.
Wahrscheinlich gibt es keine Möglichkeit dies zu verhindern.
Ich will keine doppelte Absendung verhindern.

Ich möchte verhindern das jmd. die JS-Prüfung umgeht, also einfach das Formular nachbastelt, mein Formular aufruft sich die id's,name', und values der hiddenfelder kopiert und dann an php via nachgebauter JS sendet.

Ich denke da muss ich via PHP die getätigten eingaben trotzdem nochmal auf gewisse zeichen prüfen.

Aber dir vielen Dank, irgendwann wirds mir sicher helfen :))).

 
Kropff
02-12-2009, 21:53 
 
Ich denke da muss ich via PHP die getätigten eingaben trotzdem nochmal auf gewisse zeichen prüfen.
Sollte man imho immer machen, da man clientseitig eh sehr viel manipulieren kann.

Peter

 
AmicaNoctis
03-12-2009, 01:46 
 
Hallo,

nochmal zum Verständnis: Geht es darum, dass die hidden-Felder nicht manipuliert werden dürfen oder um die Daten, die der Benutzer selbst eingibt?

Wenn es nur um die hidden-Felder geht und die nicht mit JS gesetzt werden sondern vom Server kommen: Benutze eine Session und speichere die Infos dort drin, statt in hidden-Feldern.

Wenn es um die hidden-Felder geht und die mit JS gesetzt werden: Was willst du eigentlich verhindern? Kann man das nicht auch PHP-seitig (nochmal) prüfen? Ist es das was du mit "gewisse Zeichen" meinst?

Gruß,

Amica

 
Pums
04-12-2009, 15:52 
 
Es ging halt einfach nur um die übliche Prüfung der eingegebenen Daten auf nicht erlaubte Zeichen(Name darf keine Zahl erhalten usw.), Sonderzeichen die gefählich sein könnten(z.B.<>).
Ich habs mit JS gemacht da ich einfach allg. eine den Server vorab vor solche Daten schützen möchte und um Benutzerfreundlicher zu werden.

Natürlich kann es dann passieren das jmd. die Daten direkt an den Server schickt, man kann ja das JS sowie die Formulardaten(id's,hiddenfelder etc.) sehr leicht auslesen.

Nun dachte ich mir vllt. gibts ja ne Möglichkeit am Server zu prüfen ob die Daten von meinem Formular über mein Http(post)Request von JS bzw. Ajax gesendet wurden.
Das würde einfach eine erneute Kontrolle der Daten am Server ersparen.

Da das logischerweise nicht geht, überprüf ich das gnaze also trotzdem nochmal mit am Server.

Ich danke euch :).

 
unset
04-12-2009, 15:58 
 
Übrigens sollte man sich langsam mal von dem Schwarz-Weiß Denken ala "es gibt nur JavaScript an und JavaScript aus" verabschieden. In Zeiten, in denen Browser ein unerwünschtes von einem erwünschten PopUp unterscheiden können, kann ein Browser auch nervige Alters unterbinden. Und dann besteht auch noch die Möglichkeit, dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere (vor allem wenn ich z.B. merke, dass da ein übereifriger Entwickler mal wieder der Meinung wäre, ich dürfte keine Plus-Zeichen in meiner eMail-Adresse haben, da diese damit ungültig wäre).

 
wahsaga
04-12-2009, 17:27 
 
Ich habs mit JS gemacht da ich einfach allg. eine den Server vorab vor solche Daten schützen möchte
Den Server brauchst du vor solchen Sachen nicht „schützen”.

Nun dachte ich mir vllt. gibts ja ne Möglichkeit am Server zu prüfen ob die Daten von meinem Formular über mein Http(post)Request von JS bzw. Ajax gesendet wurden.
Nein, die gibt es nicht.
Das würde einfach eine erneute Kontrolle der Daten am Server ersparen.
Diese Kontrolle ist generell unverzichtbar.

 
Pums
04-12-2009, 18:54 
 
Übrigens sollte man sich langsam mal von dem Schwarz-Weiß Denken ala "es gibt nur JavaScript an und JavaScript aus" verabschieden. In Zeiten, in denen Browser ein unerwünschtes von einem erwünschten PopUp unterscheiden können, kann ein Browser auch nervige Alters unterbinden. Und dann besteht auch noch die Möglichkeit, dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere (vor allem wenn ich z.B. merke, dass da ein übereifriger Entwickler mal wieder der Meinung wäre, ich dürfte keine Plus-Zeichen in meiner eMail-Adresse haben, da diese damit ungültig wäre).


Danke, für deine Antwort.

Zu meiner Verteidigung möchte ich auch darauf Hinweisen das ich ein Neuling bin, beschäftige miche erst seit 1/2 Jahr mit der Webprogrammierung, muss also noch ne Menge lernen(danke das es solche Foren gibt :) ).

"auch nervige Alters unterbinden"->Was meinst du mit Alters?

"dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere"-> aber dann wird ja nicht gesendet, das das onclick-Event nicht ausgeführt wird.Ist übrigends kein submit sondern ein button.




@wahsaga
hab ich mir fast gedacht(zu allen 3 Punkten).Hätt ja sein können das es ne Möglichkeit gibt.Danke:)

 
wahsaga
04-12-2009, 18:59 
 
"auch nervige Alters unterbinden"->Was meinst du mit Alters?
Tippfehler, Alert dürfte gemeint gewesen sein - window.alert()

"dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere"-> aber dann wird ja nicht gesendet, das das onclick-Event nicht ausgeführt wird.Ist übrigends kein submit sondern ein button.
Total egal. Bereits wenn sich der Fokus in einem Text-Input befindet, lässt sich ein Formular mittels Entertaste abschicken.

 
Pums
04-12-2009, 19:22 
 
1.ahhh, alles klar, alerts gibts aber net.
2.ich glaub ich poste mal den Code, bei mir lässt sich das Formular nicht über ein Enter abschicken da es ja via Ajax an den Server gesendet wird .

Also hier Das Formular was ich übergebe:

<?php
$Cont='
<noscript><b>Sie müssen Javascript aktivieren!!!</b></noscript>
<script type="text/javascript" src="JS/register.js"></script>
<script type="text/javascript" src="JS/Form_Error.js" ></script>
<span class="sys_Error" id="Form_Error">&nbsp;</span>

<form action="not_form.php" method="post" class="register" name="register">
<table class="Form">
<tr>
<td>Vorname:</td>
<td>
<input type="text" name="Data[]" id="0"/><span class="sys_hidden" id="reg_Firstname">Vorname darf nur A-Z und ´` enthalten</span>
</td>
</tr>
<tr>
<td>
Nachname:
</td>
<td>
<input type="text" name="Data[]" id="1"/><span class="sys_hidden" id="reg_Lastname">Nachname darf nur A-Z und ´` enthalten</span>
</td>
</tr>
<td>
Strasse:
</td>
<td>
<input type="text" name="Data[]" id="2"/><span class="sys_hidden" id="reg_Street">Straße darf keine Sonderzeichen enthalten</span>
</td>
</tr>
<tr>
<td>
PLZ
</td>
<td>
<input type="text" name="Data[]" id="3"/><span class="sys_hidden" id="reg_PLZ">PLZ müssen 5 Zahlen sein</span>
</td>
</tr>
<tr>
<td>
Stadt
</td>
<td>
<input type="text" name="Data[]" id="4"/><span class="sys_hidden" id="reg_City">Stadt darf nur Buchstaben enthalten</span>
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<input type="text" name="Data[]" id="5"/><span class="sys_hidden" id="reg_Email">Email ist falsch</span>
</td>
</tr>
<tr>
<td>
Benutzername:
</td>
<td>
<input type="text" name="Data[]" id="6"/><span class="sys_hidden" id="reg_Username">Muss mind. 5 Zeichen haben, darf keine Sonderzeichen enthalten!</span>
</td>
</tr>
<tr>
<td>
Passwort
</td>
<td>
<input type="password" name="Data[]" id="7"/><span class="sys_hidden" id="reg_Password"></span>
</td>
</tr>
<tr>
<td>
Passwort wiederholen
</td>
<td>
<input type="password" name="Data[]" id="8"/>
</td>
</table>
<input type="button" value="los" onclick="return send_form()"/>

</form>

';
?>


und hier die send_form Funktion:


function send_form()
{
var check=check_form();
Form_Error(Error);
if(check!=false)
{
var reg_send="Fname="+document.getElementById(0).value+"&Lname="+document.getElementById(1).value;
reg_send+="&Street="+document.getElementById(2).value+"&PLZ="+document.getElementById(3).value;
reg_send+="&City="+document.getElementById(4).value+"&Email="+document.getElementById(5).value;
reg_send+="&Uname="+document.getElementById(6).value+"&PW1="+document.getElementById(7).value;

ro.open("post","Templates/register_sys.php");
ro.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ro.onreadystatechange=statehandler;
ro.send(reg_send);
}

}

check_form und Form_Error sind glaube ich unwichtig(sind nur nen paar repexp und Fehlermeldungen.

Ich verstehe nicht wie man das Formular ohne JS absenden könnte, ausser nen fakeformular an register_sys.php zu senden.

 
wahsaga
04-12-2009, 19:34 
 
Ich verstehe nicht wie man das Formular ohne JS absenden könnte, ausser nen fakeformular an register_sys.php zu senden.
Dazu würde es wohl schon reichen, einfach die action des Formulars auf register_sys.php zu ändern (bspw. mit Firebug).


Gewöhne dir einfach ab, bei der serverseitigen Verarbeitung an Dinge wie „Webseite”, „Formular” oder „Browser” zu denken. Du weisst nicht, ob überhaupt auch nur eines dieser Dinge im Spiel war.
Alles, was du weisst, ist, dass ein Request deinen Server erreicht hat, und jetzt vom Server verarbeitet werden will - und das unter Beachtung der notwendigen Sicherheitsmaßnahmen. Sonst weisst du nichts - was aber auch nichts macht, denn alles andere ist komplett uninteressant.

 
Pums
04-12-2009, 19:40 
 
Ok, danke.
Also sollte ich jeden Eingang am Server so behandeln als ob er frisch aus der Druckerpresse kommt(also total ungeprüft, von überall und jeden kommen könnte).

JS könnte ich einfach nur nutzen um das ganze besser aussehen bzw. wirken zu lassen.

Hab ich das richtig verstanden?

 
wahsaga
04-12-2009, 19:55 
 
Ja.

 
Pums
04-12-2009, 20:09 
 
Danke.
Kann dann als erfolgreich belehrt markiert(geschlossen) werden.
Schön das es solche Foren gibt, Bücher und Tutorials sind zwar gut zum lernen, aber verstehen die meistends das individuelle Problem(Verständnissproblem) nicht.


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