Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

requete avec caratère spécial " (SQL server 2000)

4 réponses
Avatar
Antoine
Bonjour,

J'ai crée ma première base avec SQL Server 2000.J'utilise php pour attaquer
cette base.

Voilà une requête qui me pose problème :

<?php
$link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion
impossible");
mssql_select_db('[production]', $link);
$requete="UPDATE intervention SET commentaire =
\"".addslashes($_POST['comm_modif'])."\", date_cloture=\"$aujourdhui à
$now\", validation=\"".$_POST['cloturer']."\" WHERE id=7990";
$result = mssql_query( $requete );
mssql_close();
?>

Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si
$_POST['comm_modif'] contient des guillemets l'exécution de la requête est
impossible. Pourtant addslashes les protège bien.

Le résultat à l'éxécution :

Ma requête :
UPDATE intervention SET commentaire = "Tentative d\'enregistrement avec des
guillemets \"\" !", date_cloture="23/08/2006 à 09:29:29", validation="Oui!"
WHERE id=7986

Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers '\'.
(severity 15) in d:\weblocal\interventions\index_.php on line 288
Warning: mssql_query(): Query failed in d:\weblocal\interventions\index_.php
on line 288

4 réponses

Avatar
Christian Robert
Bonjour,

Il me semble que les caractères à utiliser pour les chaînes de caractères
sous SQL Server sont :
'xxxxxxxxxxxxx'
et pas :
"xxxxxxxxxxxx"

En corrigeant cela devrait fonctionner.

Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration


"Antoine" a écrit :

Bonjour,

J'ai crée ma première base avec SQL Server 2000.J'utilise php pour attaquer
cette base.

Voilà une requête qui me pose problème :

<?php
$link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion
impossible");
mssql_select_db('[production]', $link);
$requete="UPDATE intervention SET commentaire =
"".addslashes($_POST['comm_modif'])."", date_cloture="$aujourdhui à
$now", validation="".$_POST['cloturer']."" WHERE idy90";
$result = mssql_query( $requete );
mssql_close();
?>

Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si
$_POST['comm_modif'] contient des guillemets l'exécution de la requête est
impossible. Pourtant addslashes les protège bien.

Le résultat à l'éxécution :

Ma requête :
UPDATE intervention SET commentaire = "Tentative d'enregistrement avec des
guillemets "" !", date_cloture="23/08/2006 à 09:29:29", validation="Oui!"
WHERE idy86

Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers ''.
(severity 15) in d:weblocalinterventionsindex_.php on line 288
Warning: mssql_query(): Query failed in d:weblocalinterventionsindex_.php
on line 288


Avatar
Patrice
La requête finale devrait être de la forme :

... SET Commentaire='Tentative d''enregistrement'...

Un simple guillemet entoure le texte. A l'intérieur le guillemet simple est
doublé.

Si possible, utiliser des paramètres permet de ne pas avoir ce genre de
problème (et de se protéger contre les attaques par injection etc...)

--
Patrice

"Antoine" a écrit dans le message de
news:
Bonjour,

J'ai crée ma première base avec SQL Server 2000.J'utilise php pour
attaquer
cette base.

Voilà une requête qui me pose problème :

<?php
$link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion
impossible");
mssql_select_db('[production]', $link);
$requete="UPDATE intervention SET commentaire > "".addslashes($_POST['comm_modif'])."", date_cloture="$aujourdhui à
$now", validation="".$_POST['cloturer']."" WHERE idy90";
$result = mssql_query( $requete );
mssql_close();
?>

Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si
$_POST['comm_modif'] contient des guillemets l'exécution de la requête est
impossible. Pourtant addslashes les protège bien.

Le résultat à l'éxécution :

Ma requête :
UPDATE intervention SET commentaire = "Tentative d'enregistrement avec
des
guillemets "" !", date_cloture="23/08/2006 à 09:29:29",
validation="Oui!"
WHERE idy86

Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers ''.
(severity 15) in d:weblocalinterventionsindex_.php on line 288
Warning: mssql_query(): Query failed in
d:weblocalinterventionsindex_.php
on line 288


Avatar
Antoine
Merci pour vos interventions.

Effectivement, j'ai bien mis mon texte entre simple quote avec doublement
des quotes si présent dans le texte.

Mon formatage de requête :
$chaine="UPDATE intervention SET commentaire = '".ereg_replace("'", "''",
$comm_modif)."' WHERE idx96";

