• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 福建二哥 | 发布时间: 2025-6-18 12:40| 查看数: 121| 评论数: 0|帖子模式

    一、工具:
    vs2013[因为我现在用的也是2013,版本随便你自己开心]
    sql2008[准备过久升级]
    二、用到的语言
    HTML+CSS+Jquery+Ajax+sqlserver
    HTML[相当于一个人]
    css[要穿衣服]
    Jquery[人要做一些动作,Jquery是对js一些常用方法的封装]
    Ajax[建立前端页面与数据库的交互]
    sqlserver[数据库]
    三、过程
    html部分代码:
    1. <body>
    2.   <div id="header">
    3.     <div id="header_con">
    4.       <a href="javascript:;" onclick="showRegBox()">注册</a>
    5.       <a href="javascript:;" onclick="ShowLoginBox()">登录</a>
    6.     </div>
    7.   </div>
    8.   <div id="loginBox">
    9.     <div class="login_Item">
    10.       <input type="text" id="TxtUserName" placeholder="手机邮箱/用户名" />
    11.     </div>
    12.     <div class="login_Item"><input type="password" id="TxtPwd" placeholder="请输入密码" /></div>
    13.     <div class="login_Item"><a href="javascript:;" onclick="login()">登录</a></div>
    14.   </div>
    15.   <div id="Regbox">
    16.     <div class="login_Item"><input type="text" id="TxtRegUserName" placeholder="手机邮箱/用户名" /></div>
    17.     <div class="login_Item"><input type="password" id="TxtRegPwd" placeholder="请输入密码" /></div>
    18.     <div class="login_Item"><input type="text" id="TxtRegqq" placeholder="QQ号"/></div>
    19.     <div class="login_Item"><input type="text" id="TxtRegEmail" placeholder="邮箱" /></div>
    20.     <div class="login_Item"><a href="javascript:;" onclick="Reglogin()">注册</a></div>
    21.     </div>
    22. </body>
    复制代码
    css代码:
    1. * {
    2.   margin:0px;
    3.   padding:0px;
    4. }
    5. #header {
    6.   height:40px;
    7.   width:100%;
    8.   background:#000000;
    9. }

    10. a {
    11. text-decoration:none;
    12. }
    13. #header a {
    14.   float:right;
    15.   color:#ffffff;
    16.   line-height:40px;
    17.   margin-left:10px;
    18. }
    19. #header_con {
    20.   width:1200px;
    21.   margin:0px auto;
    22. }
    23. .login_Item {
    24.   margin-left:20px;
    25. }
    26. .login_Item input {
    27.   width:348px;
    28.   height:40px;
    29.   margin-top:10px;
    30.   border:solid 1px #04a6f9;
    31. }
    32. .login_Item a {
    33.   margin-top:20px;
    34.   width:350px;
    35.   height:40px;
    36.   display:block;
    37.   background:#04a6f9;
    38.   color:#ffffff;
    39.   line-height:40px;
    40.   text-align:center;
    41. }
    42. #loginBox {
    43.   display:none;/*//隐藏状态*/
    44.   margin:0px auto;
    45. }

    46. #Regbox {
    47.   display:none;
    48. }
    复制代码
    js代码:[用了layer插件]
    1. /// <reference path="_references.js" />
    2. /// <reference path="jquery.md5.js" />

    3. function ShowLoginBox()
    4. {
    5.   layer.open({
    6.     type: 1,
    7.     title: "用户登录",
    8.     //设置div大小
    9.     area: ["390px", "300px"],
    10.     content: $("#loginBox")
    11.   });
    12. }

    13. function login()
    14. {
    15.   //1.获取到用户名和密码
    16.   var username = $.trim($("#TxtUserName").val());
    17.   var pwd =$.md5( $.trim($("#TxtPwd").val()));
    18.   //2.判断用户名和密码是否为空
    19.   if (username == "" || pwd == "") {
    20.     layer.alert("用户名或密码不能为空!",
    21.       {
    22.         title: "提示:",
    23.         icon: 5
    24.       });
    25.   }
    26.   else
    27.   {
    28.     $.post("/Handler1.ashx", { "UserName": username, "Pwd": pwd,"cmd":"login" }, function (data)
    29.     {
    30.       if (data == "登录成功") {
    31.         //layer.alert("登录成功!",
    32.         layer.msg("登录成功!",
    33.           {
    34.             //title: "提示:",
    35.             icon: 6
    36.           });
    37.       }
    38.       else
    39.       {
    40.         layer.msg("用户名或密码不正确",
    41.           {
    42.             //title: "提示:",
    43.             icon: 5
    44.           });
    45.       }
    46.     });
    47.   }
    48. }

    49. function showRegBox()
    50. {
    51.   layer.open({
    52.     type:1,
    53.     title:"注册",
    54.     area: ["390px", "350px;"],
    55.     //div的内容
    56.     content:$("#Regbox")
    57.   });
    58. }

    59. function Reglogin()
    60. {
    61.   //1.获取到输入的内容
    62.   var username = $.trim($("#TxtRegUserName").val());
    63.   var pwd =$.md5($.trim($("#TxtRegPwd").val()));
    64.   var qq = $.trim($("#TxtRegqq").val());
    65.   var email = $.trim($("#TxtRegEmail").val());
    66.   //并做判断
    67.   if (username == "" || pwd == "") {
    68.     layer.msg("用户名或密码不能为空!");
    69.   }
    70.   else
    71.   {//cmd用做标示,判断是注册还是登录
    72.     $.post("/Handler1.ashx", { "UserName": username, "Pwd": pwd,"qq":qq,"email":email,"cmd": "reg" }, function (data)
    73.     {
    74.       if (data == "注册成功") {
    75.         layer.msg("恭喜你,注册成功!",
    76.           {
    77.             icon: 6
    78.           });
    79.       }
    80.       else
    81.       {
    82.         layer.msg(data,
    83.           {
    84.             icon:5
    85.           });
    86.       }
    87.     });
    88.   }
    89. }
    复制代码
    ajax代码:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Web;
    5. using System.Data;
    6. using System.Data.SqlClient;

    7. namespace baidu20160707
    8. {
    9.   /// <summary>
    10.   /// Handler1 的摘要说明
    11.   /// </summary>
    12.   public class Handler1 : IHttpHandler
    13.   {
    14.     public HttpContext context;
    15.     public string strResult = "";
    16.     public void ProcessRequest(HttpContext context)
    17.     {
    18.       this.context = context;
    19.       string cmd=context.Request.Form["cmd"];
    20.       switch (cmd)
    21.       {
    22.         case "login":
    23.           strResult = loginAjax();
    24.           break;
    25.         case "reg":
    26.           strResult = RegAjax();
    27.           break;
    28.       }
    29.       context.Response.Write(strResult);
    30.     }

    31.     //登录
    32.     public string loginAjax()
    33.     {
    34.       //1.接收传过来的用户名和密码
    35.       string username = context.Request.Form["username"];
    36.       //类名调用方法,32位,再做加盐处理
    37.       string pwd =Md5Class.GetMD5( context.Request.Form["pwd"]+"玩意",32);
    38.       //所在对应的id是否存在
    39.       //string strsql = string.Format("select id from Users where UserName='{0}' and Pwd='{1}'", username, pwd);
    40.       //sql注入处理1.@传参的方式,, username, pwd不要,'分号也不要'
    41.       string strsql = string.Format("select id from Users where UserName=@UserName and Pwd=@Pwd");
    42.       //sql注入处理2.调用SqlParameter[]数组对数据进行过滤
    43.       SqlParameter[] paras = new SqlParameter[]
    44.       {
    45.         new SqlParameter("@UserName",SqlDbType.NVarChar),
    46.         new SqlParameter("@Pwd",SqlDbType.NVarChar)
    47.       };
    48.       //sql注入处理3.指定它的值
    49.       paras[0].Value = username;
    50.       paras[1].Value = pwd;
    51.       //sql注入处理,4.不能忘记把数组对象传进去
    52.       if (SqlHelper.Exists(strsql,paras))
    53.       {
    54.         //context.Response.Write("登录成功");
    55.         return "登录成功";
    56.       }
    57.       else
    58.       {
    59.         //context.Response.Write("用户名或密码不正确");
    60.         return "用户名或密码不正确";
    61.       }
    62.     }

    63.     //注册
    64.     public string RegAjax()
    65.     {
    66.       //接收传过来的用户名和密码
    67.       string username=context.Request.Form["username"];
    68.       string pwd=Md5Class.GetMD5(context.Request.Form["pwd"]+"玩意",32);
    69.       string qq=context.Request.Form["qq"];
    70.       string email = context.Request.Form["email"];
    71.       //string strsql1 = string.Format("select id from Users where UserName='{0}' ",username,pwd);
    72.       string strsql1 = string.Format("select id from Users where UserName=@UserName ");
    73.       SqlParameter[] paras1 = new SqlParameter[]
    74.       {
    75.         new SqlParameter("@UserName",SqlDbType.NVarChar)
    76.       };
    77.       paras1[0].Value = username;
    78.       if (SqlHelper.Exists(strsql1, paras1))
    79.       //if (SqlHelper.Exists(strsql1))
    80.       {
    81.         return "该用户已注册,请重新输入";
    82.       }
    83.       else
    84.       {
    85.         //不存在就注册
    86.         //string strsql2 = string.Format("insert into Users (UserName,Pwd,QQ,eMail) values('{0}','{1}','{2}','{3}')", username, pwd, qq, email);
    87.         //, username, pwd, qq, email
    88.         string strsql2 = string.Format("insert into Users (UserName,Pwd,QQ,eMail) values(@UserName,@Pwd,@QQ,@eMail)");
    89.         SqlParameter[] paras2 = new SqlParameter[]
    90.         {
    91.           new SqlParameter("@UserName",SqlDbType.NVarChar),
    92.           new SqlParameter("@Pwd",SqlDbType.NVarChar),
    93.           new SqlParameter("@QQ",SqlDbType.NVarChar),
    94.           new SqlParameter("@eMail",SqlDbType.NVarChar),
    95.         };
    96.         paras2[0].Value = username;
    97.         paras2[1].Value = pwd;
    98.         paras2[2].Value = qq;
    99.         paras2[3].Value = email;
    100.         //插入处理
    101.         if (SqlHelper.ExecteNonQueryText(strsql2, paras2) > 0)
    102.         {
    103.           return "注册成功";
    104.         }
    105.         else
    106.         {
    107.           return "注册失败";
    108.         }
    109.       }
    110.     }
    111.     public bool IsReusable
    112.     {
    113.       get
    114.       {
    115.         return false;
    116.       }
    117.     }
    118.   }
    119. }
    复制代码
    效果:点击登录弹出登录框,点击注册,弹出注册框

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

    注册信息:

    建议:从源头解决这种问题,运用正则表达式从源头入手,尽量设置一些含有特殊字符的密码。
    虽然MD5加密是单项加密,但其结构还是可以破解的。所以,通常情况下,我们后做[两次md5加密,再做加盐处理]。

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

    数据库显示的该条数据:

    五、sql注入
    sql注入是指攻击者利用数据库数据的漏洞进行攻击,特别是在登录时,用户常利用SQL语句中的特定字符创建一个恒等条件,从而不需要任何用户名和密码就可以访问网站数据。
    具体:http://www.cnblogs.com/wangwangwangMax/p/5551614.html
    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
    作者:wangwangwangMax

    来源:https://www.jb51.net/article/88306.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表