Newsgroup: it.comp.lang.visual-basic
Titolo: query

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
 
[Microsoft][ODBC Microsoft Access Driver] Too few parameters.
Expected 2.
 
sulla linea: rs.Open sql, conn ,3,3
 
La causa dovrebbe essere quindi questa query la cui sintassi però mi 
sembra corretta:
sql = "SELECT * FROM clienti Where COGNOME=" & strCognome & " And NOME=" 
& strNome
 
sbaglio qualcos'altro?
 
-- 
Gulp®

Il 09/02/13 0.11, Gulp® ha scritto:
 > query la cui sintassi però mi
 > sembra corretta:
 
Invece NO !!
 
sql = "SELECT * FROM clienti Where COGNOME='" & strCognome & "' And 
NOME='" & strNome & "'"
 
 
-- 
Gulp®


ti consiglio vivamente di non usare la concatenazione delle stringhe per 
evitare il problema del SQL injection.
 
Riscrivi la query in questo modo:
(SQL Server / Oracle / MySQL)
"SELECT * FROM Clienti WHERE Cognome = @Cognome AND Nome = @Nome"
oppure (MS Access)
"SELECT * FROM Clienti WHERE Cognome = ? AND Nome = ?"
 
Passa i parametri tramite l'oggetto command
Visto che usi Access ricordati di passare i parametri nell'ordine esatto 
di come sono stati dichiarati
 
Ciao
Vincenzo
 
 
 

 Vincenzo
 
E' sicuramente cosa buona e giusta, anche se è fondamentale (direi) solo 
nei casi in cui si espone all'esterno (come una pagina 
internet/intranet). Però questa soluzione permette di risolvere un altro 
problema che la query scritta dall'OP si porta dietro.
 
Un cognome come, ad esempio, d'ambrosio avrebbe mandato in errore la 
query, certo sarebbe bastato un semplice replace ma la soluzione da te 
indicata è decisamente più elegante.
 
ciao
stefano
 

 stefano
 
StrCognome s strNome sono gi� processati da un Replace prima di essere
sottoposti alla query.
Il resto funziona bene.
Grazie comunque.
 
 

 Grazie comunque.
 
Ricordati sempre del piccolo Bobby Tables ;-).
 
Bye, G. 
 
 


Sai che avevo dimenticato quella vignetta?!?! :D
 
 

"Nicola Ottomano" ha scritto

Conosco uno che per essersela scordata ci ha quasi
rimesso il posto. E' riuscito a rimediare e pure a
coprire le proprie tracce, giusto in tempo. Adesso
ce l'ha appesa al muro :-D.
 
(E no, non sono io)
 
Bye, G. 
 
 


 
La chiamata alla SQL avviene da un'area riservata con accesso tramite 
password.
 
Le variabili strCognome e strNome non vengono passate da degli INPUT 
text, ma rilevate scorrendo col mouse delle righe di una tabella che 
contengono il nome e cognome, non vi è quindi la possibilità di 
effettuare modifiche alle due stringhe.
 
In ogni caso, per capire come affronatre il problema in un'altra 
situazione, saresti così cortese di correggermi la query seguente:
 
sql = "SELECT * FROM clienti Where COGNOME='" & strCognome & "' And 
NOME='" & strNome & "'"
 
che deve essere inserita in una pagina ASP per una tabella di database 
di tipo access?
 
Ti ringrazio
 
-- 
Gulp®

 strNome & "'"
 
(riprendo il discorso) e quindi questa query può essere passibile di SQL
Injection mediante:
 
