Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Domanda veloce su request
giovedì 19 giugno 2008 - 17.59
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lordwaizard
Profilo
| Senior Member
294
messaggi | Data Invio:
gio 19 giu 2008 - 17:59
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
476
messaggi | Data Invio:
gio 19 giu 2008 - 18:26
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
8.814
messaggi | Data Invio:
gio 19 giu 2008 - 18:36
@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
294
messaggi | Data Invio:
gio 19 giu 2008 - 20:24
Studio la cosa, grazie.
Torna su
Stanze Forum
Elenco Threads
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 !