这篇文章主要介绍了一个简单的后台与数据库交互的登录与注册,包含sql注入处理、以及MD5加密知识点介绍

一、工具:
 vs2013[因为我现在用的也是2013,版本随便你自己开心]
 sql2008[准备过久升级] 

二、用到的语言

HTML+CSS+Jquery+Ajax+sqlserver

HTML[相当于一个人]

css[要穿衣服]

Jquery[人要做一些动作,Jquery是对js一些常用方法的封装]

Ajax[建立前端页面与数据库的交互]
sqlserver[数据库] 

三、过程
html部分代码:

<body>
  <div id="header">
    <div id="header_con">
      <a href="javascript:;" onclick="showRegBox()">注册</a>
      <a href="javascript:;" onclick="ShowLoginBox()">登录</a>
    </div>
  </div>
  <div id="loginBox">
    <div>
      <input type="text" id="TxtUserName" />
    </div>
    <div><input type="password" id="TxtPwd" /></div>
    <div><a href="javascript:;" onclick="login()">登录</a></div>
  </div>
  <div id="Regbox">
    <div><input type="text" id="TxtRegUserName" /></div>
    <div><input type="password" id="TxtRegPwd" /></div>
    <div><input type="text" id="TxtRegqq"/></div>
    <div><input type="text" id="TxtRegEmail" /></div>
    <div><a href="javascript:;" onclick="Reglogin()">注册</a></div>
    </div>
</body>

css代码:

* {
  margin:0px;
  padding:0px;
}
#header {
  height:40px;
  width:100%;
  background:#000000;
}

a {
 text-decoration:none;
}
#header a {
  float:right;
  color:#ffffff;
  line-height:40px;
  margin-left:10px;
}
#header_con {
  width:1200px;
  margin:0px auto;
}
.login_Item {
  margin-left:20px;
}
.login_Item input {
  width:348px;
  height:40px;
  margin-top:10px;
  border:solid 1px #04a6f9;
}
.login_Item a {
  margin-top:20px;
  width:350px;
  height:40px;
  display:block;
  background:#04a6f9;
  color:#ffffff;
  line-height:40px;
  text-align:center;
}
#loginBox {
  display:none;/*//隐藏状态*/
  margin:0px auto;
}

#Regbox {
  display:none;
} 

js代码:[用了layer插件]

/// <reference path="_references.js" />
/// <reference path="jquery.md5.js" />

function ShowLoginBox()
{
  layer.open({
    type: 1,
    title: "用户登录",
    //设置div大小
    area: ["390px", "300px"],
    content: $("#loginBox")
  });
}

function login()
{
  //1.获取到用户名和密码
  var username = $.trim($("#TxtUserName").val());
  var pwd =$.md5( $.trim($("#TxtPwd").val()));
  //2.判断用户名和密码是否为空
  if (username == "" || pwd == "") {
    layer.alert("用户名或密码不能为空!",
      {
        title: "提示:",
        icon: 5
      });
  }
  else
  {
    $.post("/Handler1.ashx", { "UserName": username, "Pwd": pwd,"cmd":"login" }, function (data)
    {
      if (data == "登录成功") {
        //layer.alert("登录成功!",
        layer.msg("登录成功!",
          {
            //title: "提示:",
            icon: 6
          });
      }
      else
      {
        layer.msg("用户名或密码不正确",
          {
            //title: "提示:",
            icon: 5
          });
      }
    });
  }
}

function showRegBox()
{
  layer.open({
    type:1,
    title:"注册",
    area: ["390px", "350px;"],
    //div的内容
    content:$("#Regbox")
  });
}

