欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

程序员文章站 2022-06-22 17:13:53
一、工具:  vs2013[因为我现在用的也是2013,版本随便你自己开心]  sql2008[准备过久升级]  二、用到的语言...

一、工具:
 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 class="login_item">
      <input type="text" id="txtusername" placeholder="手机邮箱/用户名" />
    </div>
    <div class="login_item"><input type="password" id="txtpwd" placeholder="请输入密码" /></div>
    <div class="login_item"><a href="javascript:;" onclick="login()">登录</a></div>
  </div>
  <div id="regbox">
    <div class="login_item"><input type="text" id="txtregusername" placeholder="手机邮箱/用户名" /></div>
    <div class="login_item"><input type="password" id="txtregpwd" placeholder="请输入密码" /></div>
    <div class="login_item"><input type="text" id="txtregqq" placeholder="qq号"/></div>
    <div class="login_item"><input type="text" id="txtregemail" placeholder="邮箱" /></div>
    <div class="login_item"><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注入处理1.@传参的方式,, username, pwd不要,'分号也不要'
      string strsql = string.format("select id from users where username=@username and pwd=@pwd");
      //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 username=@username ");
      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;
      }
    }
  }
}

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

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

四、md5加密算法

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

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

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

注册信息:

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

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

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

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

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

数据库显示的该条数据:

一个简单的后台与数据库交互的登录与注册[sql注入处理、以及MD5加密]

五、sql注入

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

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

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

作者:wangwangwangmax