Toon posts:

[javascript] Mogelijkheid een POST request te verzenden?

Pagina: 1
Acties:
  • 183 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Is het mogelijk om een POST request te verzenden met javascript zonder dat ik daar eerst een form voor aan moet maken? Dus dat je een form met een POST method emuleert?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Javascript hoort thuis in W&G, niet in P&W. Check de P&W FAQ daarover.

Move P&W -> W&G

https://fgheysels.github.io/


Verwijderd

Je zou het kunnen proberen met document.createElement('form'). Kun je mooi een poster-object maken. :)

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Misschien kun je dit wel gebruiken.....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script language="Javascript">
function Post(){
  var form=document.createElement('form');
  document.getElementsByTagName("body")[0].appendChild(form);

  form.setAttribute('name','formpje');
  form.setAttribute('action','test.html');
  form.setAttribute('target','_blank');
  form.setAttribute('method','post');

  var temp=document.createElement("input");
  form.appendChild(temp);
  temp.setAttribute("type", "hidden");
  temp.setAttribute("name", "voornaam");
  temp.value = "Pietje snot";

  form.submit();

} 
</script>

Verwijderd

Topicstarter
Bedankt KillR-B voor je script, alleen werkt het
(nog) niet helemaal. Ik heb je code zo aangepast:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Post(){
  var form=document.createElement('form');
  document.getElementsByTagName("body")[0].appendChild(form);

  document.form.setAttribute('action','post2.php');
  document.form.setAttribute('method','post');

  var encr=document.createElement("input");
  document.form.appendChild(encr);
  encr.setAttribute("type", "hidden");
  encr.setAttribute("name", "encr");
  encr.value = MD5(document.form.username.value + MD5(document.form.password.value) + '<?= $REMOTE_ADDR ?>' + 'aaa');
  
  var hidden = document.createElement("input");
  form.appendChild(hidden);
  hidden.setAttribute("type", "hidden");
  hidden.setAttribute("name", "hidden");
  hidden.value = "aaa";

  document.form.submit();

}


In IE6 krijg ik een fout 'Deze opdracht wordt niet ondersteund'. Ik denk dat ik iets heel doms misdoe, maar ik weet het niet zeker. De MD5 functie heb ik ergens anders geinclude.

PS Er staat 1 klein stukje PHP in, zoals jullie zien ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:07

crisp

Devver

Pixelated

Ik meen me te herinneren dat IE het dynamisch toekennen van het 'name' attribuut niet ondersteund; probeer het eens met 'id'
Verder vind ik het ook niet verstandig om namen van bestaande elementen of properties te gebruiken in je script zoals 'form' en 'hidden'; hierdoor gaan er denk ik nu al wat dingetjes mis in je script, want ik neem aan dat er al een form op je pagina staat met de naam 'form'.
Erg verwarrend allemaal in elk geval; waarom kan je niet vantevoren al een 'hidden' form includen in je pagina?

Intentionally left blank


Verwijderd

Topicstarter
Ik probeer een zo veilig mogelijk login-script te maken en hoe minder sporen ik nalaat, hoe beter. Op die manier.

Verwijderd

Ik zat even te kijken waarom het niet zou werken. Rare bugs kreeg ik:? Wat bleek: de attribuut-namen moeten in HOOFDLETTERS. Maar op de PC hoeft dat niet (ik heb Mac). Tijdens debuggen heb ik de code ietsjes herschreven :) :
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Post(){
  var oForm=document.createElement('form');
  document.body.appendChild(oForm);

  oForm.action='post2.php';
  oForm.method='post';

  var oEncr=document.createElement("INPUT");

  oEncr.setAttribute("TYPE","hidden");
  oEncr.setAttribute("NAME","encr");
  oEncr.setAttribute("VALUE","geheim");
  oForm.appendChild(oEncr);

  var oHidden = document.createElement("INPUT");
  oHidden.setAttribute("TYPE","hidden");
  oHidden.setAttribute("NAME","hidden");
  oHidden.setAttribute("VALUE","aaa");
  oForm.appendChild(oHidden);

  oForm.submit();
}
In IE6 krijg ik een fout 'Deze opdracht wordt niet ondersteund'. Ik denk dat ik iets heel doms misdoe, maar ik weet het niet zeker. De MD5 functie heb ik ergens anders geinclude.
Je doet document.form.submit(), en die bestaat volgens mij niet. Of je doet document.forms[0].submit of zoals ik het hierboven doe :)

[ Voor 0% gewijzigd door Verwijderd op 26-08-2002 21:03 . Reden: reactie vergeten ]


Verwijderd

Topicstarter
Dat ging de goede kant op, maar dat werkte nog steeds niet. Ik heb het zo opgelost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Post(){
  var oForm=document.createElement('form');
  document.body.appendChild(oForm);

  oForm.action='post2.php';
  oForm.method='post';

  var oEncr=document.createElement("INPUT");

  oEncr.type = "hidden";
  oEncr.name = "encr";
  oEncr.value = "geheim";
  oForm.appendChild(oEncr);

  var oHidden = document.createElement("INPUT");
  oHidden.type = "hidden";
  oHidden.name = "hidden";
  oHidden.value = "VALUE";
  oForm.appendChild(oHidden);

  oForm.submit();
}


