浅谈 B/S 系统安全
随着这些年的发展 B/S 系统已经超出了个人主页,留言本之类的应用,各种
公司的核心应用都逐渐构建在 WEB 上了,而 WEB 服务器端的程序安全也倍受
瞩目, 本文先通过几个实例引入一些常见的安全问题,然后讨论一下 WEB 应
用代码编写的一些基本准则和建议。由于本人已很长时间不从事这方面的工作
了,所讲的内容 可能有些过时或不对的地方,各位看官就权当笑话。
如果不想看冗长无味的论述,就直接翻到:“一些编程原则”部分。
一. SQL 注入(SQL Injection)
这是现在出现的最多也最易应用的一个问题,使用数据库的系统就有可能出
现这种问题,成因是对用户的输入没有做必要的检测及过滤,导致用户执行非
法 SQL 语 句。常见的如登陆程序,使用 1’or ‘1’=’1 进行任意用户登陆,记得 98
年台湾李登 X 的网站就是因此被黑….呵呵,好些年了,不过问题依然。 对于这
类问题的网上已经有无数的实例和教学,本来不想趟这混水,不过正是由于其
普遍性(我见过至少 5 个厂商 10 个以上的电信行业中的各种 web 系统存在不 同
程度上的登陆问题)和埋在其深处的语义方面的内容,所以决定从 2003 年底某
系统的代码分析记录谈起。
例一:
以下内容来自 2003 年底的代码分析记录,代码文件的最后修改日期为
2003.12.XX
XX 帐务--XX 管理系统
等级:AAA 严重
情景:登陆
条件 已经某合法用户名(非必要条件),如:tt。
过程:登陆界面中输入
操作员:1’or ‘1’=’1
口令:随便
执行结果:登陆成功,拥有所有操作权限。
问题分析
login_check.jsp
line 15 处开始:
此处没进行用户输入有效性处理………
user_code = request.getParameter("user_code").trim();
strSql = "select count(*) from UserInfo where user_code = ‘"+ user_code +"‘ and
password = ‘" +password+ "‘ and status=1";
以上查询为问题出处,当 user_code 为 tt’ or 1=1 时 strSql 为:
where user_code=’tt’ OR 1=1 and password=’aaa’ and status=1
结果为表中所有记录…..,通过对 user_code 输入值的构造几乎可以对数据库进
行任何操作,部分数据库系统中可能获取系统最高权限……….
上 面描述的是 SQL Injection 问题,进一步的转为应用逻辑完整性判断的讨论,用
户登陆需要强壮的判断逻辑,仅判断是否返回结果是不够的,还应该加上查询
评论0
最新资源