Erreur de syntaxe après requête SQL insert [Résolu]

Signaler
Messages postés
26
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
23 juillet 2010
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Bonjour à tous et meilleurs voeux pour cette année 2007!!!

je rencontre un problème concernant une requête SQL INSERT. Pour un champ bien précis, dès que je met le caractère ', il me met un message d'erreur de syntaxe. Si je l'enlève, il m'insère bien toute les données.
Comment faire pour autoriser ce caractère?

J'ai regardé un peu partout et je n'ai rien trouvé qui se rapproche le plus de ce problème...

Le code de la page est ci-dessous :
"
<!--#include file="_connexion2.asp"-->

<%fcat=Request.Form("cat")
fref1=Request.Form("ref1")
fnom=Request.Form("nom")
fdesign=Request.Form("design")
fdescrip=Request.Form("descrip")
fdate=Request.Form("date")
ftype=Request.Form("type")
fcable=Request.Form("cable")
fphoto1=Request.Form("photo1")
ffile1=Request.Form("file1")
ffile2=Request.Form("file2")
faff=Request.Form("aff")%>




<tr>
 




Ajout d'une nouvelle mise à jour
<form method="POST" name="maj" action="Ajouter_maj.asp">
 Photo produit * : " name="photo1" size="20">

 réf produit * : " name="ref1" size="20">

 Nom produit * : " name="nom" size="50">

 Type de produit * : " name="type" size="50">

 Description maj * :<textarea name="descrip" rows=5 cols=55><%=fdescrip%></textarea>

 Date mise à jour * : " name="date" size="20">

 Type de cable * : " name="cable" size="20">

 Fichier 1 * : " name="file1" size="20">

 Fichier 2 : " name="file2" size="20">

 

 
 
 </form>


<% if fnom<>"" then
Requete = "Insert Into MAJ (Photos,Ref,Nom,Type,Description,Date_Version,Cable,Fichier1,Fichier2) Values ('"&fphoto1&"','"&fref1&"','"&fnom&"','"&ftype&"','"&fdescrip&"','"&fdate&"','"&fcable&"','"&ffile1&"','"&ffile2&"')"
Set rs = Conn2.Execute(Requete)
response.write("Mise à jour ajoutée avec succés")
end if
%>


 


<%
Conn2.close
Set Conn2=nothing
%>
"

Merci pour l'aide que vous pourrez m'apporté.

6 réponses

Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
Salut,

L'apostrophe ' est un caractère spécial, tu dois toujours les doubler avant une insertion SQL, pour tous tes champs. Exemple :
ftype=Replace(Request.Form("type"), "'","''")

Bonne journée,
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
ARGGGGG :-| beurk !!! ok j'exagere peut être un peu mais ce que tu fais est horriblement pas beau !!!

Imagine que je suis un utilisateur stupide et qui tape "'); drop table users;--" à ton avis il se passe quoi ? et encore là l'utilisateur et stupide donc il réfléchit pas mais pour peu qu'il cherche un peu qu'il se rende compte qu'il est authentifié en "sa" il va pouvoir faire un peu tout ce qu'il veut sur la base, le serveur et peut etre pire encore ... bref fais TRES attention avec ca :-) (je pense que la le message est bien passé :p)

Pour info, avec une technologie non obsoléte (ASP3 doit avoir autour de 8ans ...), on peut tout simplement faire
SqlCommand command new SqlCommand("Select * from toto where totoID @totoID", conn)
command.Parameters.Add(new SqlParameter("@totoID", tb.text));
command.ExecuteQuery();

Ainsi ASP.net offre un mécanisme qui interdit toute requete de type SQL Injection ...

PS : ne prend pas mal ce que je dit, c'est juste pour te montrer que tu n'utilises pas la bonne techno et pas de la bonne facon :-)

<hr />Cyril - MVS - MCP
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
jesusonline > Arf, cyril, t'en fait pas un peu trop ? :p Il utilises pas forcément la mauvaise techno, c'est plutôt de façon de l'utiliser qui est pas excellente...

syl62 > Effectivement, l'erreur de syntaxe que tu obtiens n'est qu'une conséquence du trou de sécurité que cyril a pointé du doigt. Le seul moyen (en ASP3) d'empêcher qu'il soit exploité est bien de doubler les ' mais je te conseille quand même de prévoir un jour de passer à ASP.NET, qui est quand même beaucoup plus récent, gratuit (l'IDE aussi) et beaucoup mieux niveau sécurité...
Surtout qu'une des raisons qui fait que l'ASP est obsolète c'est justement le manque de ces fonctions de sécurités et des autres trucs du même genre...
Enfin bref, maintenant que cyril a lancé la petite pub pour ASP.NET , je peux donner le lien qui va bien  :
Le coach ASP.NET

Voilà (sinon, te casses pas la tête à migrer trop vite vers ASP.NET, l'ASP ça marche, hein, mais bon... il y a des limites...)
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
Quoi ? Ca se voit tant que ça j'aime pas cette vieille techno ?  Ce genre de faille de sécurité me met hors de moi, je veux donc être sur que le message est passé ! ainsi je pense que syl62 fera attention lorsqu'il fera des requetes du genre : il faut toujours penser que le client est un hacker ! et les hacker regorgent de créativité !

C'est vrai que ce serait bien de passer à ASP.net si le contexte te le permet, mais c'est pas toujours évident ... Et puis il est toujous possible d'écrire ce genre de faille en ASP.net ... et j'en ai malheureusement vu plus d'une (sur des serveurs en production c'est marrant :-p)

<hr />Cyril - MVS - MCP
Messages postés
26
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
23 juillet 2010

Bonsoir à vous et tout d'abord merci pour vos réponses....

La 1ère solution de Nurgle m'a permi de régler mon problème et je t'en remercie. Il est vrai que la technologie ASP.net doit être beaucoup mieux.... mais je ne suis pas développeur, j'esssaye de trouver des solutions qui me facilite la vie pour la mise à jour de site internet. (Accéder à la base ACCESS sans avoir à publier l'intégralité de la base à chaque fois qu'une information change....)

Maintenant le site tourne sur un serveur qui ne gère pas l'ASP.net et je n'ai pas de base SQL mais une base ACCESS, c'est pourquoi j'utilise encore l'ASP.

Il faudra effectivement que je songe à changer progressivement de technologie...

En tout cas merci encore pour votre aide et toutes vos remarques constructives.

A bientôt.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
ASP.net est gratuit et s'installe sur tous serveur windows (sauf les très vieux OS) et contrairement à ASP il y a un éditeur très performant qui est gratuit lui aussi : Visual Web Dev Express ... tu peux aussi consulter les tutos/vidéos de la coach ASP.net. Nurgle a mis le lien plus haut. Et tu peux aussi utiliser Access (meme si je déconseil car Sql Express est plus performant et gratuit) avec ASP.net. Après c'est sur qu'il faut avoir le temps et les besoins mais tu y gagnerais énormement en productivité :-)

<hr />Cyril - MVS - MCP