Hejsan,
Jag skulle bli väldigt tacksam om ni kunde säga hur pass bra säkerheten är på det sättet som jag gör nu när jag använder mig utav jQuery och ASP.NET för att göra vissa anrop. Ett exempel på hur jag hämtar data är:
[WebMethod]
public static List<MessageEntities> BindMessages(string c)
{
MessageBLL messagesBLL = new MessageBLL();
List<MessageEntities> messagesList = MessagesBLL.GetMessagesByTypeID(Convert.ToInt32(x));
return messagesList;
}
När jag sedan hämtar datan så använder jag mig utav sp´s istället för ren SQL. Är detta sätt säkert eller är det otroligt lätt att hacka sig in och förstöra för mig i databasen? När jag ska posta saker till databasen så använder jag mig utav ICallbackEventHandler:
Det beror naturligtvis på hur du bygger dina SPer. Undvik att bygga upp dem dynamiskt i databasen så blir det säkrare.
Annars ser jag inget fel i din kod, du verkar skicka in ett tal och om det då inte är ett tal utan innehåller typ ;,' eller liknande som kan användas för SQL-injections så accepterar SPn inte din parameter. Det är också bra att begränsa fältlängderna till vad de faktiskt kommer vara och inte köra på max.
Men så är jag ingen expert på säkerhet heller. Någon annan kanske kan ge ett bättre svar? :)
Hur menar du med att bygga upp sina SP´s dynamiskt? Tror inte jag gör det, så här ser den ut när jag ska hämta data:
SET @limit = CONCAT(' LIMIT ', ((in_CurrentPage - 1) * in_PageSize), ',', in_PageSize);
SET @q =
CONCAT('SELECT
mgm.intMemberGuestbookMessageID AS intMessageID,
mgm.intMemberGuestbookMessageWriterID AS intMessageWriterID,
mgm.intMemberGuestbookMessageRecipientsID AS intMessageTypeID,
mgm.intMemberGuestbookMessageAnswer AS intMessageAnswer,
mgm.intMemberGuestbookMessageRead AS intMessageRead,
mgm.txtMemberGuestbookMessageText AS txtMessageText,
mgm.dtmMemberGuestbookMessageDateTime AS dtmMessageDateTime,
m.strMemberFirstName AS strMessageWriterFirstName,
m.strMemberLastName AS strMessageWriterLastName
FROM
tblMemberGuestbookMessages mgm
INNER JOIN
tblMembers m
ON
mgm.intMemberGuestbookMessageWriterID = m.intMemberID
WHERE
mgm.intMemberGuestbookMessageRecipientsID = ',in_MessageTypeID,'
ORDER BY
dtmMessageDateTime DESC');
SET @q = CONCAT(@q, @limit);
PREPARE st FROM @q;
EXECUTE st;
DEALLOCATE PREPARE st;
Ska tänka på det med fältlängderna, tack så mycket.
Någon annan som har något att säga om koden?
Det ser bra ut tycker jag. Med dynamiskt bygga SQL menar jag att man t.ex. skickar in vilka kolumner man vill ha ut från proceduren eller skickar in hela where-satsen från din .Net kod. Du skickar in parametrar vilket är bra och du gör inte heller select * vilket också är bra.
Jag tror dock att du vet detta redan :)
254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e