1.弱口令漏洞
解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密。
2.未使用用户名及密码登录后台可直接输入后台URL登录系统。
解决方案:通过配置filter来过滤掉无效用户的连接请求。
3.JSP页面抛出的异常可能暴露程序信息。有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。
解决方案:自定义一个Exception,将异常信息包装起来不要抛到页面上。
4.合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。
解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:
|
httpResponse
.
setHeader
(
"Cache-Control"
,
"no-cache"
)
;
httpResponse
.
setHeader
(
"Cache-Control"
,
"no-store"
)
;
httpResponse
.
setDateHeader
(
"Expires"
,
0
)
;
httpResponse
.
setHeader
(
"Pragma"
,
"no-cache"
)
;
|
5.SQL注入漏洞。
解决方案:在数据库访问层中不要使用“+”来拼接SQL语句!如:
|
String
sql
=
“
SELECT
*
FROM
USERS
WHERE
1
=
1”
;
if
(
null
!=
user
.
getUserName
(
)
&&
!””
.
equals
(
user
.
getUserName
(
)
)
)
{
sql
+
=
“
and
UNAME
=
‘”
+
user
.
getUserName
(
)
+”’”
;
}
|
而应使用PreparedStatement。如:
|
PreparedStatement
pstmt
=
con
.
prepareStatement
(
"SELECT * FROM USERS WHERE UNAME=?"
)
;
pstmt
.
setString
(
1
,
“
Neeke”
)
;
|
如果项目中使用了Hibernate框架,则推荐使用named parameter。如:
|
String
queryString
=
"from Users where uname like :name"
;
|
冒号后面是一个named parameter,我们可以使用Query接口将一个参数绑定到name参数上:
|
List
result
=
session
.
createQuery
(
queryString
)
.
setString
(
"name"
,
user
.
getUserName
(
)
)
.
list
(
)
;
|
6.文件上传漏洞。前台仅使用JS对文件后缀做了过滤,这只能针对普通的用户,而恶意攻击者完全可以修改表单去掉JS校验。
解决方案:前台JS过滤加服务器端程序过滤。具体过滤掉哪些文件类型视具体情况而定。
7.可执行脚本漏洞。对用户提交的数据未转义,一些用户提交的含有JavaScript脚本的信息被直接输出到页面中从而被浏览器执行。
解决方案:使用org.apache.commons.lang.StringEscapeUtils对用户提交的数据进行转义。如:
|
@RequestMapping
(
params
=
"method=addTopic"
,
method
=
RequestMethod
.
POST
)
public
ModelAndView
addTopic
(
HttpServletRequest
request
,
HttpServletResponse
response
,
BbsTopic
topic
)
{
BaseAdmin
user
=
(
BaseAdmin
)
request
.
getSession
(
)
.
getAttribute
(
Constant
.
SESSION_USER
)
;
topic
.
setBaseAdmin
(
user
)
;
topic
.
setTopicDate
(
new
Timestamp
(
System
.
currentTimeMillis
(
)
)
)
;
topic
.
setTopicContent
(
StringEscapeUtils
.
escapeHtml
(
topic
.
getTopicContent
(
)
)
)
;
topic
.
setTopicTitle
(
StringEscapeUtils
.
escapeHtml
(
topic
.
getTopicTitle
(
)
)
)
;
this
.
bbsTopicService
.
save
(
topic
)
;
return
new
ModelAndView
(
new
RedirectView
(
"bbs.do?method=topicList&bfid="
+
topic
.
getBfid
(
)
)
)
;
}
|
8.Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。
解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。