webForumDet fria alternativet

Kolla så formuläret kommer från rätt sida?

ASP

18 svar · 490 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Kan man på något sätt göra en koll som kollar att formulärets data kommer från rätt sida.
Alltså så man inte kan skapa ett eget likadant formulär och lägga det på en annan server och skicka in information den vägen.

Medlem sedan aug. 20039 340 inlägg
#2

Enkelt exempel

rightplace = "http://www.sida.se/form.html";

if left (Request.serverVariables("HTTP_REFERER"), len (rightplace) ) = rightplace then
    ' Kod för att skicka formuläret...
else
    Response.write("Fel, kunde inte skicka!");
endif
Medlem sedan juni 200032 967 inlägg
#3

Du kan ju kolla servervariabeln HTTP_REFERER. Men; det kommer inte alltid att stämma, eftersom vissa personliga brandväggar rensar referer-headern.

Medlem sedan apr. 20031 660 inlägg
#4

HEJ!

Jovisst går det att fixa!

request.servervariables("HTTP_HOST") ger "www.exempel.se"

Och om du har samma domän som flera, använd HTTP_REFERER istället, ger "www.exempel.se/folder/folder/fyll_i_form.asp".

Medlem sedan aug. 20039 340 inlägg
#5

En annan variant är att sidan som formuläret ligger på genererar en engångs-kod som skickas med ett hidden-fält och kollas när formuläret skickas.

Medlem sedan aug. 20039 340 inlägg
#6

J.N. skrev:

request.servervariables("HTTP_HOST") ger "www.exempel.se"

Men HTTP_HOST ger väl ända domännamnet på den sida som anropas och inte den sida man kommer från?

Medlem sedan juni 200032 967 inlägg
#7

nitro2k01 skrev:

Men HTTP_HOST ger väl ända domännamnet på den sida som anropas och inte den sida man kommer från?

Das stimmt.

Medlem sedan apr. 20031 660 inlägg
#8

HEJ!

nitro2k01 skrev:

J.N. skrev:

request.servervariables("HTTP_HOST") ger "www.exempel.se"

Men HTTP_HOST ger väl ända domännamnet på den sida som anropas och inte den sida man kommer från?

Nä, det är rätt, tänkte fel.

Medlem sedan nov. 20031 018 inlägg
#9

Så vad är lösningen? :)

Medlem sedan aug. 20039 340 inlägg
Medlem sedan juni 200032 967 inlägg
#11

... och gör man så stoppar man effektivt alla som kör Nortons personliga brandvägg, till exempel.

Medlem sedan nov. 20031 018 inlägg
#12

Men det funkade ju inte bakom vissa brandväggar .

Medlem sedan juni 200032 967 inlägg
#13

Ett annat alternativ är ju att du på någon annan sida (eller alla andra sidor) sätter en sessioncookie, som du sedan kollar av. Gör man en inloggning från en annan sida, så har man ju inte sessioncookien.

Medlem sedan nov. 20031 018 inlägg
#14

Men blir inte det "jobbigt" för servern för det är ganska många som använder det formuläret.

Medlem sedan nov. 20031 018 inlägg
#15

Finns det inga andra lösningar än HTTP_REFERER och sessions?

Medlem sedan aug. 20039 340 inlägg
#16

Du kan ju som sagt även använda en engångskod som alltså skickas med ett input type="hidden"-fält, och inte genom en cookie.

Medlem sedan nov. 20031 018 inlägg
#17

Förstår inte hur man får engångskoden att funka?

Medlem sedan aug. 20039 340 inlägg
#18

Pseudokod:

[u]Sidan som visar formuläret:[/u]
skapa slumpad kod
spara koden i databasen tillsammans med klockslaget
skriv ut slumpkoden i ett hiddenfält i formuläret

[u]Sidan som tar emot formuläret:[/u]
Läs av querystring efter kod

IF (koden finns ej OR koden = "")
  felmeddelande()
ELSE
  posta formuläret
  ta bort koden ur databasen så att den inte kan användas igen
ENDIF

Hur den riktiga koden ska se ut vet jag inte riktigt, särskilt som jag intesysslar med asp för det mesta.

Medlem sedan nov. 20031 018 inlägg
#19

Det är ju inte några större problem att skapa ett hiddenfält på sidan som ligger på en annan server.

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)