Domanda veloce su request

giovedì 19 giugno 2008 - 17.59

lordwaizard Profilo | Senior Member

Dobbiamo eseguire delle query su mssql prendendo le informazioni dalle textbox tramite query o tramite post.
Il problema è che se un dato presenta l'apice, devo raddoppiarla per inserirla correttamente.
In definitiva ho paura di dimenticarmi qualche replace e quindi dare la possibilità ad un malintenzionato di sfruttare la cosa o cmq di creare un disagio al cliente.

E' possibile filtrare tutti i request sia query che form in modo da non creare problemi?

Grazie per la disponibilità
Davide

Dainesi Profilo | Senior Member

Ti agiti per un problema che non esiste. L'apice viene trasmesso correttamente sia dalla Querystring (metodo GET che usa l'Encode) e dal metodo POST. Il problema semmai sorge quando devi utilizzarlo per operazioni sulle basi dati. Ecco che qui con bel Replace risolvi il tutto. Piuttosto devi stare attento ai punti e virgola che vengono usati per concatenare comandi SQL e quindi potenzialmente pericolosi.

P.S. Un mio collega era solito sostituire i singoli apici digitati dall'utente con apostrofi. SImili nella grafica ma differenti come codice ASCII

alx_81 Profilo | Guru

@dainesi
>Ti agiti per un problema che non esiste. L'apice viene trasmesso correttamente sia dalla Querystring (metodo GET che usa l'Encode) e dal metodo >POST. Il problema semmai sorge quando devi utilizzarlo per operazioni sulle basi dati. Ecco che qui con bel Replace risolvi il tutto. Piuttosto devi >stare attento ai punti e virgola che vengono usati per concatenare comandi SQL e quindi potenzialmente pericolosi.
Non sottovalutiamo il problema


>E' possibile filtrare tutti i request sia query che form in modo
>da non creare problemi?
La domanda è veloce, la risposta è articolata.
Proverò ad essere brevissimo..
Per ovviare al problema di SQL Injection, puoi seguire due strade:

- Query Parametriche
- Stored procedure con SQL Server

Per Query parametriche intendo queri scritte con ADO.Net e i placeholder @nomeparametro. Ad esempio:

SELECT <campi> FROM <tabella> WHERE campo1 = @parametro1 AND campo2 = @parametro2..

Per stored procedure intendo le procedure compilate su SQL Server

CREATE PROCEDURE (transact-SQL)
http://technet.microsoft.com/it-it/library/ms187926.aspx

In ognuno dei due casi devi utilizzare la collection dei Parameters dell'oggetto SqlCommand:

SQLCommand.parameters property
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

Con la combinazione delle due cose, sei già a buon punto.
Comunque ti consiglio di leggere anche questo articolo:

Creazione di codice di accesso ai dati protetto
http://www.microsoft.com/italy/technet/security/guidance/secmod87.mspx

Così sei decisamente coperto.

>
>Grazie per la disponibilità
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lordwaizard Profilo | Senior Member

Studio la cosa, grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5