?? 通过使用AppScan安全扫描工具对各WEB系统登录页面和系统内部进行扫描,发现各系统普遍存在两类严重级别的安全问题:SQL注入和跨站脚本。以下分别进行说明。
一、SQL注入
1.问题说明:
通过把SQL命令插入到Web表单递交或通过http请求的查询字符串提交,最终达到欺骗服务器执行恶意的SQL命令。
如:目前在mlnframe框架中的登录验证是:
?
这样在登录时用户名输入英文单引号系统就会报500错误。
同时如果通过输入:帐号' or 1='1,注入sql会绕过vaildated=’1’的验证并登录到系统。
如下图所示的系统用户为停用状态,应该都无法登录系统,但是在用户名处输入00676' or 1='1后并输入密码,该用户就能正常登录系统操作。
?
2.处理建议:
建议在后台处理时对英文单引号进行替换处理,以避免在查询参数中加入的其他条件和语句被后台服务器执行。处理措施可如下图所示:
?
二、跨站脚本
1.问题说明:
跨站脚本有两种形式:
A.一种是直接在输入框中输入包含脚本或恶意链接等的信息并保存,当显示加载此内容项时脚本或恶意链接便会自动运行。例如下图:
?
当此项内容被加载并显示时会同时执行其中所输入的脚本或链接。
又例如,通过脚本可获得当前登录人的sessionid ,并在失效前利用此sessionid伪装成该登录用户,进行各种操作。如果提交的信息中包含了获取某用户sessionid脚本,并将其发送到指定位置,如下图中ID:
?
使用该ID可以在任何一台甚至不用登录该web系统的电脑上对其用户密码进行修改。如下图所示,在本地通过发送修改密码的请求给服务器,成功将用户密码修改为999999:
?
B.另一种是通过发送http请求把参数传递到后台,如果后台没有处理直接返回该参数到前台时的就会载入并会运行参数内容,同时也可以通过onmouseover()、 expression()等改变系统样式或者运行自定义的恶意脚本、链接跳转等。如下图红色框中内容是跟随processinsid加进去的:
?
2.处理建议:
建议对输入的内容在后台进行过滤或者对保存时的输入进行转义。
三、总结
上述例子都是在对系统做非法操作,这些安全问题被专业人员利用的话会造成很大的危害。通过对使用AppScan扫描后的结果进行分析可以看出:这些问题基本都是由于参数传递到后台没有进行合法性处理引起的。
处理建议如下:
1.在后台处理时对英文单引号进行合法性处理,避免非法利用单引号进行sql注入。(通过查看AppScan中的测试数据和其它资料发现大部分都是利用单引号来进行的)
2.保存时对各参数中的内容进行过滤或者转义。(通过查看AppScan中的测试数据发现大部分都是包含<script>、onmouseover、’>等符号)
3.针对以上两种解决措施可专门定义一个过滤这些字符的filter配置在web.xml中,如下图所示:
?
?
统一对请求的参数进行过滤,可以在很大程度上避免sql注入和跨站脚本漏洞造成的危害。
4.以下为AppScan工具中对于这两类问题建议过滤的内容,可以参考处理:
[1] |(竖线符号)
[2] &(& 符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] @(at 符号)
[7] '(单引号)
[8] "(引号)
[9] \'(反斜杠转义单引号)
[10] \"(反斜杠转义引号)
[11] <>(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)
[18] +(加号)
5.分析Appscan结果会发现,除了上述特殊符外仍有很多其它的非法字符串会造成系统返回500错误,由于此错误的返回内容中详细的描述了错误的地方,这种错误信息也被归类为严重的安全问题,如下图:
?
?Appscan认为这种描述可被专业人士用来分析系统结构等,建议最大程度避免500错误的产生,同时对500错误统一定制返回页面。如在web.xml中配置:
?
这样发生意外的500错误时只返回所配置的页面。