Vinnaren i pepparkakshustävlingen!
2013-11-21, 12:56
  #1
Medlem
Hej!

Jag håller på att göra ett auto-login "script".
Submiten fungerar, dock måste jag först ladda in sidan där jag vill posta min form, och SEN köra submit.html filen.

Det jag vill är att sidan ska laddas in och skickas i samma fil så att jag bara behöver klicka på en länk.

Jag skulle verkligen behöva lite hjälp på traven med detta! Postar en del av submit.html filen här
HTML-kod:
<html>

<head>
</head>

<body onload="document.getElementById('fm1').submit();">

<form id="fm1" class="fm-v clearfix" method="post" action="(min url där jag vill posta formen)">

<input id="username" name="username" class="required" tabindex="1" accesskey="a" type="hidden" value="(användarnamn)" size="25" autocomplete="false">

<input id="password" name="password" class="required" tabindex="2" accesskey="l" type="hidden" value="(lösenord)" size="25" autocomplete="off">

<input type="hidden" name="lt" value="e1s1">

<input type="hidden" name="_eventId" value="submit">

</form>

</body>

</html>
Citera
2013-11-21, 15:39
  #2
Medlem
Diverges avatar
Skit i HTMLen. Gör det server-side istället innan siten ens renderas ut.
Ser ju skitkackigt ut om sidan submittar ett form det första den gör.
Citera
2013-11-21, 16:06
  #3
Medlem
Jag är inte vidare vass på webhantering, hade du kunnat utveckla svaret lite och ge någon mer tydlig pointer på vad jag borde göra eller var jag borde börja?

Ifall det är någon vidare hjälp så länkar jag inloggningssidan
Citera
2013-11-21, 17:13
  #4
Medlem
Spontant skulle jag säga att du inte kommer att lyckas med det du försöker göra.
Formuläret har ju nån form av sessionsid i sin action. Detta kollas ju troligen av sidan man postar till just för att se till så att det bara kan skickas från just det där formuläret

Enkelt sagt
Du går in på sidan och får ett sessionsID.
Detta skrivs sen ut i formulärets action
När du sen postar formuläret kollar servern om ditt sessionsID är samma som det som skickades med i URL:en.

Med andra ord, har du inte varit inne på sidan där formuläret finns så kommer du inte heller ha ett korrekt SessionsID eftersom detta ändras för varje besök.
Citera
2013-11-21, 17:32
  #5
Medlem
Citat:
Ursprungligen postat av rhdf
Spontant skulle jag säga att du inte kommer att lyckas med det du försöker göra.
Formuläret har ju nån form av sessionsid i sin action. Detta kollas ju troligen av sidan man postar till just för att se till så att det bara kan skickas från just det där formuläret

Enkelt sagt
Du går in på sidan och får ett sessionsID.
Detta skrivs sen ut i formulärets action
När du sen postar formuläret kollar servern om ditt sessionsID är samma som det som skickades med i URL:en.

Med andra ord, har du inte varit inne på sidan där formuläret finns så kommer du inte heller ha ett korrekt SessionsID eftersom detta ändras för varje besök.
Det fixas med tanke på att varje gång browsern startas om sätts "lt" till "e1s1".
Mitt "script" fungerar ju? Den submittar som den ska, jag loggas in och redirectas.
Då jag inte är inne på sidan ifall jag inte vill logga in, behöver jag inte oroa mig för specifika identiteter och hur sessionID förändras då jag kan logga in efter standarden.

Problemet är bara att jag inte vet hur jag, i ett stycke, kan låta sidan ladda in och SEDAN skicka formen.
Citera
2013-11-21, 18:31
  #6
Medlem
Diverges avatar
Men vänta nu.. du använder ett formulär för att submitta ett formulär?

Tja... du borde kunna köra nåt i stil med

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
document.getElementById('fm1').submit();
})
</script>
Citera
2013-11-21, 18:33
  #7
Medlem
Diverges avatar
Det där blev konstigt.

Byt
document.getElementById('fm1').submit();
mot
$( "#fm1" ).submit();

Otestat. Men tror det ska lira.
Citera
2013-11-21, 19:34
  #8
Medlem
Skulle uppskatta ifall det fanns något sätt att implementera detta utan att använda jQuery utan bara html/javascript (eller möjligtvis PHP).
Citera
2013-11-21, 22:10
  #9
Medlem
Povels avatar
Citat:
Ursprungligen postat av shmuunk
Skulle uppskatta ifall det fanns något sätt att implementera detta utan att använda jQuery utan bara html/javascript (eller möjligtvis PHP).


Kan du inte bara använda ett bookmarklet? Lägg till ett bokmärke "uu-cas-login" med följande fejk-URL:

