35 messaggi dal 27 giugno 2005
sto cercando di inserire in un db un user ed una password in questo modo ma nn mi refresha nemmeno la pag.
potete dirmi dov'è l'errore grazie:

pag. 1: form_utenti.asp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>
<form method="post" action="modifica.asp?mode=insert">
<input type = "text" name = "user" id = "user" value = "user"></br>
<input type = "password" name = "pwd" id = "pwd"></br>
<input type="button" id="inserisci">
</form>
</body>
</html>


pag.2: modifica.asp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<%
dim modo, sql
Modo=Request.QueryString("mode")
if modo=insert then
sql = "insert into utenti_prova (user,pwd) values ('" request.form("user") & "','" & request.form("pwd") & "' 'Query di inserimento
End if

%>
</body>
</html>
Non submitti il form, avendo un input type="button" anziché un input type="submit"

Inoltre la pagina "modifica.asp" non è certo completa: componi l'istruzione sql (esponendoti tra l'altro a sql injection) ma non apri connessione al database e non esegui il comando...
Senza contare che nel confronto "if modo=insert" insert dovrebbe essere racchiuso dai qualificatori di testo (apici doppi) trattandosi di una stringa e non di una variabile.

Matteo Casati
GURU4.net
35 messaggi dal 27 giugno 2005
Tipo di errore:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Sintassi non corretta in prossimità della parola chiave 'user'.
/corso_asp/utenti_prova/modifica.asp, line 21

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<%
set dbconn = server.createobject("adodb.connection")
dbconn.open(application("strconn"))
set rstutenti = server.createobject("adodb.recordset")
dim modo, sql
modo=Request.QueryString("mode")
if modo="insert" then
sql = "insert into utenti_prova (user,pwd) values ('" &request.form("user") & "','" & request.form("pwd") & "')"
End if
set rstutenti = dbconn.execute(sql)
rstutenti.close()
dbconn.close()
%>
</body>
</html>

ps il submit nell'altra pagina l'ho modificato


Modificato da aluuupo il 14 novembre 2006 15.23 -
Modificato da aluuupo il 14 novembre 2006 15.26 -
aluuupo ha scritto:

Microsoft OLE DB Provider for SQL Server (0x80040E14)
Sintassi non corretta in prossimità della parola chiave 'user'.


"User" è una parola riservata.
Sostituisci la query con:


sql = "insert into utenti_prova ([user], pwd) values ('" &request.form("user") & "','" & request.form("pwd") & "')" 


Oppure (meglio) cambia il nome al campo nel database.

Inoltre non concatenare mai direttamente l'input di un utente alle istruzioni sql o sei fortemente esposto o sql injection; non solo: con il codice che stai usando non puoi inserire valori che contengano il carattere apice singolo (')...

Poi: a cosa serve un adodb.recordset per operazioni di scrittura sul db?

Matteo Casati
GURU4.net
35 messaggi dal 27 giugno 2005
m.casati ha scritto:
aluuupo ha scritto:

Inoltre non concatenare mai direttamente l'input di un utente alle istruzioni sql o sei fortemente esposto o sql injection; non solo: con il codice che stai usando non puoi inserire valori che contengano il carattere apice singolo (')...



mi spighi che vuoi dire, come puoi ben capire definirmi principiante è un'esagerazione in eccesso
Semplice: prova a registrare un utente con user = "l'ala" e vedrai un bell'errore sql... Infatti la tua query diventa:

".... values ('l'ala', ...."


Ora, anziché un semplice testo con l'apostrofo, immaginiamo che l'utente inserisca "aa'; drop table utenti_prova; --" ed ecco che magicamente la tua tabella sparisce dal database. Quello di cui sopra è un semplice esempio di sql injection ovvero una tecnica usata per violare o rovinare basi dati.

P.S.: non obiettare che dovrebbe conoscere il nome della tabella perché è un problema che si aggira in 5 secondi

Per risolvere questi problemi non devi far altro che raddoppiare il carattere apice singolo nei valori passati alle query (semplifico, il discorso sarebbe un po' più complesso ma non è questa la sede per affrontarlo con dovizia di particolari)
Per esempio, per inserire il valore "l'ala" nel tuo db devi modificare l'sql così:

".... values ('l''ala', ...."


A livello di codice VBScript ti basta un semplice:

Replace(valore, "'", "''")


Spero di aver chiarito un po' quello che intendevo.

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.