Wel raar dat het bij mij niet werkte. Iemand een idee of waar dit aan ligt? Bij mij werkt deze in IE6 en NS6 en die andere versie niet :?

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
De code van Doekman werkt idd goed.

JavaScript:
1
document.form.appendChild(encr);

werkt ook niet, want object "form" is geen element van object "document", je moet daarom document weghalen.

De reden dat de fout ''Deze opdracht wordt niet ondersteund" optrad, komt waarschijnlijk door de derde regel van:

JavaScript:
1
2
3
var encr=document.createElement("input");
document.form.appendChild(encr);
encr.setAttribute("type", "hidden");


Want direct na een aanroep van createElement("input") moet het type bepaald worden, dus

JavaScript:
1
2
3
var encr=document.createElement("input");
encr.setAttribute("type", "hidden"); // Regel 2 en 3 zijn omgedraaid
document.form.appendChild(encr);

Verwijderd

Topicstarter
KillR-B, de code van Doekman werkte niet en ik had het op een andere manier opgelost (zie vorige post). Ik vroeg mij alleen af waarom het dan niet werkt bij mij en of mijn manier slechter is dan die van Doekman?

Verwijderd

Topicstarter
Niemand?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ik begrijp niet waarom je niet gewoon een formulier include in je pagina. Je laat op deze manier evenveel sporen na als wanneer je 't include

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Dat kan natuurlijk ook, maar zolang mijn code werkt hoor je mij niet klagen. De code moet toch door Javascript heen voor pre-send encription. En ik laat toch echt minder sporen na. De Javascript is namelijk bereikbaar vanaf 1 bepaalde url. Op deze manier is het toch lastiger voor hackers uit te vinden wat er precies gebeurt.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ik geloof niet dat ik snap wat je bedoelt. De "pre-send encryption", zoals je 't noemt, staat verder los van 't genereren van het formulier.

Als het formulier in de html staat
code:
1
2
3
<form method="post" name="hiddenForm">
   <input type="hidden" name="encr" />
</form>


kun je alsnog de waarden invullen in de Post () functie
code:
1
document.forms [ 'hiddenForm' ].elements [ 'encr' ].value = MD5 ( 'meuk' );


Wat voegt het toe dat je form dynamisch gegenereerd wordt? 't is redelijk omslachtig, imo

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Ik zat te denken aan geheimheid/geheimhouding. Ik weet niet zoveel van hackers af, maar hoe meer je van de werking geheimhoud, hoe moeilijker het is om te hacken, hoe eerder je ze kan pakken/ze er mee stoppen. Tenminste, dat dacht ik, maar ik kan het mishebben...

Verwijderd

De reden dat mijn code niet werkte, was dat de tagNames in kleine letters gespecificeerd moeten worden :-)

Verder lijkt het dat IE5.2/Mac geen hidden input kan maken :(

Als ik oInput.type='hidden' doe, dan krijg ik de foutmelding "Object doesn't support this property or method". Je mag kennelijk op Mac het type van een input niet wijzigen.

Dit is natuurlijk ook een beetje gek, dat een attribuut bepaald of iets een tekstveld is of een submit-button. In MSDN staat overigens ook dat als je een input type=reset wilt maken, je dit direct bij createElement moet opgeven: document.createElement('<input type="reset">');. In IE6/Win geldt dit overigens niet.

Deze manier van het creeeren van elementen EN attributen is natuurlijk ook gemakkelijk, maar het werkt natuurlijk niet op IE5.2/Mac, want het is ook niet DOM.

Dus kan ik niet anders concluderen dat je niet dynamic een hidden input kunt creeeren op IE5.2/Mac :'(

Maar voor IE/Win EN Mozilla 1.1 (ook Mac) werkt het nu...

Verwijderd

Toch gelukt. * doekman is niet voor één gat te vangen >:)

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function createInput(sName,sValue)
{
  var oInput=document.createElement('INPUT');
  oInput.name=sName;
  oInput.value=sValue;
  return oInput;
}
function Post(){
  var oForm=document.createElement('form');
  oForm.action='got13test.asp';
  oForm.method='POST';
  oForm.style.visibility='hidden';

  oForm.appendChild( createInput('sEncrypted','asjfa;kjfasdk') );
  oForm.appendChild( createInput('sSecret','aaaaaaaaaaaa') );

  document.body.appendChild(oForm);

  oForm.submit();
}

Ik gebruik overigens visibility=hidden i.p.v. het meer logische display=none, omdat die laatste volgens mijn herinnering problemen kan geven in IE5.00 op Windows.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

_J_R_R:
Ik zat te denken aan geheimheid/geheimhouding. Ik weet niet zoveel van hackers af, maar hoe meer je van de werking geheimhoud, hoe moeilijker het is om te hacken, hoe eerder je ze kan pakken/ze er mee stoppen.
Maar niks wat je client-sided draait is geheim. Of je het formpje nou genereert, of in html schrijft, een "hacker" komt er toch wel achter.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1