验证码——给您的隐私加了一把锁

前言

    随着信息技术逐步的进入我们的生活中,在这个信息大爆炸的时代,隐私肯定使我们备受关注的,其中很多大牛想了好多方法去保护用户的隐私,“验证码”就是其中的一种方式,那么怎么应用验证码?怎么对网页进行加取验证码?就请你安静的做个美男子(美女子)且慢慢看来。

内容

验证码定义

    验证码(CAPTCHA)是“CompletelyAutomated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。(百度百科如是说)

验证码的作用

    防止恶意破解密码、刷票、论坛灌水、刷页。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码,免得你的账号被人盗用给自己带来不必要的麻烦。

注意

    验证码通常使用一些线条和一些不规则的字符组成,主要作用是为了防止一些黑客把密码数据化盗取。

验证码分类

    Gif动画验证;手机短信验证码;手机语音验证码;视频验证码等一系列类型;

实质

    每次登录或者需要重复操作是会随机产生验证码,防止一些应用程序重复进行操作,导致密码泄露。(个人理解)

实践

  • 以牛腩新闻发布系统网页登录加入验证码验证功能为例:

页面前台

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="Web.admin.login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>后台登陆-牛腩新闻发布系统</title>
    <link href="../CSS/login.css" rel="styesheet" />
    <script language="javascript" type="text/javascript">
        function changeCode() {
            var imgNode = document.getElementById("vimg");
            imgNode.src = "../handler/WaterMark.ashx?t=" + (new Date()).valueOf();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div id="loginfrm" class="round1">
            <h3>后台登陆-牛腩新闻发布系统</h3>
            <div id="login">
                <img src="../img/niunanlogo.jpg" alt="LOGO" class="login_logo" />
                <p>
                    用户名:<asp:TextBox ID="txtName" runat="server" CssClass="textbox"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="请输入用户名!" Text="*" ControlToValidate="txtName"></asp:RequiredFieldValidator>
                </p>

                <p>
                    密     码:
                    <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" CssClass="textbox"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="请输入密码!" Text="*" ControlToValidate="txtPassword"></asp:RequiredFieldValidator>
                </p>
                <p>
                    验证码:<img src="../handler/WaterMark.ashx" id="vimg" alt="" onclick="changeCode()" />
                    <asp:TextBox ID="txtCode" runat="server" CssClass="txtcode"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="请输入验证码!" Text="*" ControlToValidate="txtCode"></asp:RequiredFieldValidator>
                </p>
                <p>
                    <asp:Button ID="btnLogin" runat ="server" Text="登陆" OnClick="btnLogin_Click"/></p>
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="true" ShowSummary="false" />
            </div>
            <div id="footer">版权所有  &copy <a href="http://blog.csdn.net/zlt995768025" target="_blank">周丽同</a>&<a href="http://blog.163.com/z18333611873_1/" target="_blank">众志网</a> </div>
        </div>
    </form>
</body>
</html>

后台编码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using System.Web.Security;

namespace Web.admin
{
    public partial class login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Response.Write("123456的MD5码是:" + FormsAuthentication.HashPasswordForStoringInConfigFile("123456","MD5"));
        }

        //登录按钮;
        protected void btnLogin_Click(object sender, EventArgs e)
        {


            //判断验证码是否输入正确;
            string code = txtCode.Text.Trim().ToUpper();
            string rightCode = Session["Code"].ToString();

            if (code != rightCode)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(),"message","<script language='javascript'defer>alert('验证码输入错误!');</script>");
                return;
            };

            string name = txtName.Text.Trim();
            string pwd = txtPassword.Text.Trim();
            bool b=LoginManager.IsLogin(name,pwd);

            //把密码转为PD5码的形式;
            pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd,"MD5");


            //判断是否登录成功;
            if (b)
            {
                //登录成功;
                Session["admin"] = name;
                Response.Redirect("categorymanager.aspx");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('登录失败,请联系系统管理员!');</script>");
            }

        }
    }
}

B层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public class LoginManager
    {
#region 用户是否登录成功
        /// <summary>
        /// 判断用户是否登录成功;
        /// </summary>
        /// <param name="name">用户名</param>
        /// <param name="pwd">密码</param>
        /// <returns></returns>
        public static bool IsLogin(string name, string pwd)
        {
            //给定一个特定的登录用户;
            bool flag = false;
            if ("1" == name && "1"== pwd)
            {
                flag = true;
            }
            return flag;
        }
#endregion

    } 
}


小结

    1、信息技术随着人类的需求不断地发展进步。

    2、不将就是发现的源动力。


感谢您的宝贵时间~~~

原文地址:https://www.cnblogs.com/zhoulitong/p/6412410.html