注册和登录还有那个加密的密码

假设你在设计自己的系统的时候采用的是MVC架构。例如

 

也许可能有很多童鞋会这样设计Service和Model.

service:

public class AccountService
{
    public bool Login(string userName, string password)
    {
        // insert into account values(userName,password);
        return true;
    }

    public bool Register(string userName, string password)
    {
        // select count(*) from account where userName = userName and password = password;
        return true;       
    }
}

然后model是这样的:

public class UserModel
{
    public bool Login(string userName, string password)
    {
        string encryptedPassword = password.MD5();

        AccountService accountService = new AccountService();
        return accountService.Login(userName, encryptedPassword);
    }

    public bool Register(string userName, string password)
    {
        string encryptedPassword = password.MD5();

        AccountService accountService = new AccountService();
        return accountService.Register(userName, encryptedPassword);       
    }
}

 

很明显,这段代码完成了注册和登录的任务,并且密码也是以加密的形式保存的。

比如123456 =>e10adc3949ba59abbe56e057f20f883e

 

当然有些人会认为密码不够安全,然后进行两次md5,或者是加salt,加userName,等。

 

下面抛一个问题:聪明的你认为上面的这种设计安全吗???

 

 

如果你认为上面的代码很安全,那么你就很需要往下面看看了。

Service和Model这样设计的缺点:

1:加密在model层中做,如果你有多个界面的话,我指的是客户端(asp.net,android,php…).然后这些客户端调用的是service层中的方法,那么这些客户端都需要先将密码进行加密,然后调用服务。

image

现在需要增加php客户端,android 客户端。于是变成了:

image

所以asp.net Model, php Model, android Model 都需要进行相同的加密,并且你需要保证这三个平台所加密的字符串是相同的,

比如123456 =>在这三个Model层中都必须被加密为:e10adc3949ba59abbe56e057f20f883e

这是一个很恶心的问题,不过幸运的是这三个平台的md5 加密出来的是一样的,如果不一样的话,可能是需要设置下字符编码。

 

2:上面的这个缺点虽然比较严重,但还不是最致命的,这个设计最致命的地方在于Service层没有进行加密验证,如果你获取了用户的用户名和密码的话,直接登录就OK了。

 

假设A用户的用户名为LoveJenny,密码为123456.

在数据库中储存的值是LoveJenny,e10adc3949ba59abbe56e057f20f883e。

对于hacker而言,他偶然获取了用户名:LoveJenny,密码:e10adc3949ba59abbe56e057f20f883e

 

首先他尝试试用LoveJenny 和e10adc3949ba59abbe56e057f20f883e 来调用Service服务登录系统,f**k,Service 没有验证,于是他便登录了,他不需要知道LoveJenny的密码是123456,同时也不需要理解e10adc3949ba59abbe56e057f20f883e 是怎样生成的,他只需要输入用户名:LoveJenny,然后密码:e10adc3949ba59abbe56e057f20f883e 来调用服务就可以登录了。

 

最后如果你还是认为:

1:他是怎样偶然得到LoveJenny和e10adc3949ba59abbe56e057f20f883e 的?

这点我无法回答,因为我也不知道hacker会怎样获取,不过可以肯定的是,只要你的系统不是很安全的话,应该是可以获取的。

2:多个model中做验证没什么大不了的?

这点我持反对意见,首先它违反了don’t repeat your self 原则,其次,把本该服务层中做的事情放到

model层来做,最后假设你的系统有多个平台的话,很郁闷的哦。

3:就算知道用户名和数据库密码,他又怎样绕过model来调用服务呢?

这个。。。,我还是不知道,不过万一你的服务是暴露在外网上的,如果你老板想让你做个开放平台,如果你的服务器被hacker掉了。。。,当然如果很多很多。。,借口

 

 

不要认为安全是个组件,到时候拿过来用就行了,个人认为在开发和设计的时候,就应该考虑安全,当然绝对的安全是不可能的,我们只能保证我们该做的都做了,而不是把这些安全漏洞归咎于上面的几点,或者是更多点。

最后的最后我贴上我认为正确的设计:

 

Service层:

public class AccountService
{
    public bool Login(string userName, string password)
    {
        string encryptedPassword = getEncryptedString(password);

        // insert into account values(userName,encryptedPassword);
        return true;
    }

    public bool Register(string userName, string password)
    {
        string encryptedPassword = getEncryptedString(password);

        // select count(*) from account where userName = userName and password = encryptedPassword;
        return true;       
    }
}

 

Model层:

public class UserModel
{
    public bool Login(string userName, string password)
    {
        AccountService accountService = new AccountService();
        return accountService.Login(userName, password);
    }

    public bool Register(string userName, string password)
    {
        AccountService accountService = new AccountService();
        return accountService.Register(userName, password);       
    }
}

转载于:https://www.cnblogs.com/LoveJenny/archive/2012/07/09/2582080.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个软件测试手机电池续航好,6款手机电池续航测试排名:iPhone12mini险些垫底,第1名是小米10...

电池寿命是用户最重视的功能之一,如今Android手机电池容量越来越大。相反,iphone 12系列电池容量减少,寿命不尽人意。今天,我们将对iphone 12 mini、Piexl4、1加Nord、Realme X50Pro、1加8T、小米10等6种热门主力机的续航测试排名…

怎么让员工服从管理_职场 | 在职场中,遇到不服从管理的员工,该怎么办呢?...

