Formular: Absendebutton im Konflikt mit VirenScanner
matthias
- html
Im Selfhtml-Handbuch wird unter dem Thema
"Buttons zum Absenden oder Abbrechen definieren"
unter anderem als Beispiel angegeben:
<input type=submit value="Formular abschicken">
Dem Absendebutton ist somit kein Name zugeordnet.
Auch meines Erachtens nix besonderes, aber kann dies für einen Angriff genutzt werden?
Nachfolgend zwei Beispiele. Im Beispiel 1 bleibe ich in unserem VirenScanner hängen,
im Beispiel 2 komme ich durch. Gibt es Gründe, warum?
Beispiel 1:
<form name="form1" method="post" action="naechsteseite.php">
<input type="submit" value="Abschicken">
</form>
Beispiel 2:
<form name="form1" method="post" action="naechsteseite.php">
<input type="submit" value="Abschicken" name="abschicken">
</form>
Gruß
Matthias
Dem Absendebutton ist somit kein Name zugeordnet.
Soltest du immer machen, da dies ein Variablenbezeichner ist, welcher im PHP-Script ausgewertet werden kann.
Auch meines Erachtens nix besonderes, aber kann dies für einen Angriff genutzt werden?
Noch nie davon gehört.
Du kannst aber das Formular nachbasteln und mit deinen Werten füllen, und dann, als Cracker, hoffen, daß du das Script abstürzen lässt. Wurde zum Beispiel für die SMS-Seiten viel verwendet, wird durch Bilder, welche du nachtippen must unterbunden.
im Beispiel 2 komme ich durch. Gibt es Gründe, warum?
Immer name="" angeben, kannst dann im Script fragen
if(abschicken && abschicken=="Abschicken") {
}
Hi,
Soltest du immer machen, da dies ein Variablenbezeichner ist, welcher im PHP-Script ausgewertet werden kann.
äh... URL- und POST-Parameter haben mit Variablen nichts zu tun. Dass PHP solche daraus macht, ist ein hier oft zitiertes Sicherheitsrisiko. Ferner sind die Daten nicht nur mit PHP auswertbar, sondern mit _jeder_ serverseitigen Technik - und ob der Submit-Button überhaupt ausgewertet werden soll, ist eine Entscheidung des Entwicklers.
Immer name="" angeben, kannst dann im Script fragen
So pauschal ist dieser Tipp falsch. Das "immer" gehört da garantiert nicht hin.
if(abschicken && abschicken=="Abschicken") {
Du möchtest _unbedingt_ $HTTP_GET_VARS und/oder $HTTP_POST_VARS verwenden. Mehr siehe Archivsuche.
Cheatah
Hi,
äh... URL- und POST-Parameter haben mit Variablen nichts zu tun.
Also ich fülle meine HTML-Dokumente durch Platzhalter mit Variablen und lese sie dann wieder aus. GET und POST sind die einzigen Möglichkeiten Variablen weiterzugeben. Klar das das ein String ist, den man aber parsen kann.
Mir ist klar, dass PHP und andere CGI dies schon durch HTTP_GET_VARS und HTTP_POST_VARS machen, und PHP die Variablen direkt wieder zur Verfügung stellt.
»»und ob der Submit-Button überhaupt ausgewertet werden soll, ist
eine Entscheidung des Entwicklers.
Klar! Was, meiner Meinung aber, sehr viel Sicherheit in das Script bringt, natürlich nur wenn man es nicht alleine verwendet.
Immer name="" angeben, kannst dann im Script fragen
So pauschal ist dieser Tipp falsch. Das "immer" gehört da garantiert nicht hin.
HTML ist wie eine objektorientierte Programmiersprache,
--> jedes Objekt braucht einen Namen.
Sorry , aber als Informatiker hält man sich an solche Normen.
MfG Christian
Hi,
Also ich fülle meine HTML-Dokumente durch Platzhalter mit Variablen und lese sie dann wieder aus. GET und POST sind die einzigen Möglichkeiten Variablen weiterzugeben. Klar das das ein String ist, den man aber parsen kann.
ich möchte nur gegen die durch PHP geprägte Denkweise angehen, diese Parameter hätten etwas mit Variablen zu tun. Insbesondere weil die automagische Umsetzung durch PHP ein Sicherheitsleck darstellt.
Klar! Was, meiner Meinung aber, sehr viel Sicherheit in das Script bringt, natürlich nur wenn man es nicht alleine verwendet.
Auch das Name/Value-Pair eines Submit-Buttons ist fälschbar. Wo soll das Sicherheit bringen? Und: Warum wäre es ohne diese (teils triviale, teils trotzdem nicht vorhandene - das Formular muss nicht zwingend durch einen Submit-Button abgeschickt werden!) Information unsicher?
HTML ist wie eine objektorientierte Programmiersprache,
_WAS_?! Sorry, aber ich kann zwischen einer Strukturbeschreibungssprache und einer Programmiersprache keine Ähnlichkeit erkennen. Zwischen einer HTML-Struktur und einer Objekt-Struktur schon eher; es ist auch kein nennenswertes Problem, das eine in das andere umzuwandeln (zumindest in einer Richtung).
--> jedes Objekt braucht einen Namen.
a) Der Name ist der des Elementes, also hier "input".
b) Schreibst Du auch <b name="xyz">?
Sorry , aber als Informatiker hält man sich an solche Normen.
Danke für diese Information. Leider bin ich nur Informagier ;-)
Cheatah
Hi,
ich möchte nur gegen die durch PHP geprägte Denkweise angehen, diese Parameter hätten etwas mit Variablen zu tun. Insbesondere weil die automagische Umsetzung durch PHP ein Sicherheitsleck darstellt.
Arbeitest du mit Perl?
Also ich sehe dadrin kein Sicherheitsleck. Natürlich können Scripte abstürzen oder gar umgangen werden, wenn das Script selber nicht einige Schutzmaßnahmen beinhaltet.
» Auch das Name/Value-Pair eines Submit-Buttons ist fälschbar. Wo soll das Sicherheit bringen? Und: Warum wäre es ohne diese (teils triviale, teils trotzdem nicht vorhandene - das Formular muss nicht zwingend durch einen Submit-Button abgeschickt werden!) Information unsicher?
Ich sagte schon, nicht nur Submit-Überwachung. Ist aber eine Methode, um Integrität in das Script zu bekommen.
REFFERER, etc. sind bei mir natürlich auch eingebaut, genauso wie eine Kontrollschleife, welche den QueryString oder POST_VARS checkt.
_WAS_?! Sorry, aber ich kann zwischen einer Strukturbeschreibungssprache und einer Programmiersprache keine Ähnlichkeit erkennen. Zwischen einer HTML-Struktur und einer Objekt-Struktur schon eher; es ist auch kein nennenswertes Problem, das eine in das andere umzuwandeln (zumindest in einer Richtung).
Und wie funktionieren dann JavaScript und CSS in HTML?
HTML ist eine Auszeichnungssprache, aber die Interprettation erfolgt
in einem Objektmodell, damit dann Eigenschaften von CSS und JavaScript drüber gelegt werden können.
a) Der Name ist der des Elementes, also hier "input".
"input" ist der Typus des Elementes.
b) Schreibst Du auch <b name="xyz">?
Geht übrigens auch.
Bin zwar nicht damit einverstanden, aber MS macht das nur so.
MfG
Hallo Christian
Und wie funktionieren dann JavaScript und CSS in HTML?
HTML ist eine Auszeichnungssprache, aber die Interprettation erfolgt
in einem Objektmodell, damit dann Eigenschaften von CSS und JavaScript drüber gelegt werden können.
garantiert nicht, umgekehrt wird eher ein Schuh draus. JavaScript und CSS verwenden den Dokumentenbaum, den HTML anbietet.
HTML gab es lange vor JavaScript und CSS.
Ansonsten kannst du mit JavaScript im IE oder im Mozilla/Netscape 6 die Seite manipulieren wie du lustig bist, ohne ein einziges Element über den TagNamen, dem Attributname oder der id anzusprechen. Allerdings macht das nicht sehr viel Spaß :-)
a) Der Name ist der des Elementes, also hier "input".
"input" ist der Typus des Elementes.
genauer gesagt: <input type="submit" id="absender" name="absenden">
input ist der TagName (tagName of type DOMString, readonly
The name of the element.)
absenden ist das Attribut Name des Elementes (A control's "control name" is given by its name attribute. )
submit der Elementtyp (what kind of widget is needed )
absender ist das Attribut id (The id attribute assigns a unique identifier to an element (which may be verified by an SGML parser))
b) Schreibst Du auch <b name="xyz">?
Geht übrigens auch.
Bin zwar nicht damit einverstanden, aber MS macht das nur so.
wieder falsch. Du kannst im MS und übrigens im Netscape 6 auch das Element mit mehreren Varianten (versuche es z.b. mal mit einer id) ansprechen. Name ist nur eine davon und das noch die schlechteste, denn im HTML-Element <b> ist das Attribut name nicht erlaubt.
Zu CSS:
CSS braucht schon den Tagnamen. Mit dem Attribut namen kann css allerdings herzlich wenig anfangen.
input {color:red;}
allerdings hat das mit dem Namensattribut herzlich wenig zu tun.
versuche dagegen mal:
absenden {color:red;}
klappt nicht.
#absender {color:red;}
geht dagegen sehr wohl. Hier nicht das Attribut name zur Identifizierung verwendet sondern das Attribut id.
Viele Grüße
Antje
Hat wohl kaum noch mit meinem Problem zu tun.
Ich nehme mal so mit, dass der VirenScanner ein Problem hat
und Absendebutton ohne Namen weder etwas Besonderes noch eine Gefahr darstellen.
Gruß
Matthias
Hallo Matthias
Hat wohl kaum noch mit meinem Problem zu tun.
nein, so was nennt man Threaddrift. Aber gerade das finde ich spannend am Forum
Ich nehme mal so mit, dass der VirenScanner ein Problem hat
und Absendebutton ohne Namen weder etwas Besonderes noch eine Gefahr darstellen.
richtig, dein Virenscanner hat einen Klapps.
Viele Grüße
Antje
Hi,
Dem Absendebutton ist somit kein Name zugeordnet.
Auch meines Erachtens nix besonderes, aber kann dies für einen Angriff genutzt werden?
nein. _Alle_[1] Eingabefelder führen zu Name/Value-Pairs, die Du bei einem GET-Formular in der URL als "name=value&name=value&name=value..." sehen würdest. In den POST-Daten sind die gleichen Daten vorhanden, nur anders repräsentiert. Fehlt ein name-Attribut, wird kein Name/Value-Pair generiert; wird eines hinzugefügt, nun, dann hast Du "handelsübliche Datenmanipulation", die jeder Hinz und Kunz in der URL-Zeile des Browsers versucht. Serverseitig musst Du einen Check auf Realitätsnähe der Daten machen, das ist alles - das musst Du aber _immer_ machen.
[1] Bei Radiobuttons wird nur der ausgewählte Button übertragen; bei Checkboxen nur das Name/Value-Pair der angeklickten; bei <select multiple> gibt's ggf. mehrere Pairs; bei <input type="image"> gibt's in "name.x" und "name.y" die Klickkoordinaten.
Nachfolgend zwei Beispiele. Im Beispiel 1 bleibe ich in unserem VirenScanner hängen,
Du hast einen merkwürdigen Virenscanner.
Cheatah