Dans la programmation ASP, l'authentification d'identité peut être considérée comme couramment utilisée. Mais comment pouvons-nous assurer la sécurité de l’authentification ?
Page de soumission du formulaire : sub.htm
<html>
<tête>
<title>Connexion administrateur</title>
<corps>
<nom du formulaire=form1 méthode=post action=sub.asp>
<p>Administrateur :
<input type=text name=UserID size=25 maxlength=20>
mot de passe:
<input type=text name=Pass size=12 maxlength=20>
<type d'entrée=nom de soumission=Valeur de soumission=Soumettre>
</p>
</form>
</corps>
</html>
Programme SUB.asp
<%
Recevoir les données du formulaire
utilisateur = requête.from (ID utilisateur)
Vérifiez si les données soumises par le formulaire sont vides (vous pouvez utiliser JAVASCRIPT ou VBSCRIPT pour contrôler la page du formulaire, mais n'oubliez pas de la contrôler ici !
si utilisateur = alors
Allez sur la page des messages d'erreur !
réponse.redirection err1.htm
Cette phrase n’est peut-être pas utile, mais c’est bien de l’ajouter !
réponse.end
finir si
pass=request.from(Pass)
si réussite = alors
réponse.redirection err2.htm
réponse.end
finir si
Rejoindre la base de données
file=server.mappath(votre base de données)
définir conn=server.createobject(adodb.connection)
dr=driver={pilote d'accès Microsoft (*.mdb)};dbq=&fichier
conn.open dr
définir rs=server.createobject(adodb.recordset)
La clé est le langage SQL ici
sql=select * à partir de la table où user= &user& et pass= &pass&
rs.opensql
sinon rs.eof alors
Si vous le trouvez, rendez-vous sur la page de gestion.
réponse.redirect login.asp
autre
S'il n'est pas trouvé, vous entrerez dans une page d'erreur.
réponse.write err3.htm
finir si
%>
Tout le monde pense que le code ci-dessus devrait convenir, mais il existe ici un risque de sécurité sérieux :
Si je souhaite me connecter en tant qu'administrateur, je peux saisir dans la zone de saisie du formulaire SUb.htm :
Entrez dans la première zone de texte : a ou 1 = 1 ou OR =
Entrez dans la deuxième zone de texte : a ou 1 = 1 ou OR =
Soumettez, tout le monde verra... Oh, écoutez-moi, d'accord, je jetterai les briques plus tard...
a et 1 sont des caractères quelconques
Certaines personnes peuvent se demander pourquoi vous saisissez ces caractères pour entrer en tant qu'administrateur ? ?
En fait, ces caractères sont utilisés pour tromper le langage SQL dans votre programme et réussir à y entrer.
Comme vous pouvez le voir : dans le programme de démarrage SQL, la table est interrogée pour les enregistrements qui satisfont aux conditions user= &user& et pass= &pass&.
sql=select * à partir de la table où user= &user& et pass= &pass&
Après avoir entré le code ci-dessus, il est devenu :
sql=select * from table où user= a ou 1 = 1 et pass= a ou 1 = 1
Jetons un coup d'oeil. Y a-t-il une raison de ne pas entrer ? ? Donnez-moi d’abord une raison de ne pas entrer !
Le champ USER PASS ci-dessus est de type caractère et il en va de même s'il est de type numérique !
Solution:
1. Méthode de substitution de fonction :
Utilisez REPLACE pour remplacer les caractères spéciaux contenus dans le contenu saisi par l'utilisateur à des fins de contrôle ! sql=select * from table which user= &replace(user, , )& et pass= &replace(pass, , )&
Cette méthode ne peut remplacer qu'un caractère à la fois. En effet, non seulement les caractères dangereux, mais également les caractères tels que >, <, &, %, etc. Mais que dois-je faire si je ne parviens pas à utiliser la fonction REPLACE ? ?
2. Méthode de contrôle du programme
Utilisez un programme pour contrôler tout le contenu saisi par le client, afin que tous les éventuels caractères ou codes dangereux saisis par l'utilisateur puissent être entièrement contrôlés. C'est ma méthode !
<%
Capturer le contenu du formulaire soumis par l'utilisateur
utilisateur = requête.from (utilisateur)
pass=request.from(pass)
...
Le contrôle de boucle démarre
pour i=1 à len(utilisateur)
Utilisez la fonction MID pour lire un caractère à la position i dans la variable utilisateur
nous = milieu (utilisateur, i, 1)
Comparer les caractères lus
si nous= ou us=% ou us=< ou us=> ou us=& alors
S'il contient les caractères ci-dessus, un message d'erreur apparaîtra. Il ne peut pas contenir les caractères spéciaux ci-dessus.
réponse.redirection err2.htm
réponse.end
finir si
suivant
...
%>