不懂点心理学,怎么玩转职场?设为【星标】更方便点击上方公号名称→右上角三个点→设为星标!职场心理志,专注职场生活的方方面面ID:Workplace-M作者 | 佚名文章来源 | 综合网络不服从管理的员工是个别人,根据…

佳能打印机无法确认打印机与计算机连接,安装打印机驱动时提示确认打印机已连接电脑的问题分析及解决办法...

问题描述:安装打印机驱动时,经常会碰到提示如下提示:(惠普)1。请确保设备电源已打开。2。连接USB电缆(佳能)确保打印机已连接到计算机上,并打开打印机电源。(富士施乐)确保USB打印机电缆已连接牢固,确保USB打印机电缆未…

前端学习(502):水平居中布局得第三种方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>居中布局一</title><style>.parent{wid…

显示2位小数 python3_Python2和Python3的区别

pythonPython2和Python3分别是Python的两个版本&#xff0c;按照Python官方的计划&#xff0c;Python2只支持到2020年。为了不带入过多的累赘&#xff0c;Python3在设计的时候没有考虑向下相容&#xff0c;许多针对早期Python版本设计的程序都无法在Python3上正常执行。为了照顾…

Guice学习(一)

Guice是Google开发的一个轻量级依赖注入框架(IOC)。Guice非常小而且快&#xff0c;功能类似与Spring&#xff0c;但效率上网上文档显示是它的100倍&#xff0c;而且还提供对Servlet&#xff0c;AOP&#xff0c;Struts等框架的支持&#xff1b;这里是简单代码实现&#xff0c;首…

计算机 不识u盘,电脑uefi不识别u盘怎么办

我们都知道uefi和bios是主流的两种主板配置。可是最近用户用u盘启动盘装系统的时候发现uefi识别不了u盘&#xff0c;那么遇到电脑uefi不识别u盘怎么办呢?下面小编就和大家介绍电脑uefi不识别u盘的解决方法&#xff0c;希望对大家有帮助。具体步骤如下&#xff1a;1、连续按bio…

apache缓存清理_深挖 Mybatis 源码:缓存模块

作者&#xff1a;AmyliaY出自&#xff1a;Doocs开源社区原文&#xff1a;my.oschina.net/doocs/blog/4549852MyBatis 中的缓存分为一级缓存、二级缓存&#xff0c;但在本质上是相同的&#xff0c;它们使用的都是 Cache 接口的实现。在这篇文章里&#xff0c;我们就来分析 Cache…

前端学习(504):垂直居中的第一种方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>居中布局一</title><style>.parent{wid…

HTML5游戏引擎Playcraft将于近日正式启动

HTML5游戏引擎Playcraft将于近日正式启动&#xff0c;该引擎5月时就已经发布了测试版&#xff0c;经过2个月的测试后&#xff0c;将于近日正式上线。创始人兼首席执行官马丁韦尔斯介绍说&#xff0c;playcraft是一个为游戏设计者提供的工具&#xff0c;工具优化了设计步骤&…

深度学习 相机标定_基于深度学习的多传感器标定

标定是确定不同坐标系的相互转换关系&#xff0c;是传感器数据融合的前提&#xff0c;特别是激光雷达和图像数据。这里以深度学习的方法训练CNN模型去回归坐标系转换的参数。主要是两个CNN模型&#xff1a;RegNet和CalibNet。RegNet应该是第一个深度卷积神经网络&#xff08;CN…

前端学习(505):垂直居中的第一种方式的优点和缺点

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>居中布局一</title><style>.parent{wid…

实现推拉ui样式_这推拉门隔断,我从没见过!直角设计同时划分3大功能区,太牛了...

这位业主要是说自家装修第二名&#xff0c;我想大概不会有人愿意称第一。就说这个操作我就没见过&#xff0c;推拉门隔断内部&#xff0c;再装大白墙拼接推拉门隔断&#xff0c;形成一个直角设计&#xff0c;同时划分3大功能区&#xff0c;属实是太牛了&#xff01;这和邻居想让…

前端学习(506):垂直居中的第二种方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>居中布局一</title><style>.parent{wid…

绘制半圆_Android Canvas 绘制小黄人

❝学习往往是枯燥的&#xff0c;如果能用一个有趣 Demo 来学习和练习技术&#xff0c;那对知识的掌握就会更牢固。我在学习 Canvas 绘制 API 的时候就是这样做的。❞截图镇楼效果图我觉得这个绘制小黄人的自定义 View 就很有意思&#xff0c;也为我后来工作中的自定义 View 实现…

利用旧手机自建anki服务器,废旧手机变身服务器,打造私人云盘

前提条件安装Linux Deploy 并安装系统1.点开左上角选择设置点击左上角进行初始设置1.勾选锁定wifi,防止休眠时wifi断开2.勾选cpu保持唤醒3.勾选开机启动 (可选)4. path变量设置&#xff0c;网上大部分都说手机上安装busybox后填写busybox安装命令包后的路径&#xff0c;其实Lin…

关于返回结构体的函数

【前言】写作本文&#xff0c;源于最近回复的 《汇编中函数返回结构体的方法》 一文。在网络上也已经有一些相关文章和相关问题&#xff0c;有的文章已经给出了一部分结果&#xff0c;但总体而言还缺少比较重要的结论。本文以分析 VC6 编译器&#xff0c;32 位架构为主来重复性…