Comment me protèger des injections SQL ?

Merci à bientôt !

Antoine

"Patrice" a écrit :

La requête finale devrait être de la forme :

.... SET Commentaire='Tentative d''enregistrement'...

Un simple guillemet entoure le texte. A l'intérieur le guillemet simple est
doublé.

Si possible, utiliser des paramètres permet de ne pas avoir ce genre de
problème (et de se protéger contre les attaques par injection etc...)

--
Patrice

"Antoine" a écrit dans le message de
news:
> Bonjour,
>
> J'ai crée ma première base avec SQL Server 2000.J'utilise php pour
> attaquer
> cette base.
>
> Voilà une requête qui me pose problème :
>
> <?php
> $link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion
> impossible");
> mssql_select_db('[production]', $link);
> $requete="UPDATE intervention SET commentaire > > "".addslashes($_POST['comm_modif'])."", date_cloture="$aujourdhui à
> $now", validation="".$_POST['cloturer']."" WHERE idy90";
> $result = mssql_query( $requete );
> mssql_close();
> ?>
>
> Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si
> $_POST['comm_modif'] contient des guillemets l'exécution de la requête est
> impossible. Pourtant addslashes les protège bien.
>
> Le résultat à l'éxécution :
>
> Ma requête :
> UPDATE intervention SET commentaire = "Tentative d'enregistrement avec
> des
> guillemets "" !", date_cloture="23/08/2006 à 09:29:29",
> validation="Oui!"
> WHERE idy86
>
> Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers ''.
> (severity 15) in d:weblocalinterventionsindex_.php on line 288
> Warning: mssql_query(): Query failed in
> d:weblocalinterventionsindex_.php
> on line 288





Avatar
Christian Robert
Comment se protéger des injections SQL ?
En respactant quelques règles :

- Privilégier l'utilisation de procédures stockées
- Eviter autant que possible le code SQL dynamique
- Vérifier les paramètres passés à une procédure par des exepressions
régulières ou par une recherche via les tables, vues ou fonctions systèmes
- Utilsation de QUOTENAME des noms d'objets
- Remplacer ou détecter certains caractères (tel que -- ou ' ou ", etc.)
passé dans les paramètres.

Cette liste est non limitative.

--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration


"Antoine" a écrit :

Merci pour vos interventions.

Effectivement, j'ai bien mis mon texte entre simple quote avec doublement
des quotes si présent dans le texte.

Mon formatage de requête :
$chaine="UPDATE intervention SET commentaire = '".ereg_replace("'", "''",
$comm_modif)."' WHERE idx96";

Comment me protèger des injections SQL ?

Merci à bientôt !

Antoine

"Patrice" a écrit :

> La requête finale devrait être de la forme :
>
> .... SET Commentaire='Tentative d''enregistrement'...
>
> Un simple guillemet entoure le texte. A l'intérieur le guillemet simple est
> doublé.
>
> Si possible, utiliser des paramètres permet de ne pas avoir ce genre de
> problème (et de se protéger contre les attaques par injection etc...)
>
> --
> Patrice
>
> "Antoine" a écrit dans le message de
> news:
> > Bonjour,
> >
> > J'ai crée ma première base avec SQL Server 2000.J'utilise php pour
> > attaquer
> > cette base.
> >
> > Voilà une requête qui me pose problème :
> >
> > <?php
> > $link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion
> > impossible");
> > mssql_select_db('[production]', $link);
> > $requete="UPDATE intervention SET commentaire > > > "".addslashes($_POST['comm_modif'])."", date_cloture="$aujourdhui à
> > $now", validation="".$_POST['cloturer']."" WHERE idy90";
> > $result = mssql_query( $requete );
> > mssql_close();
> > ?>
> >
> > Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si
> > $_POST['comm_modif'] contient des guillemets l'exécution de la requête est
> > impossible. Pourtant addslashes les protège bien.
> >
> > Le résultat à l'éxécution :
> >
> > Ma requête :
> > UPDATE intervention SET commentaire = "Tentative d'enregistrement avec
> > des
> > guillemets "" !", date_cloture="23/08/2006 à 09:29:29",
> > validation="Oui!"
> > WHERE idy86
> >
> > Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers ''.
> > (severity 15) in d:weblocalinterventionsindex_.php on line 288
> > Warning: mssql_query(): Query failed in
> > d:weblocalinterventionsindex_.php
> > on line 288
>
>
>