function Reglogin()
{
  //1.获取到输入的内容
  var username = $.trim($("#TxtRegUserName").val());
  var pwd =$.md5($.trim($("#TxtRegPwd").val()));
  var qq = $.trim($("#TxtRegqq").val());
  var email = $.trim($("#TxtRegEmail").val());
  //并做判断
  if (username == "" || pwd == "") {
    layer.msg("用户名或密码不能为空!");
  }
  else
  {//cmd用做标示,判断是注册还是登录
    $.post("/Handler1.ashx", { "UserName": username, "Pwd": pwd,"qq":qq,"email":email,"cmd": "reg" }, function (data)
    {
      if (data == "注册成功") {
        layer.msg("恭喜你,注册成功!",
          {
            icon: 6
          });
      }
      else
      {
        layer.msg(data,
          {
            icon:5
          });
      }
    });
  }
}

ajax代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;

namespace baidu20160707
{
  /// <summary>
  /// Handler1 的摘要说明
  /// </summary>
  public class Handler1 : IHttpHandler
  {
    public HttpContext context;
    public string strResult = "";
    public void ProcessRequest(HttpContext context)
    {
      this.context = context;
      string cmd=context.Request.Form["cmd"];
      switch (cmd)
      {
        case "login":
          strResult = loginAjax();
          break;
        case "reg":
          strResult = RegAjax();
          break;
      }
      context.Response.Write(strResult);
    }

    //登录
    public string loginAjax()
    {
      //1.接收传过来的用户名和密码
      string username = context.Request.Form["username"];
      //类名调用方法,32位,再做加盐处理
      string pwd =Md5Class.GetMD5( context.Request.Form["pwd"]+"玩意",32);
      //所在对应的id是否存在
      //string strsql = string.Format("select id from Users where UserName='{0}' and Pwd='{1}'", username, pwd);
      //sql注入处理[email protected]传参的方式,, username, pwd不要,'分号也不要'
      string strsql = string.Format("select id from Users where [email protected] and [email protected]");
      //sql注入处理2.调用SqlParameter[]数组对数据进行过滤
      SqlParameter[] paras = new SqlParameter[] 
      {
        new SqlParameter("@UserName",SqlDbType.NVarChar),
        new SqlParameter("@Pwd",SqlDbType.NVarChar)
      };
      //sql注入处理3.指定它的值
      paras[0].Value = username;
      paras[1].Value = pwd;
      //sql注入处理,4.不能忘记把数组对象传进去
      if (SqlHelper.Exists(strsql,paras))
      {
        //context.Response.Write("登录成功");
        return "登录成功";
      }
      else
      {
        //context.Response.Write("用户名或密码不正确");
        return "用户名或密码不正确";
      }
    }

