Trucsweb.com

Forum de discussion

 Forum « Programmation ASP » (archives)

Re: session / recordset / synthaxe

Envoyé: 24 juin 2004, 10h55 par Oznog


Salut,

Tu ne peux pas passer ce que tu veux dans une variable session. Par exemple une connexion, tu ne passe pas la connexion, elle existe de toute façon physiquement sur le serveur tant et aussi longtemps que te ne la ferme pas ou que la session ne dse termine. Alors l'idée est de passer non pas la connexion (imagine maintenant passer une autobus!) mais plutôt une référence à la connexion (le nom de l'autobus, pas l'autobus!).

Pour un "recorset" regarde du côté du "getRow", tu obtient une matrice (array) du résultat, beaucoup plus portable.

Qauant à la deuxième question, je ne saisie pas vraiment? Pourquoi, qu'est-ce que tu n'aime pas dans ta requête pour vouloir la changer? Premièrement c'est une requête SQL et pas ASP bien que se soit effectivement le ASP qui la transmet à ADO qui lui la traduit à la base de données.

Qu'est-ce que l'on peut en dire;

1. SELECT * devrait autant que possible être évité. L'idéale est de spécifier chacun des cham,p que tu veux récupérer. Plus la table est importante et plus s'est important.

select maTable1.monChamp1, maTable1.monChamp2, maTable2.monChamp3...

2. Pur optimiser la requête tu met les champ texte (mémo pour Access) à la fin.

select maTable1.monChampByte, maTable1.monChampNombre, maTable2.monChampLong, maTable2.monChampTexte...

3. Tu dois impérativement remplacer les guillemets en les doublant. Car dans ton exemple, si l'usager entre "l'école" avec le guillemet ça va provoquer une erreur. N'OUBLIE PAS QUE CETTE REQUÊTE N'EST PAS EXÉCUTÉ, TU FAIT SEULEMENT LA CONSTRUIRE, ALORS SI TU LA CONSTRUIT AVEC UNE mot qui contient aussi un guillemet, ta construction s'effronde. Tu dois le doubler pour lui indiquer que lors de la construction il traite ce guillemet comme un simplecaractère et non comme un guillemet qui INDIQUE LA FIN DE TA CONSTRUCTION.

Donc tu trim mais aussi remplace (en fait le trim est inutile, si l'usager entre des espace de trop et bien sont identification est erroné!. Donc fait tout simplement un remplacement!

WHERE Login='" & replace(request.form("user"),"""","""""")

4. En passant, un service professionnel passe avant la saisie du login/mot de passe dans un "nettoyeur" pour lui enlever tout caractères spéciaux ou pire tout mot réservé SQL afin de prévenir une attaque. En effet puisqu'il sagit encore une fois d'une construction et non pas d'une instruction, on peut y glisser un bout de requête SQL qui imbriqué dans celle-ci peut faire planter ou pire viloler et accéder à ta base de façon beaucoup plus viscieuse.

5. D'ailleurs à ce niveau de sécurité, tu devrais aussi diviser la requète en deux. C'est à dire que tu SELECT le login (normalement il est devrait être unique) MAIS PAS LE MOT DE PASSE. SI le login existe alors là seulement tu vérifie par la suite si le mot de passe est bon.

select...

if rs('Password') = request.form("pass") then
' OK valide.

Note que cette fois si ce n'Est pas la construction d'une chaine SQL mais une instruction direct alors pasbesoin de remplacer les guillemets. Il peut y avoir un guillemet et tout va bien aller.

Avec cette technique, en même temps que tu évite le hacker d'entrer, tu peux spécifier l'erreur au visiteur, c,est à dire identifier s'il s'agit d'une erreur de login ou de mot de passe.

C'est à peut près ce que l'on peut en dire. Je ne vois pas grand chose de plus à te dire, ah, tu peux ajouter un point virgule à la fin.

..."))& "';"

Maintenant, ce n'est qu'une partie du code, il peut y avoir d'autre erreur ailleurs. Et aussi assure toi d'utiliser les bon nom de champ et de table. Ta table s'appelle bien "PASS" par exemple ?

Ah oui, par habitude je met toujours des espaces entre les champs et les égal (...Login = '" &... and Password = '" &...). mais si je me souvient bien il se peut qu'avec ACCESS il sopit pointilleux à ce niveau. Vaut mieux ne pas prendre de chance et prendre l'habitude de mettre des espace. Ça va être plus lisible et ça ne sera pas plus lourd contrairement au espace d'une page Web!

Ciao
Oznog


Réponses

 Aucune réponse à ce message... 
Aucun médias sociaux
X

Trucsweb.com Connexion

Connexion

X

Trucsweb.com Mot de passe perdu

Connexion

X

Trucsweb.com Conditions générales

Conditions

Responsabilité

La responsabilité des Trucsweb.com ne pourra être engagée en cas de faits indépendants de sa volonté. Les informations mises à disposition sur ce site le sont uniquement à titre purement informatif et ne sauraient constituer en aucun cas un conseil ou une recommandation de quelque nature que ce soit.

Aucun contrôle n'est exercé sur les références et ressources externes, l'utilisateur reconnaît que les Trucsweb.com n'assume aucune responsabilité relative à la mise à disposition de ces ressources, et ne peut être tenue responsable quant à leur contenu.

Droit applicable et juridiction compétente

Les règles en matière de droit, applicables aux contenus et aux transmissions de données sur et autour du site, sont déterminées par la loi canadienne. En cas de litige, n'ayant pu faire l'objet d'un accord à l'amiable, seuls les tribunaux canadien sont compétents.

X

Trucsweb.com Trucsweb

X

Trucsweb.com Glossaire

X

Trucsweb.com Trucsweb

X

Trucsweb.com Trucsweb

Conditions

Aucun message!

Merci.

X
Aucun message!
X

Trucsweb.com Créer un compte

Créer un compte

.
@