安全测试那些事儿......

一、 验证码

public void verifyCode(HttpSession session,HttpServletResponse resp){

// 验证码图片的宽度。 
int width = 60; 
// 验证码图片的高度。 
int height = 20; 
// 验证码字符个数 
int codeCount = 4; 
int x = 0; 
// 字体高度 
int fontHeight; 
int codeY; 
char[] codeSequence = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
'k', 'l', 'm', 'n', 'o', 'p', 'Q', 'r', 's', 't', 'u', 'v', 'w', 
'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 
x = width / (codeCount + 1); 
fontHeight = height - 2; 
codeY = height - 4; 
BufferedImage buffImg = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_RGB); 
Graphics2D g = buffImg.createGraphics(); 
// 创建一个随机数生成器类 
Random random = new Random(); 
// 将图像填充为白色 
g.setColor(Color.WHITE); 
g.fillRect(0, 0, width, height); 
// 创建字体,字体的大小应该根据图片的高度来定。 
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight); 
// 设置字体。 
g.setFont(font); 
// 画边框。 
// g.setColor(Color.BLACK); 
// g.drawRect(0, 0, width - 1, height - 1); 
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 
g.setColor(Color.BLACK); 
for (int i = 0; i < 1; i++) { 
int x2 = random.nextInt(width); 
int y2 = random.nextInt(height); 
int xl = random.nextInt(12); 
int yl = random.nextInt(12); 
g.drawLine(x2, y2, x + xl, y2 + yl); 

// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 
StringBuffer randomCode = new StringBuffer(); 
int red = 0, green = 0, blue = 0; 
int iRandom = 0, iMinRandom = 0, iMaxRandom = 0; 
// 随机产生codeCount数字的验证码。 
for (int i = 0; i < codeCount; i++) { 
// 得到随机产生的验证码数字。 
iRandom = random.nextInt(36);
if(iRandom < iMinRandom){
iMinRandom = iRandom;
}
if(iRandom > iMaxRandom){
iMaxRandom = iRandom;
}
if(i == codeCount -1){
if(iMinRandom > 25){
iRandom = iMinRandom - 10;
}
if(iMaxRandom < 26){
iRandom = 26 + random.nextInt(10);
}
}
String strRand = String.valueOf(codeSequence[iRandom]); 
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 
red = random.nextInt(255); 
green = random.nextInt(255); 
blue = random.nextInt(255); 
// 用随机产生的颜色将验证码绘制到图像中。 
g.setColor(new Color(red, green, blue)); 
g.drawString(strRand, (i + 1) * x, codeY); 
// 将产生的四个随机数组合在一起。 
randomCode.append(strRand); 

// 将四位数字的验证码保存到Session中。 
session.setAttribute("validateCode", randomCode.toString()); 
ServletOutputStream sos; 
try { 
sos = resp.getOutputStream(); 
ImageIO.write(buffImg, "jpeg", sos); 
sos.close(); 
} catch (IOException e) { 
e.printStackTrace(); 

二、 登陆成功后重置JSESSIONID

HttpSession session = req.getSession(false);

Map<String,Object> tempMap = new HashMap();  
if ( session != null ) {
//首先将原session中的数据转移至一临时map中  
Enumeration<String> sessionNames = session.getAttributeNames();  
while(sessionNames.hasMoreElements()){  
String sessionName = sessionNames.nextElement();  
tempMap.put(sessionName, session.getAttribute(sessionName));  
}  
       session.invalidate(); // 废弃旧的 session
}
session = req.getSession(true);
for(Map.Entry<String, Object> entry : tempMap.entrySet()){  
   session.setAttribute(entry.getKey(), entry.getValue());  

}  

三、去掉tomcat默认管理页面

修改webapp目录下的root重命名或者是删除

四、去掉tomcat版本

去掉catalina.jar包中的版本信息,具体文件路径:org\apache\catalina\util\ServerInfo.properties


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值