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?
Javascript hoort thuis in W&G, niet in P&W. Check de P&W FAQ daarover.
Move P&W -> W&G
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.
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> |
Bedankt KillR-B voor je script, alleen werkt het
(nog) niet helemaal. Ik heb je code zo aangepast:
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
(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
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?
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
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(); } |
Je doet document.form.submit(), en die bestaat volgens mij niet. Of je doet document.forms[0].submit of zoals ik het hierboven doeIn 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.
[ Voor 0% gewijzigd door Verwijderd op 26-08-2002 21:03 . Reden: reactie vergeten ]
Dat ging de goede kant op, maar dat werkte nog steeds niet. Ik heb het zo opgelost:
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
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
De code van Doekman werkt idd goed.
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:
Want direct na een aanroep van createElement("input") moet het type bepaald worden, dus
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); |
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?
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
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.
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
kun je alsnog de waarden invullen in de Post () functie
Wat voegt het toe dat je form dynamisch gegenereerd wordt? 't is redelijk omslachtig, imo
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
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...
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 
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.
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.
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._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.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Pagina: 1