    //注册
    public string RegAjax()
    {
      //接收传过来的用户名和密码
      string username=context.Request.Form["username"];
      string pwd=Md5Class.GetMD5(context.Request.Form["pwd"]+"玩意",32);
      string qq=context.Request.Form["qq"];
      string email = context.Request.Form["email"];
      //string strsql1 = string.Format("select id from Users where UserName='{0}' ",username,pwd);
      string strsql1 = string.Format("select id from Users where [email protected] ");
      SqlParameter[] paras1 = new SqlParameter[] 
      {
        new SqlParameter("@UserName",SqlDbType.NVarChar)
      };
      paras1[0].Value = username;
      if (SqlHelper.Exists(strsql1, paras1))
      //if (SqlHelper.Exists(strsql1))
      {
        return "该用户已注册,请重新输入";
      }
      else
      {
        //不存在就注册
        //string strsql2 = string.Format("insert into Users (UserName,Pwd,QQ,eMail) values('{0}','{1}','{2}','{3}')", username, pwd, qq, email);
        //, username, pwd, qq, email
        string strsql2 = string.Format("insert into Users (UserName,Pwd,QQ,eMail) values(@UserName,@Pwd,@QQ,@eMail)");
        SqlParameter[] paras2 = new SqlParameter[] 
        {
          new SqlParameter("@UserName",SqlDbType.NVarChar),
          new SqlParameter("@Pwd",SqlDbType.NVarChar),
          new SqlParameter("@QQ",SqlDbType.NVarChar),
          new SqlParameter("@eMail",SqlDbType.NVarChar),
        };
        paras2[0].Value = username;
        paras2[1].Value = pwd;
        paras2[2].Value = qq;
        paras2[3].Value = email;
        //插入处理
        if (SqlHelper.ExecteNonQueryText(strsql2, paras2) > 0)
        {
          return "注册成功";
        }
        else
        {
          return "注册失败";
        }
      }
    }
    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}

效果:点击登录弹出登录框,点击注册,弹出注册框

四、MD5加密算法

MD5加密算法:大多数情况下,用户的密码是存储在数据库中的,如果不采取任何的保密措施,以明文的方式保存密码,查找数据库的人员就可以轻松获取用户的信息,所以为了增加安全性,对数据进行加密是必要的。MD5,是一种用于产生数字签名的单项散列算法,它以512位分组来处理输入的信息,且每一分组又被划分为16位子分组,经过一系列处理,算法的输入由4个32位分组级联后生成一个128位散列值。

没有加密之前的明文通过解析的效果:

注册信息:

建议:从源头解决这种问题,运用正则表达式从源头入手,尽量设置一些含有特殊字符的密码。

虽然MD5加密是单项加密,但其结构还是可以破(kai)解(she)的。所以,通常情况下,我们后做[两次md5加密,再做加盐处理]。

用了sql注入处理+MD5两次加密以及加盐处理之后的效果:

数据库显示的该条数据:

五、sql注入

sql注入是指攻击者利用数据库数据的漏洞进行攻击,特别是在登录时,用户常利用SQL语句中的特定字符创建一个恒等条件,从而不需要任何用户名和密码就可以访问网站数据。

具体:http://www.cnblogs.com/wangwangwangMax/p/5551614.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

作者:wangwangwangMax

最新资讯
神州车闪贷如此处理还款逾期:不告知把车直接开走

神州车闪贷如此处理还

随着不少融资租赁公司进入车贷市场,一些“抵押贷款”摇
iPhone 11不被看好 中国销量却暴涨:只因价格便宜

iPhone 11不被看好 中

iPhone 11系列在上市后却再度受到热捧,特别是中国市场
P2P路在何方?湖南出手后 山东也将取缔不合规网贷

P2P路在何方?湖南出手

继湖南省之后,10月18日,山东省地方金融监督管理局在其官
雷军在乌镇测5G网速:下载速度达425Mbps 5G全覆盖

雷军在乌镇测5G网速:下

雷军发布微博称:“到了乌镇,听说这里5G全部覆盖,马上掏出
三星S10和Note 10现指纹识别漏洞 最早下周推送补丁

三星S10和Note 10现指

据CNBC报道,三星就Galaxy S10和Galaxy Note 10系列手机
王思聪股权遭冻结 真要回万达上班了?

王思聪股权遭冻结 真

如今投资事业不顺,难道王思聪真的要回家继承千亿资产了
最新文章
SQL Server 2008数据库分布式查询知识

SQL Server 2008数据

今天小编就为大家分享一篇关于SQL Server 2008数据库
SQL Server 2008数据库设置定期自动备份的方法

SQL Server 2008数据

这篇文章主要给大家介绍了关于SQL Server 2008数据库
sqlserver2008首次登录失败问题及解决方法

sqlserver2008首次登

这篇文章主要介绍了sqlserver2008首次登录失败问题及
解决SQL Server 2008 不能使用 “.” local本地连接数据库问题

解决SQL Server 2008

这篇文章主要介绍了解决SQL Server 2008 不能使用 “.
SQL SERVER 2008 r2 数据压缩的两种方法

SQL SERVER 2008 r2

这篇文章主要介绍了SQL SERVER 2008 r2 数据压缩的两
SQL Server 2008打开输入sa密码提示无法登陆数据库的解决方法

SQL Server 2008打开

与 SQL Server建立连接时出现与网络相关的或特定于实