PDA

View Full Version : Synpunkter om SQL i session


pg
2005-08-31, 12:42
Hej

Jag har en sida där man kan logga in och skriva till en databas via ett flertal olika formulär. Databasen innehåller relationer i mer är 2 nivåer så för varje submit görs en kontroll av ID i högsta nivån. Nu har jag kommit på att, i stället för en massa if-satser, är väldig smidigt att lägga SQL-strängen för kontrollen i ett sessionvärde. Tekniskt funkar det men frågan är om det innebär några svagheter med avseende på säkerhet m.m. Som jag har fattat det så lagrar sessen en cookie-referens hos klienten så det borde inte vara några problem.
Därför jag undrar om det är någon som har testat detta och vad ni har för synpunkter.

Ex.
<form method="post" action="update.asp">
Formuläret
</form>
<%
Dim SQLReference
SQLReference = "SELECT COUNT(*) AS nRS "
SQLReference = SQLReference & " FROM TopObject "
SQLReference = SQLReference & " WHERE TopObjectID = " & TOID
SQLReference = SQLReference & " AND SubObjectID = " & SOID
Session("SQLReference") = SQLReference
%>

Efter submit körs SQL-satsen och om värdet på nRS är > 0 så sparas datan från formuläret.

Tackar på förhand för ev. synpunkter /PG

spango
2005-08-31, 14:48
Nej, några säkerhetsproblem bör det egentligen inte vara, men jag kan inte för mitt liv förstå varför det är så smidigt att lägga SQL-strängen i sessionsobjektet? Vore det inte bara smartare att lägga in resultatet av kontrollen där i stället?

pg
2005-08-31, 17:07
Tack för svaret.

Jo det har du nog rätt i. Men jag vill ändå spåna lite till i ämnet. Så här är denna lösning uppbyggt. Vid inloggning på kontot sätts en session som vanligt, vi kallar den UserID. Normalt brukar jag inte ha några fler sessionvärden eftersom allt kan kontrolleras mot detta ID genom t.ex dubbla INNER JOIN. Därefter kan användaren öppna olika formulär med Rich Edit funktion. I Rich edit har jag lagt en knapp som öppnar ett nytt fönster för bildhantering. I detta fönster kan man skicka och ta bort bilder varvid flera anrop till DB sker innan själva submit av Rich editformuläret. Varje händelse i bildfönstret ska kontrolleras mot UserID. Det är nu jag får behovet av att lagra SQL i en sessionparameter. Detta för att jag vill kunna använda samma Rich Edit lösning oberoende hur DB-tabellerna ser ut. När Rich edit formuläret öppnas får jag därför lagra SQL satser som sedan kan nås av fönstret med bildhanteringen.

Man skulle kanske kunna göra kontrollen när formuläret laddas som du sa och sätta resultatet t.ex Session("IDCheck") = True. Sedan använder man detta värde som kontroll i bildhanteringsfönstret. En session-parameter kan väl knappast ändras ev en kunnig klient. Hade man däremot lagrat värdet i en input type="hidden" eller ännu värre, som en querystring parameter så är man nog farligt ute. Jag ska fundera lite till men det lutar nog åt Session("IDCheck") = True.

/PG

emission
2005-08-31, 21:20
Ja, det finns ingen anledning att lagra SQL i Session, oavszet om det är säkert eller inte. UserID i session är det ända du behöver