医学检验专业教学资源库安全防御机制解析*
2021-05-02吴力挽
吴力挽,杨 翀,晏 嵩
(广州卫生职业技术学院,广东 广州 510450)
医学检验专业教学资源库是保障线上教学的重要工具。线上教学需要对资源库开放外网出口,使资源库的访问不受时间和地点限制,更加方便师生开展网络教学。在线网络访问同时使得资源库暴露在外网,具有遭受多种网络攻击的风险。本文针对目前对医学检验专业教学资源库网络攻击的常见手段,采用用户验证、管理会话、数据加密、过滤用户输入、数据访问等网络安全防御技术,保障了医学检验专业教学资源库网络访问安全,进一步增强系统的安全性和可靠性。
1 用户验证
系统登陆需要验证用户的身份,一旦证明身份有效,则授权用户访问资源库系统中不同的功能模块。用户验证主要包括构建登录表单和使用表单验证。建议采用web 表单方法或Http Post 方法,不要使用Http Get 方法。表单验证允许在web.config 文件中配置用户名和密码,这些密码没有经过MD5 或SHA-1 进行加密,一旦服务器被提权,配置文件即可被下载。
1.1 构建登录表单
在登录表单上,使用Http Post 方法来传送用户证书,必须对用户表单输入进行验证,以防止SQL 注入和跨站脚本的攻击。不依赖隐藏的表单字段来传送敏感数据。针对失败的用户名或失败的密码,使用相同的错误消息,不要在错误消息中显示其他任何服务器信息。
1.2 使用表单验证
不在资源库系统部署上使用passwordFormat=“Clear”,正确使用web.config 配置文件,不在配置文件中传输明文数据,要用MD5 进行加密处理。要做好Cookie 设置,以限制对信息劫持的暴露。在配置web.config 文件时,将requireSSL 设置为true,使得浏览器在建立安全的SSL 会话后才传送Cookie。
1.3 阻止暴力攻击
阻止暴力攻击最有效的方法是在不正确输入密码若干次后即可锁定账号。账号锁定时间可持续若干小时,也可由系统管理员解锁。在资源库系统中,通过采用锁定账号的方法可以预防暴力攻击。另外,还可以采用密码验证延时的方法,延时可以减缓单线程的攻击,但对于多个验证请求,延时不起作用。密码验证时的核心算法如下:
2 管理会话
资源库系统通过会话Cookie 来维持会话标记,会话标记实现服务器和客户端之间的完整交互,维持用户的优先选择,跟踪会话变量。
2.1 使用Cookie 标记
Cookie 是一种用于储存用户状态以创建和服务器连接的效果机制。资源库系统采用Response.Cookies 集合,Cookie 容易受到攻击,可以通过设置Domain(域)、Path(路径)、Expires(过期时间)、Secure(安全)、Value(值)来限制这种攻击。除了提供特定的主机外,还要检查接收的Cookie域,如果不检查将导致会话固定、账户跳跃和标记操纵。验证Cookie 域的核心算法如下:
2.2 使用视图状态
视图状态允许页面在回送给自身时保持表单属性,将它们作为编码字符串存储在一个隐藏的表单字段中。视图状态的风险是攻击者能查看或修改这些表单值,实现各种攻击。ASP.NET 允许使用加密来保护视图状态数据,并用哈希来检测恶意修改。在资源库系统中,首先启用视图状态。为了防止攻击者操纵视图状态,可以在应用程序和web 页面上启用视图状态验证代码。保护视图状态的核心算法如下:
2.3 终止会话
资源库系统采用session 传递用户信息,session 驻留在内存中,浏览器不关闭,session 会话一直保留。如果是在公用计算机上,会带来管理风险。在ASP.NET 采用会话到期时间,设置为20 分钟,20 分钟后需要重新验证用户身份。为保障系统安全,在客户端和服务器上管理存储会话状态,如果只依赖于服务器,攻击者更容易接管客户端会话。如果只在客户端管理存储会话状态,会话固定攻击更加难以防御。
3 数据加密
保持内存清洁是一种常见的加密方法,在使用敏感数据时,应该总是在使用后及时清除,不要在内存中留下未加密的数据,应使用尽可能少的变量,避免缓存普通文本。在资源库系统中采用Clear()方法清除内存中临时存储的变量信息,使用Dispose()即时释放内存资源。加密算法核心代码如下:
4 过滤用户输入
不良的用户输入带来SQL 注入、目录遍历、文件系统访问、跨站脚本、缓冲溢出等常见威胁。用户输入包含各种危险关键字,在资源库系统中,采用客户端和服务端双重验证模式,客户端采用javascript 进行字符规范性验证和格式验证,服务器端采用数据比对验证,同时在服务器端通过正则表达式匹配,过滤掉一些危险操作动作,确保系统访问安全。
4.1 边界检查
边界检查是快速、简单阻止应用程序攻击的方法。Request 是表单的输入源,通过检查输入值,可以确定用户输入是符合要求的数据类型、字符串长度、字符串格式和取值范围。一是采用验证控件,通过在表单控件上附加一个验证控件,并设置一些属性,可以使得ASP.NET 自动检查用户输入值。在资源库系统中,使用最强大的RegularExpressionValidator,允许复杂的模式匹配,以保证输入在特定的合法范围之内。
4.2 模式匹配
解决恶意用户输入,最有效的方法是采用正则表达式进行模式匹配。在资源库系统中,不允许单引号进行SQL注入攻击,这里采用正则模式为@"^[a-z0-9s.\]{1,260}$,使用模式匹配后,仅仅允许已知的安全输入,并且进行追踪式检查,以保证输入不包含有害数据。可以对文件系统访问、数据库访问、电子邮件验证、格式化Html 定义不同的正则表达式,通过正则表达式验证确保合法的用户输入,减少系统攻击。
4.3 IIS 安全配置技术
在IIS 中,建议升级到最新的IIS 版本,删除所有脚本和可执行文件的读取权限,在web 内容文件和目录上设置强大的NTFS 权限,以阻止用户修改和创建文件。如果不需要web 用户创建或修改文件,可以考虑将这些文件放置在根目录之外。对于一些重要数据文件,可以使用文件系统设置只读属性,阻止对这些文件轻易修改。
5 数据访问
当使用数据源时,需要进行验证和授权。应用程序可以使用两种方式验证SQL Server 数据库,一是采用Windows 验证,用户名和密码无需在连接字符串存储。二是采用ASP.NET 进程身份验证。
5.1 阻止SQL 注入
SQL 注入可带来数据泄露、数据损坏和数据销毁。在资源库系统,采用过滤或转义字符技术是阻止SQL 注入最常用最有效的方法,一般采用Replace()方法对单引号进行过滤,过滤后可以防御常见的'or'='or'注入。
5.2 使用SqlParameter
ASP.NET 框架中SqlParameter 可以提供类型和长度检查,并自动转义用户输入。SqlParameter 强制要求类型和类型长度,如果用户输入值与描述的类型和大小不一致,代码将抛出一个异常。
5.3 拒绝已知的攻击签名
对于用户输入的有害数据,可以拒绝查询。在资源库系统中,在用户查询数据时,检查用户输入的关键字,是否包含drop 或delete 等危险关键字,如包含这些关键字,则给出错误提示。主要核心算法如下:
5.4 阻止跨站脚本攻击
跨站脚本事件是用户在访问浏览器时触发了第三方恶意脚本而执行的事件,在资源库中采用编码技术进行防御,对发送给浏览器的任何数据进行编码,给web 页面指定字符编码集,强制实施特定字符集以限制哪些字符对系统有效。另外,对于跨站点请求伪造(CSRF)攻击防御可以采用以下策略:一是采用Post 方式进行数据提交;二是采用多步事务,不允许用户在一步之内完成敏感事务;三是检查HTTP 引用头,确定表单POST 是否来自自己的页面;四是禁止用户提交IMG 标签。
另外一种限制跨站脚本攻击范围的方法是在frame或者iframe 元素上设置安全约束,可以用security 属性限制安全。
6 结束语
本文采用了用户验证、管理会话、数据加密、过滤用户输入、数据访问等web 安全防御技术,进一步保障了医学检验专业教学资源库在线安全访问。随着网络攻击手段不断更新和升级,后续还需要在阻止暴力攻击、代码审查、异常处理、数据编码、语法检查等方面开展进一步研究,并将研究的成果应用于医学检验专业资源库在线网络教学,进一步增强其可靠性和安全性。