Kod:
javascript:(function(u,p){var d=this.document,f=d.createElement("form");f.method="post";f.action="https://cas.user.uu.se/cas/login";var i=d.createElement("input");i.name="username";i.value=u;f.appendChild(i);i=d.createElement("input");i.name="password";i.value=p;f.appendChild(i);d.body.appendChild(f);f.submit()})
(
"DITT LOGIN","DITT LÖSEN"); 

Formuläret skapas med javascript, fylls i och postas. Du kan ha bokmärket i browserns verktygslist däruppe och bara klicka på den.

Jag testade den så att det funkar för mig att logga in på ett par olika ställen där jag har konto, men den ovan är justerad för inloggning på uus CAS som du verkade vilja.

Det fanns ju nån extra parameter (lt) där på sidan också, men den är troligen inte vital för att kunna logga in - det var en hidden vars värde varierade om man laddade om sidan.

Bara de inte har någon spärr mot att logga in från annan REFERER än uu.se så borde det gå bra.

/p

PS.

Strängt taget borde det inte vara svårare än så här, om man vill ha en statisk sida istället:

Kod:
<!DOCTYPE html>
<
html>
<
head><title>uu cas login</title></head>
<
body>
<
form action="https://cas.user.uu.se/cas/login" method="post">
  <
input type="hidden" name="username" value="DITT LOGIN">
  <
input type="hidden" name="password" value="DITT LÖSEN">
</
form>
<
script type="text/javascript">document.forms[0].submit();</script>
</body>
</html> 

DS.
__________________
Senast redigerad av Povel 2013-11-21 kl. 22:17.
Citera
2013-11-22, 00:09
  #10
Medlem
Citat:
Ursprungligen postat av shmuunk
Det fixas med tanke på att varje gång browsern startas om sätts "lt" till "e1s1".
Mitt "script" fungerar ju? Den submittar som den ska, jag loggas in och redirectas.
Då jag inte är inne på sidan ifall jag inte vill logga in, behöver jag inte oroa mig för specifika identiteter och hur sessionID förändras då jag kan logga in efter standarden.

Saken är den att när jag dubbelkollade källkoden på den där sidan nu så såg action för formuläret annorlunda ut. När jag kollade tidigare idag så hade den med en"sessionID parameter i url:en" som verkade lagts till automagiskt. Nu hade den det inte. Det KAN tyda på att det finns 2 versioner av loginsidan (märkligare saker har hänt i UU:s lätt kaotiska IT-värld) som man alterneras mellan och där koden för dem skiljer sig lite.

Citat:
Ursprungligen postat av Povel
Bara de inte har någon spärr mot att logga in från annan REFERER än uu.se så borde det gå bra.

Som vän av ordning så anser jag att de BORDE ha en koll mot cross domain posts. Framförallt är det ju en potentiell säkerhetsrisk eftersom någon sätta upp en egen inloggningsida (dvs mer eller mindre det TS vill) och ta en rundtripp till sin egna backendkod för att på så sätt få tag på användarnamn+lösen från någon naiv lättlurad student som aldrig fattar att den blivit av med det...
dvs phishing 101..

exempelvis:
Skicka ett mail till en massa <randoms>@student.uu.se med en länk till din egna loginsida som ser ut som den riktiga, fast man lagt den på nån snarlik "fuldomän"

Den url man skickar med mailet (eller lägger till senare sin egna kod) går till nån random sida bakom cas-inloggningen. dvs inte svårt att leta upp den eller helt enkelt skiter man i det och går direkt på https://cas.user.uu.se/cas/login.

Korkad student går på det hela och fyller i sitt användarnamn + lösenord
vid submit skickas dessa 2 fält först till din egna server via ajax och lagras i databas motsv och sen skickas formuläret till rätt sida med en normal submit.
Citera
2013-11-22, 10:15
  #11
Medlem
Povels avatar
Jag tvivlar på att den där parametern "lt" är något som är tänkt att hindra submit från annan sida än deras egen, även om det skulle kunna stå för (eller till och med står för) "login-token".

Den är så lamt uppbyggd.. första gången jag laddar sidan är dess värde "e1s1", och sedan ökar den första siffran för varje omladdning, e2s1, e3s1, e4s1 etc. Snarare något slags loginförsöks-räknare, på sin höjd. Om det skulle vara något slags säkerhetstoken vore det idiotiskt att inte ha ett mycket mer komplext (och oförutsägbart) värde.

Dessutom vore det i alla fall bättre att kolla REFERER när login hanteras (ok det kan spoofas).

/p
__________________
Senast redigerad av Povel 2013-11-22 kl. 10:29.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback