缩略图
Science and Technology

网站登录模块安全性讨论

作者

陆蕾蕾

贵州航天凯山石油仪器有限公司 贵州 550000

   

1 引言

随着互联网的飞速发展,网站作为企业与用户之前的重要桥梁,其开发质量直接影响用户体验和企业形象。传统服务方式上,往往通过提供 WinForm客户端软件,满足用户查看数据、远程控制等功能要求。以网站的形式替代WinForm 客户端软件,省略了用户安装的步骤,用户只需要一台联网的电脑,通过浏览器输入访问地址便能浏览网站,并进行相同的客户端操作。网站的开发是一个复杂且细致的过程,涉及前端、后端、数据库等多个技术领域。一个优秀的网站不仅需要满足用户的功能需求,还需具备良好的用户界面和用户体验,此外,高效、稳定以及安全也是开发人员需要着重考虑的。

2 网站登录流程设计

网络安全问题涉及面较广,本文围绕网站登录模块,讨论该模块涉及的安全问题。作为网站应用的第一道防护,登录模块绝不是仅仅通过简单的身份信息比对就能真正意义上实现的。网站登录认证可以防止匿名用户访问网页,从而避免数据泄露和终端设备被恶意操作等问题。网站登录简单来说就是访问用户输入身份信息,网站进行身份信息认证,允许通过认证的用户访问网站各个网页。但是,若要保证网站登录过程的安全性,则至少需要考虑登录防绕过、密文传输以及防数据库注入攻击三个方面,以上三个方面分别可通过身份票据、信息加密、SQL 参数化查询语句三个方面。

3 网站登录安全实现

3.1 身份票据

网站的使用实际上是访问项目列表里的前端网页文件,若访问者已知项目里某个网页的路径及名称,通过在浏览器输入该路由,便可绕过登录界面,直接访问目标网页。身份票据则帮助开发者避免这种问题的发生。在 MVC 网站框架中,当访问者通过身份验证后,后端控制器给访问者发放身份票据,访问者据此可以访问被保护的视图(网页),而未获得身份票据的访问者,则会被重定向到登录界面。

身份票据功能的实现并不复杂,只需要在网站项目的配置文件“Web.config”的“system.web”节点添加“authentication”和“authorization”设置,将前者的“mode”属性设置为“Forms”,再通过“forms”设置的“loginUrl”属性规定默认视图(通常是登录界面);在“authorization”设置项里,将“deny”设置的“users”属性设置为“?”,这样就实现了将所有非法的访问都重定向到所规定的默认视图。

为了让通过验证的访问者成功访问各网页,还需要在其通过验证后,通过方法“FormAuthentication.SetAuthCookie(String,Boolean)”为其发放票据。

3.2 信息加密

在网站登录方面,信息加密主要涉及前端向后端传输登录信息过程,在前端向后端传输登录请求时需要将用户输入的用户名和密码传输到后端,若采用明文传输的方式,那么用户的身份信息通过网络抓包工具便可轻易的获得,密文传输就显得十分必要。要实现密文传输,就涉及到了信息的加密和解密。在加密方面,对称加密方式简单易实现,但是由于其对称性,对称加密算法通常都可通过逆运算进行破解。非对称加密算法在加密过程引入了公钥和私钥的概念,并且在加密过程引入随机数,所以该类算法对同一明文进行加密,每一次加密都会得到不同的密文,因此更加适用于网站登录过程身份信息的加密。但正因为非对称加密算法的不可逆性,每一次加密的密文都不一致,只能通过当次操作生成的私钥进行解密来还原明文,所以不能直接将某一次加密的密文保存到数据库用作身份验证的凭据。所以在后端解密的过程应该包含非对称加密的解密、解密获取的明文进行对称加密生成另一密文,这样就能实现身份信息的密文传输以及密文形式保存,而此过程中的对称加密由于完全应用到后端,也保证了对称加密算法使用过程的安全性。

整个流程的实现包含:

① 前端向后端申请非对称加密公钥,后端为当次请求生成密钥对,并返回公钥给前端;

② 前端利用后端返回的公钥对用户身份信息进行非对称加密,并通过登录函数传输给后端;

③ 后端接收到前端传输来的身份密文,利用步骤 ① 里生成的私钥解密还原得到身份信息明文;

④ 后端将解密得到的明文进行对称加密,再从数据库取出由同一对称加密算法加密的身份密文信息与当前身份信息进行比对,并将比对结果返回给前端。

通过从后端获取到加密公钥,再利用封装好的加密函数将身份信息加密为密文,这样就实现了登录过程的非对称密文传输。值得注意的是,使用“JSEncrypt”方法需要引用“jsencrypt.js”库。后续处理为后端对非对称解密得到的明文进行AES 对称加密,从数据库里取出对应的身份信息密文进行比对,并将比对结果返回给前端,操作简单,本文不作展示。

3.3 SQL 参数化查询

任何数据库都有其语法规则,利用对应的语法规则避开开发者规定的条件并且加入其他语句可实现对数据库的注入攻击。在登录、查询等功能模块,界面通常要求使用者输入参数,这也给攻击者提供了注入的机会。以 SQL 数据库为例,SQL 注入即是指应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

例如:对用户身份信息表进行查询时,当用户名列没有查询到访问的用户名,且没有注入其他语句时,查询返回结果为空;

当在查询条件基础上注入“or ’1’=’1’”条件,此时注入条件与原条件形成逻辑判断“ || true”,查询返回了该表所有数据,暴露出数据泄露风险。

如果注入内容改为攻击语句,如 SQL 的删除语句,那将造成不可挽回的数据丢失。在执行后,结果将返回空内容,表明表数据被全部删除。

在进行数据库操作时,开发者更应使用参数化查询的语句,避免数据库的操作被注入攻击语句,从而造成数据泄露、破坏等情况(为方便演示,本文所举例子均通过 SQL Server Management 完成,编程时需要根据具体代码规则进行调整)。通过参数化查询,将所有输入内容限定在参数“@name”内,当做列名“Name”的值进行比较,该查询不会返回任何结果,避免了 SQL 注入。

4 结束语

网站以其便利性,备受各行各业偏好,作为网站的第一道门户,其登录功能的安全性必不可少忽略。要保证网站登录过程的安全性,需要至少考虑登录防绕过、密文传输以及防数据库注入攻击三个方面。身份票据功能通过为验证通过者发放身份票据的方式允许其访问网站内各网页,同时将验证不通过或者试图利用网页路由绕过登录等非法访问重定向回登录界面;信息加密包含对前后端传输过程中的信息进行非对称加密和对保存在数据库里的身份信息的对称加密,前者保证传输过程中密文的不可逆性,后者实现同一明文加密所得密文的一致性;SQL 参数化查询通过引入数据库参数的形式,避免查询语句被注入攻击语句,保证了数据库操作的安全性。

参考文献:

[1]《如何防止未经注册的用户绕过注册界面直接进入应用系统》百度文库,2023.

[2]《AES 与RSA 混合加密算法的研究与实现》胡驰,2013.

[3]《SQL 注入的方式及原理》百度文库,2023.