neljapäev, 26. november 2009

String tüüpi muutuja polsterdamine SQL süstimise vastu

Kui ei pääse üle ega ümber sellest, et vaja dünaamiline SQL kirjutada ja sp_executesql kasutada ei saa siis string tüüpi muutujad (VARCHAR, NVARCHAR, CHAR jne) polsterda järgmiselt:

REPLACE(@otsiparam,'''','''''') ning enne ja pärast seda veel kolmed ülakomad

näiteks niimoodi:

DECLARE @os NVARCHAR(MAX)
SET @otsiparam=LTRIM(RTRIM(ISNULL(@otsiparam,'')) --juhuks, kui tühikud ees ja taga võivad probleemiks olla ning parameeter võib ka NULL olla.
SET @os='SELECT TOP 1 NIMED.NIMI FROM DBO.NIMED WITH(NOLOCK) WHERE NIMED.ID = '''+REPLACE(@otsiparam,'''','''''')+''''
EXECUTE (@os)

Kui vaja ainult ühte rida andmebaasist kätte saada siis mõtekas TOP 1
SELECT lausesse lisada. Aitab OR 1=1 rünnakute vastu.

See muutuja, mida EXECUTE lausega käima tõmbad võiks olla NVARCHAR(MAX) tüüpi, siis ei jõuta seda ülakomasid ''''''' täis ajada, ennem astuvad võrgu piirangud vahele.

C# käib polsterdamine nii
public string Polsterda(string inputSQL)
{
return inputSQL.Replace("'", "''");
}

kolmapäev, 18. november 2009

Võõra XmlNode panemine teise XmlDocument -i sisse

Kõik XmlNode tüüpi asjad on konkreetselt seotud selle XmlDocument-iga, mille külge nad tehti.

Kui nüüd tahta "võõrast" XmlNode panna teise XmlDocument-i sisse tuleb see importida

//algne XmlDocument
XmlDocument res = new XmlDocument();
XmlElement elem = res.CreateElement("SkoorResult");
res.AppendChild(elem);

// see "nd" on nüüd see "võõras" node, mille kuskilt mujalt saame
TimeZoneInfo localZone = TimeZoneInfo.Local;
TimeSpan vahe = localZone.GetUtcOffset(System.DateTime.Now);

XmlNode nd = MakeRequest(nod,vahe);


//impordime sisse
XmlNode nodeToMove = res.ImportNode(nd, true);
res.DocumentElement.AppendChild(nodeToMove);

neljapäev, 5. november 2009

Veebilehe ViewState suuruse näitaja Firefoxile

Selline kaval asi on olemas:
https://addons.mozilla.org/en-US/firefox/addon/5956

Kui avad mingi ASPX lehe, rehkendab lehe allaäärde veebilehe ViewState suuruse.
ViewState on teatavasti see info, mida IIS lehele kaasa paneb, et seal veebilehe elementide "mälu" hoida. Mida suurem ViewState seda "paksem" leht, mida väiksem ViewState seda nobedamini leht kohale tiritakse.

Veebirakenduse puhul tegemist sisuliselt dilemmaga. Kas küsida iga kord andmed andmebaasist uuesti (koormab rohkem andmebaasiserverit) või kord juba küsitud andmed panna lehe ViewState(mis teeb lehe mahult suuremaks ja närib rohkem ribalaiust ära).