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

一、工具:
 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;
      }
    }
  }
}

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

四、MD5加密算法

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

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

注册信息:

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

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

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

数据库显示的该条数据:

五、sql注入

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

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

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

作者:wangwangwangMax

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索登录
, 注册
, sql注入
MD5加密
mssql数据库手工注入、mssql数据库、mssql数据库管理工具、php查询mssql数据库、mssql数据库备份,以便于您获取更多的相关知识。

时间: 2024-10-31 14:47:05

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

mvc4-如何用MVC4建立一个工程。功能是:实现用户登录、注册,并将用户密码存储到本机SQL2008数据库。

问题描述 如何用MVC4建立一个工程.功能是:实现用户登录.注册,并将用户密码存储到本机SQL2008数据库. 如何用MVC4建立一个工程.功能是:实现用户登录.注册,并将用户密码存储到本机SQL2008数据库. 解决方案 创建一个默认的完整的mvc4应用,就是自带这些功能的. 解决方案二: 第4章 实现用户登录和注册功能

批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

首先备份数据库,以防不必要的损失.而后对所有被挂马的小于8000字符的varchar字段执行 复制代码 代码如下: update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','') 其中<Script Src=http://c.n%75clear3.com/css/c.js></Script>为挂马字段.执行后挂马字段被清除.但是有部分字段,比

一个简单的php mysql数据库操作类程序

数据库操作类代码  代码如下 复制代码 <?php if(!defined('AHBB_VOTE') || AHBB_VOTE !='zhu_'){  die('非法调用'); }  class mysql  {   private $conn;   function __construct($host,$user,$pwd,$database,$charset){    $this->mysql($host,$user,$pwd,$database,$charset);   }   func

数据库SqlParameter 的插入操作,防止sql注入的实现代码_实用技巧

例子:  点击Button1按钮的时候就把数据插入数据库中. 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Text;using System.Data.SqlClient;using System.Data;using Syste

Ultradev实例教程:3.7 创建一个简单的查询

创建|教程 第三章:应用数据库创建动态网页 第七节:创建一个简单的查询 其实查询创建的原理与我们在上面学到的数据编辑原理是一样的,都是先从第一个页面传递一个值给第二个页面,然后第二个页面根据这个传递过去的值取出相应的纪录,再做以相应的处理,如显示.编辑.删除.所不同的是传递方式.上一节我们是通过地址连接来传递值,而我们知道一般查询都是通过一个表单填写数据然后提交的. 好,就让我们来看看具体的创建过程. 首先我们要创建一个用户能够输入查询内容的页面.如图,我们插入一个名为Search的类型为Tex

用于动态内容和数据库交互的最优秀的语言:PHP

Joe Brockmeier 简要介绍了 PHP 脚本语言,讨论了 PHP 的起源.性能和适用的平台.一个简单的 PHP 脚本示例则着重说明了其基本语法和用法. 如果您从事基于 Web 的开发工作,那么可能已经听说过 PHP.您也许不太确切地知道 PHP 是什么.如何工作或者为什么如此热门,但现在该是进一步了解 PHP 的时候了.因此本文简要介绍了关于 PHP 基础的基本概念. 一点背景知识 PHP 是作为一个小开放源码,随着越来越多的人意识到它的实用性从而逐渐发展起来.Rasmus Lerdo

qt sqlserver 2008-一个简单的QT连接 数据库的例程

问题描述 一个简单的QT连接 数据库的例程 求大神帮忙,用QT写了一个应用程序,有很多查询条件,现在我想要只有一个查询条件的例程,想依葫芦画瓢.求大神带,我用的 数据库是 SQL server 2008. 谢谢大神了.空白框 是显示的 查询结果.就是一个查询按钮,一个QListview显示查询结果.

sql注入之新手入门示例详解_数据库其它

前言 在学习这篇文章之前,至于要学习了SQL注入的前提知识,可以参考之前写的一篇sql注入之必备的基础知识. 认识SQL注入 最开始就从最简单的开始,进入到less-1开始我们的SQL注入学习之旅. 通过改变http://localhost/sqlilabs/Less-1/?id=3的id值,页面上呈现不同的内容(username,password). 那么我们就可以猜测在后台中的SQL语句就是根据前台传入的id值来去对应的数据. 那么SQL语句的写法为: select username,pas

解决SQL注入隐患最简单实用的办法

现在做网站的专业人员越来越多,网站也越来越丰富和充实,不过可能很多人都没有发现,许多网站程序在编写时,没有对http://www.aliyun.com/zixun/aggregation/18678.html">用户输入数据的合法性进行判断,使应用程序存在安全隐患. 这个就是sql注入问题. SQL注入是什么? 许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),根据程序返回