kolmapäev, 30. detsember 2009

Kes, kuna, kuidas, milleks ja kust (IP aadressiga) on andmebaasi küljes

Abiks järgnev päring

SELECT dm_exec_sessions.session_id, dm_exec_sessions.status
, dm_exec_sessions.login_name, dm_exec_sessions.original_login_name
, dm_exec_connections.net_transport
, dm_exec_connections.connect_time
, dm_exec_sessions.login_time
, dm_exec_connections.protocol_type
, dm_exec_connections.client_net_address
, dm_exec_connections.client_tcp_port
, dm_exec_connections.auth_scheme
, dm_exec_sessions.HOST_NAME, dm_exec_sessions.NT_DOMAIN
, dm_exec_sessions.program_name, dm_exec_sessions.client_interface_name
, dm_exec_sessions.language, dm_exec_sessions.client_version
, dm_exec_requests.command, dm_exec_requests.wait_type, dm_exec_requests.wait_time, dm_exec_requests.wait_resource
FROM sys.dm_exec_sessions
JOIN sys.dm_exec_connections ON (dm_exec_sessions.session_id = dm_exec_connections.session_id )
INNER JOIN master..sysprocesses ON (dm_exec_sessions.session_id = sysprocesses.SPID)
LEFT JOIN sys.dm_exec_requests ON (dm_exec_sessions.session_id = dm_exec_requests.session_id)
WHERE DB_NAME(sysprocesses.dbid) = DB_NAME()
--AND dm_exec_sessions.status != 'sleeping'


dm_exec_sessions.session_id põhjal võib teha KILL sellele ühendusele

dm_exec_sessions.program_name saad seada Web.Config faili ConnectionStringis Application Name parameetriga niimoodi

connectionString="Data Source=SQL2008SERVER;Min Pool Size=2;Application Name=MINURAKENDUS; ...

reede, 18. detsember 2009

GridView TemplateField veeru päise muutmine nii, et sortimine jääks alles

TemplateFieldil võib päise ja sorteerimise kirjeldada nii

Kui vaja nüüd veeru päise teksti dünaamiliselt muuta nii, et sorteerimise võimalus alles jääks
siis tee eraldi HeaderTemplate, kuhu poeta Linkbutton, mille CommandName on "Sort" ja CommandArgument on see andmebaasi väli mille järgi sorteerida tahad

Kui nüüd vaja päise teksti muuta, saad teha nii kusjuures sortimine jääb alles

protected void GridViewKolijad_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
LinkButton ud = (LinkButton)e.Row.FindControl("LinkButtonVana");
if (ud != null)
{
ud.Text = this.RadioButtonListSisse.SelectedValue == "0" ? Resources.Resource.NewContract : Resources.Resource.PreviousContract;
}
}
}

reede, 4. detsember 2009

II astme SQL süstimise tõkestamine reapiiranguga

Üks viis kuidas tõkestada SCRIPT, IFRAME, FORM, BODY ja muude murdskriptimisvõimaluste lisamist andmebaasi on panna string tüüpi väljade peale reapiirangud näiteks LIKE operandi kasutades

ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<_%')) Siin LIKE '%<_%' tähendab kõik stringid kus < järel on mingi character sümbol (ka tühik)


ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<[A-Z]%'))

Siin LIKE '%<[A-Z]%' kõik stringid kus < järel on mingi täht A kuni Z

ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<[ASIDBMFH/]%'))

Siin LIKE '%<[ASIDBMFH/]%' tähendab kõik stringid kus < järel on mingi sümbol nimekirjast ASIDBMFH/
Koos NOT-iga saame lausendi mis kontrollib "ei ole mustas nimekirjas".
Standardid soovitavad muidugi kasutada valge nimekirja kontrollimist.

Kuidas töötab

Kui nüüd üritatakse XSS-i kirjutada andmebaasi välja sisse (II astme rünnak)



siis reapiirang asub tegevusse ja andmeid muuta ei lubata