http://www.miosito.it/Login.asp?User=%27%20OR%20%271%27%20=%20%27&Password=%27%20OR%20%271%27%20=%20%27
 
 
Io, che non amo tanto le query parametriche (per quello che devo fare mi hanno
sempre creato casini e sono di difficile gestione, naturalmente IMHO) mi sono
creato una funzione .NET che ho chiamato "NormalizzaInput" che esegue una serie
di controlli e pulizie di ogni campo di input... finora non mi hanno mai bucato
(o comunque se l'hanno fatto non me ne sono accorto) :-D
 
Nicola
 


 
Nicola il tuo link: The page cannot be found
 
Aspetto correzione, grazie
Ciao
 
-- 
Gulp®


 
No, nessun admin o loggin, nessun nome o cognome, nessun nickname solo 
una password,
una unica password per entrare nell'area riservata, secondo me o la 
conosci o....
-- 
Gulp®

 
 
non serve correzione, il link era un esempio di potenziale problema, non 
un sito reale...
 
se guardi bene il link vedrai che nell'url ci sono utente e password con 
un po' di OR e apici vari; con la sequenza giusta la tua funzione di 
controllo dell'input viene bypassata.
 
se usi la concatenazione di stringhe non c'e' input sanitizing che tenga 
e con la sequenza giusta bypassano il controllo che puoi mettere nella 
query.
 
oppure puoi mettere una funzione estremamente stringente che taglia tutte 
le keyword sql, ma allora se digito 'to be or not to be' la tua funzione 
tagliera' una parte importante del mio input.
 
non e' una questione di non saper fare le query o di ciccare un controllo 
perche' la 'falla' e' nel metodo; la concatenazione e' vulnerabile alla 
sql injection.
 
 
-- 
Paolo opg
 
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--


Fai una roba, se il sito che costruisci e pubblico, passaci la URL per accedere.
Ci mettiamo un attimo a capire se è passibile si SQL Injection oppure no.
 
Nicola

Il 19/02/13 10.37, Nicola Ottomano ha scritto:
 
No, non è passibile.
 
Comunque prova: 
http://www.studioziggiotto.it
 
 
 
-- 
Gulp®


Si, ma dove trovo la pagina di login?
 
Nicola
 

 Si, ma dove trovo la pagina di login?
 
Clicca sui giorni disponibili per gli appuntamenti.
 
Bye, G.

 Bye, G.
 
...e bravo Paperino !
 
-- 
Gulp®


Il controllo lo fai cablato? Nel senso che controlli che la password immessa
sia uguale ad un certo valore inserito nel tuo codice o in un tuo config, senza
passare per SQL Server?
 
Nicola

 wrote in news:5123aca9$0$26775
$
4faf...@reader2.news.tin.it
:

dai una controllata alla tua pagina di login.
 
il messaggio di blocco fa molto profescional e poco professional (se riesci 
a registrare il *mio* internet protocol ti faccio un monumento), manca la 
verifica del referer, non hai un controllo per limitare il numero di 
tentativi e visto il punto precedente una password piu' corta di 20 
caratteri e' molto invitante per il bruteforce.
 
con queste premesse il sql injection e' l'ultima delle tue 
preoccupazioni...


 preoccupazioni...
 
Quando sarai entrato ci sentiamo.
 
Grazie di tutto. Ciao
 
Gulp 
 
 

 passare per SQL Server?
 
Si Nicola, senza passare per SQL.
 
Comunque, non per polemica, ma per correttezza ti riporto parte della mia 
risposta a Paperino, qualche post più su:
 
"La chiamata alla SQL avviene da un'area riservata con accesso tramite
password."
 
E SOPRATUTTO:
 
"Le variabili strCognome e strNome non vengono passate da degli INPUT
text, ma rilevate scorrendo col mouse delle righe di una tabella che
contengono il nome e cognome, non vi è quindi la possibilità di
effettuare modifiche alle due stringhe."
 
Ringrazio comunque sempre per il vostro aiuto. Tenete presente che, anche se 
bazzico il NG dai tempi di Lupo Solitario, non sono un professionista e 
continuo a portarmi dietro le "crepe" dell'autodidatta.
 
Ciao
Gulp
 
 
 

 
 
...
buona continuazione


 continuo a portarmi dietro le "crepe" dell'autodidatta.
 
E noi qui che ci stiamo affà? ;-)
 

 e non, per dire, la copia del form di login salvata sul pc di qualcuno.
 
In questo momento ho un "mancamento" di fantasia, come potrei fare?
Una sorta di variabile "nascosta" inviata dalla mia pagina di ingresso a 
quella di
loggin in asp può bastare?
 
Grazie.
Ciao
 
 
 

 In questo momento ho un "mancamento" di fantasia, come potrei fare?
 
Request.ServerVariables ("HTTP_REFERER")