Idées de base:
Écrivez un programme indépendant pour chaque fonction, page de programme
Informez les clients que possible aussi peu d'informations du côté serveur
N'utilisez pas l'idée que "les clients devraient écrire ceci" pour réfléchir au problème
Pensez à autant de choses que possible qui ne peuvent pas se produire
1. Problèmes possibles avec les pages Web dynamiques interactives
1.1 Interaction de type de formulaire
1.1.1 Introduction aux concepts
Lorsque nous interagissons avec les visiteurs, le formulaire le plus couramment utilisé (méthode post / get / put). Bien que cela soit très pratique, de nombreux problèmes surviennent à cause de cela.
Le drapeau d'entrée dans le formulaire
Utilisé pour accepter les informations saisies par les utilisateurs, telles que: nom d'utilisateur, mot de passe, e-mail, etc. Si vous ne vérifiez pas bien les utilisateurs, un utilisateur malveillant
Bloquera certaines machines de sécurité
pour contourner la certification de sécurité. Par exemple, la saisie d'une instruction HTML standard ou d'une instruction JavaScript modifiera le résultat de sortie et la saisie d'une instruction HTML standard dans la zone d'entrée
Quel type de résultats sera obtenu? Par exemple, dans un livre de messages, nous entrons le contenu de notre message: <fontsize = 10> Bonjour! </font> s'il n'y a pas d'écran dans votre programme
Bloquer les instructions HTML, puis la police "Hello" sera modifiée
taille. Changer la taille de la police et les autocollants dans le livre de messages n'est parfois pas une mauvaise chose, mais cela peut rendre le livre de messages vivant. Mais si vous l'écrivez dans la boîte d'entrée
La boucle morte de JavaScript, comme:
<aherf = "http: // someUrl" onMouseOver = "while (1) {window.close ('/')}"> Le premier millier passionnant </a>, puis vérifiez le message pour d'autres.
Déplacez simplement les invités
Si vous déplacez la souris vers "les premiers mille passionnants", le navigateur de l'utilisateur mourra en raison de la boucle morte.
1.1.2 Points clés de la prévention
(1) Filtrez des caractères spéciaux
([/ &; / `'/// |" *? ~ <> ^ / (/) / [/] / {/} / $ / n / r]) /// $ 1 / g;), c'est le plus fondamental, et a été mentionné plus d'une fois dans de nombreux endroits.
<criptLanguage = "vbscript">
subbubotton_onclick
erm1.uusername.value = "" alors
msgbox "Votre nom ne peut pas être vide!", 0 + 32, "Oh! Pas encore possible"
form1.uusername.focus
otestub
endire
efform1.upassword.value = "" puis
msgbox "Votre mot de passe ne peut pas être vide!", 0 + 32, "Oh! Pas encore possible"
form1.upassword.focus
otestub
endire
erm1.uusername.value = "" alors
msgbox "Votre nom ne peut pas être vide!", 0 + 32, "Oh! Pas encore possible"
form1.uusername.focus
otestub
endire
Form1.Soubmettez
fin
</cript>
FunctionSempty (objname)
{
varstr = document.inputform [objname] .value
vartMpstr = str.replace ([/ &; / `'/// |" *? ~ <> ^ / (/) / [/] / {/} / $ / n / r]) /// $ 1 / g;, "")
vartMpstr = tmptr.replace ([/ &; / `'/// |" *? ~ <> ^ / (/) / [/] / {/} / $ / n / r]) /// $ 1 / g;, "")
return (tmptr.length == 0)
}
FonctionCheck ()
{
tf = document.inputform
errors = ""
if (isEmpty ("username")) erreurs + = "nom d'utilisateur ne peut pas être vide./n";
if (iSEmpty ("mot de passe")) erreurs + = "mot de passe ne peut pas être vide! / n"
si (erreurs! = "")
alerte (erreurs);
return (erreurs == "")