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>
<form name="form1" method="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">
<input type="submit" name="Soumettre" value="Soumettre">
</p>
</form>
</corps>
</html>
Programme SUB.asp
<%
Recevoir les données du formulaire
utilisateur=request.from("IDutilisateur")
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 pass="" 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")
set conn=server.createobject("adodb.connection")
dr="driver={pilote d'accès Microsoft (*.mdb)}; dbq="&fichier
conn.open dr
set rs=server.createobject("adodb.recordset")
La clé est le langage SQL ici
sql="select * from table which user= "&user&" et pass= "&pass&" "
rs.open sql
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.écrire "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 à l'administrateur, je peux le saisir dans la zone de saisie du formulaire SUb.htm :
Saisissez dans la première zone de texte : a ou 1 = 1 ou OR =
Saisir dans la deuxième zone de texte : a ou 1 = 1 ou OR =
Soumettre, tout le monde verra... "Oh, écoute-moi, d'accord, je jetterai les briques plus tard..."
"a" et "1" sont des caractères.
Certaines personnes peuvent vous demander pourquoi vous entrez en tant qu'administrateur lorsque vous saisissez ces caractères ? ?
En fait, ces caractères sont une tromperie du langage SQL de votre programme. Pour ceux qui ont réussi à saisir,
veuillez consulter : Lors du démarrage du programme SQL, la table est interrogée pour les enregistrements qui répondent aux critères user= "&user&" et pass= ". &pass&" "conditions
sql="select * from table which user= "&user&" and pass= "&pass&" "
Après avoir entré le code ci-dessus, il est devenu :
sql="select * from table which user= a ou 1 = 1 et pass= a ou 1 = 1 "
Voyons, y a-t-il une raison pour ne pas entrer ? ? Donnez-moi une raison pour ne pas entrer !
La même chose est vraie si le champ USER PASS ci-dessus est numérique !
Solution :
1.
Utilisez REPLACE Remplacez les caractères spéciaux 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 fait, les caractères dangereux ne sont pas seulement " ", mais aussi des caractères tels que ">", "<", "&", "%" etc. doit être entièrement contrôlé. Mais que dois-je faire si la fonction REPLACE ne convient pas ?
2. La méthode de contrôle du programme
utilise un programme pour contrôler tout le contenu saisi par le client, afin que tous les caractères ou codes dangereux saisis par l'utilisateur puissent être entièrement contrôlé, c'est ma méthode !
<%
Capturer le contenu du formulaire soumis par l'utilisateur
utilisateur=request.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 us=" " 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
...
%>